设为首页 收藏本站
查看: 2577|回复: 0

[经验分享] zabbix实战:部署-->监控-->报警

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-10-19 08:25:14 | 显示全部楼层 |阅读模式
运维中有一句重要的话:不允许未监控的服务上线。  zabbix是一个基于web界面提供分布式系统监控以及网络监控的第三方开源软件,它主要由两部分组成:zabbix-server、zabbix-agent。
  zabbix具有多样的特性:
    1、支持网络自动发现机制。
    2、支持自定义检测机制UserParamenter
    3、支持实时绘图,把数据以图形的方式显示出来。
    4、支持报警功能,能够通过邮件、短信方式告警。
    5、支持使用模板,当有多个agent主机时,具有很大的帮助。

  本文实现的过程:
    1、通过shell推送ansible,实现agent批量部署
    2、实现zabbix-server自动发现功能,批量添加被监控端
    3、调用模板并在模板中添加自动发现规则,监听tcp所有端口
    4、基于postfix实现邮件报警
    5、基于中国网建的API实现短信报警

准备环境
               主机名
                  Ip
               部署服务
               node1
             192.168.1.22
   zabbix-server、zabbix-agent、ansible
               node2
             192.168.1.23
              zabbix-agent
               node3
             192.168.1.24
              zabbix-agent

实现前提:LAMP环境

一、zabbix系统全程部署
1、yum安装zabbix服务(node1)

1
2
###zabbix的yum源:  
[iyunv@node1 ~]# yum install zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-agent




2、让mysql对其授权用户,并导入zabbix的三个sql文件
1
2
3
4
5
6
7
[iyunv@node1 ~]# mysql -e "create database zabbix charset='utf8'"
[iyunv@node1 ~]# mysql -e "grant all on *.* to 'zabbix'@'localhost' identified by 'zabbix'"
[iyunv@node1 ~]# mysql -e "grant all on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'"
[iyunv@node1 ~]# mysql -uzabbix -h127.0.0.1 -p zabbix < /usr/share/doc/zabbix-server-mysql-2.4.8/create/schema.sql  
[iyunv@node1 ~]# mysql -uzabbix -h127.0.0.1 -p zabbix < /usr/share/doc/zabbix-server-mysql-2.4.8/create/images.sql
[iyunv@node1 ~]# mysql -uzabbix -h127.0.0.1 -p zabbix < /usr/share/doc/zabbix-server-mysql-2.4.8/create/data.sql
###导入完成后可查看mysql中的数据库zabbix是否生成相关的表




3、修改zabbix-server配置文件,启动并安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@node1 zabbix]# pwd
/etc/zabbix
[iyunv@node1 zabbix]# vim zabbix_server.conf
DBhost=localhost   ###指明数据库地址
DBname:zabbix   ###数据库名称
DBUser:zabbix   ###数据库用户
DBpassword:zabbix   ###数据库用户密码
DBSocket=/var/lib/mysql/mysql.sock   ###指明mysql数据库的套接字文件,如果zabbix和mysql在不同主机上可不用修改
[iyunv@node1 zabbix]# service zabbix-server start
[iyunv@node1 zabbix]# netstat -an | grep 10051
tcp        0      0 :::10051                    :::*                        LISTEN
[iyunv@node1 ~]# service httpd start   ##启动httpd服务
##访问zabbix页面进行安装:http://$IP/zabbix
注意:安装时报的错"timezone"这个参数可在"/etc/php.ini"或者是"/etc/httpd/conf.d/zabbix.conf"文件中修改




4、修改zabbix-agent的配置文件并启动,让Server端监控自己
1
2
3
4
5
6
7
[iyunv@node1 zabbix]# pwd
/etc/zabbix
[iyunv@node1 zabbix]# vim zabbix_agentd.conf
Server=10.10.73.148   ##Agent端允许那个服务器过来拉取数据
ServerActive=10.10.73.148   ##开启Agent端的主动模式,主动向服务端传输数据
[iyunv@node1 zabbix]# service zabbix-agent start
tcp        0      0 :::10050                    :::*                        LISTEN




5、通过脚本实现agent端批量部署
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash
#Author:wtc
##############[ Ansible Install ]###############

if ! 'rpm -q ansible' &> /dev/null;then    ##安装ansible服务

    yum install ansible -y &> /dev/null

    [[ $? -eq 0 ]] && echo "Install Ansible Success" || echo "Install Ansible Failed"
fi

##############[ Add Roles ] #################
cat > /etc/ansible/hosts    ##在ansible的hosts中添加agent主机ip

[zabbix]
192.168.1.23
192.168.1.24
END

##############[ Scp Zabbix.repo to Agent]###########

ansible zabbix -m copy -a "src=/etc/yum.repos.d/zabbix.repo dest=/etc/yum.repos.d/"    ##将zabbix的yum仓库发送至agent端

ansible zabbix -m shell -a "yum clean all"

ansible zabbix -m shell -a "yum repolist "

#############[ Mkdir Zabbix Directorys ]

Dir=/etc/ansible/roles/zabbix

[[ -d $Dir ]] || mkdir -pv $Dir/{files,templetes,tasks,handles,vars,meta,default}         ##创建zabbix角色相应的目录

cp /etc/zabbix/zabbix_agentd.conf /etc/ansible/roles/zabbix/templetes/zabbix_agentd.conf.j2

#############[ Zabbix taska/main.yml ] ########

cat  /etc/ansible/roles/zabbix/tasks/main.yml        ##编写yml文件
- name: install zabbix
  yum: name=zabbix-agent state=present
- name: conf file
  template: src=/etc/ansible/roles/zabbix/templetes/zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf
- name:
  service: name=zabbix-agent state=started enabled=true

END

#############[ yaml file ]################

cat  /root/zabbix.yaml
- hosts: all
  remote_user: root
  roles:
  - zabbix
END

ansible-playbook --check /root/zabbix.yaml

ansible-playbook /root/zabbix.yaml




6、在zabbix的web界面定义自动发现规则,自动添加被监控端

(a)Configuration--->Discovery--->Create discovery rule


(b)定义完成保存之后,等待几秒,查看服务端是否自动添加;Monitoring--->Discovery

###以上过程就是部署整个zabbix系统,但是部署完成后还需要添加监控项!




二、对监控端定义监控项
1、调用"Template OS Linux"模板
(a)Configuration--->Avtions--->Discovery--->Create action



(b)定义Action
(c)添加触发Action的条件Conditions


(d)定义操作Operations


(e)以上操作完成之后,可查看agent端是否调用模板



2、在"Template OS Linux"中没有监听tcp端口这一项,此时我们需要在模板中自定义检测机制"UserParamenter"
(a)编辑zabbix的配置文件,添加"UserParameter",并重启zabbix-agent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
[iyunv@node1 zabbix]# pwd
/etc/zabbix
[iyunv@node1 zabbix]# vim zabbix_agentd.conf    ##添加以下两行
UnsafeUserParameters=1
UserParameter=portlisten,/opt/app/zabbix/sbin/port.sh  ##"portlisten"自定义的key,port.sh脚本是基于json格式筛选出所有的tcp端口
[iyunv@node1 ~]# vim /opt/app/zabbix/sbin/port.sh
#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf  "\"data\":["
for ((i=0;i<$length;i++))
  do
     printf '\n\t\t{'
     printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
     if [ $i -lt $[$length-1] ];then
                printf ','
     fi
  done
printf  "\n\t]\n"
printf "}\n"
[iyunv@node1 sbin]# pwd
/opt/app/zabbix/sbin
[iyunv@node1 sbin]# sh port.sh
{
"data":[
        {"{#TCP_PORT}":"10050"},
        {"{#TCP_PORT}":"10051"},
        {"{#TCP_PORT}":"22"},
        {"{#TCP_PORT}":"25"},
        {"{#TCP_PORT}":"3306"},
        {"{#TCP_PORT}":"80"}
    ]
}
###注意:之所以使用"sudo netstat -tnlp"是因为"zabbix-server"服务是zabbix用户在执行

[iyunv@node1 ~]# zabbix_get -s 192.168.1.22 -k portlisten   ##在本机自行获取数据是否成功!
{
"data":[
        {"{#TCP_PORT}":"10050"},
        {"{#TCP_PORT}":"10051"},
        {"{#TCP_PORT}":"22"},
        {"{#TCP_PORT}":"25"},
        {"{#TCP_PORT}":"3306"},
        {"{#TCP_PORT}":"80"}
    ]
}
####使用zabbix_get获取远程主机数据遇到的问题
sudo: sorry, you must have a tty to run sudo:编辑"/etc/sudoers",注释"Defaults    requiretty"
sudo: no tty present and no askpass program specified:编辑"zabbix-agentd.conf",将"AllowRoot=0"改为"AllowRoot=1"

[iyunv@node1 sbin]# chown -R zabbix.zabbix /opt/   ##将port.sh脚本属主、属组改为zabbix
[iyunv@node1 sbin]# chmod -R +x /opt/   ##给脚本增加执行权限
[iyunv@node1 zabbix]# service zabbix-agent stop  
Shutting down Zabbix agent:                                [  OK  ]
[iyunv@node1 zabbix]# service zabbix-agent start  ##重启node1的zabbix-agent
Starting Zabbix agent:                                     [  OK  ]
[iyunv@node1 zabbix]# ansible zabbix -m shell -a "echo 'UnsafeUserParameters=1' &>> /etc/zabbix/zabbixagentd.conf"   ##使用ansible远程追加
[iyunv@node1 zabbix]# ansible zabbix -m shell -a "echo 'UserParameter=portlisten,/opt/app/zabbix/sbin/port.sh' &>> /etc/zabbix/zabbixagentd.conf"
[iyunv@node1 zabbix]# ansible zabbix -m shell -a "mkdir -p /opt/app/zabbix/sbin"   
[iyunv@node1 sbin]# ansible zabbix -m copy -a "src=/opt/app/zabbix/sbin/port.sh dest=/opt/app/zabbix/sbin"
[iyunv@node1 sbin]# ansible zabbix -m shell -a "chown -R zabbix.zabbix /opt"
[iyunv@node1 sbin]# ansible zabbix -m shell -a "chmod -R +x /opt"
[iyunv@node1 ~]# ansible zabbix -m shell -a "sed -i '/AllowRoot=0/c \AllowRoot=1' /etc/zabbix/zabbix_agentd.conf"  
####ansible调用"zabbix"这个组在第一个脚本已定义!
[iyunv@node1 ~]# ansible zabbix -m shell -a "service zabbix-agent stop"
[iyunv@node1 ~]# ansible zabbix -m shell -a "service zabbix-agent start"   ##重启agent端服务




(b)在"Template OS Linux"中添加自动发现规则
Configuration-->Templates-->Template OS Linux-->DIscovery-->Create discovery rule




(c)分别定义上图中的1、2、3
Item_prototypes--->Create item protopyte


Trigger_prototypes--->Create trigger prototype


Graph prototypes--->Create graph prototype

(d)查看tcp端口是否添加
Configuration--->Hosts--->Items


三、实现触发邮件报警
1、部署postfix服务,并发送测试短信

1
2
3
4
5
6
7
8
9
10
11
[iyunv@node1 ~]# yum install postfix -y    ##在node1上安装邮件服务器postfix
[iyunv@node1 ~]# vim /etc/postfix/main.cf  ##编辑配置文件,添加以下几行
myhostname = mail.umpay.com
myorigin = umpay.com
mydomain = umpay.com
mydestination = localhost
mynetworks = 127.0.0.0/8
[iyunv@node1 ~]# echo "127.0.0.1 mail.umpay.com umpay.com" &>> /etc/hosts
[iyunv@node1 ~]# service postfix start
[iyunv@node1 ~]# echo "Hello, New World" | mail -s "wtc" 1362365xxxx@163.com  ##发送测试短信
[iyunv@node1 ~]# tialf /var/log/maillog





2、定义zabbix服务端媒介
Administration->->Media types-->Create media type


3、随后定义Actions、Conditions、Operations
Configuration--->Actions--->Tirggers--->Create action





4、定义邮件收件人
Administration--->Users--->Zabbix administrators--->Users--->Admin--->Media

###以上操作完成后,邮箱报警完成

5、安装nginx,监听tcp808端口,测试邮箱报警
1
2
3
4
5
[iyunv@node1 nginx]# nginx
[iyunv@node1 nginx]# netstat -tnlp | grep nginx
tcp        0      0 0.0.0.0:808                 0.0.0.0:*                   LISTEN      16984/nginx
###出现新的tcp监听端口,zabbix会自动添加至items,这里就不截图了
[iyunv@node1 nginx]# nginx -s stop






四、实现短信报警
1、在zabbix默认调用脚本路径下放置脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[iyunv@node1 ~]# cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath
AlertScriptsPath=/usr/lib/zabbix/alertscripts
[iyunv@node1 ~]# vim /usr/lib/zabbix/alertscripts/sms.sh
#!/bin/bash

MOBILE_NUMBER=$1    # 手机号码
MESSAGE_UTF8=$3        # 短信内容
XXD="/usr/bin/xxd"
CURL="/usr/bin/curl"
TIMEOUT=5
MESSAGE_ENCODE=$(echo "$MESSAGE_UTF8" | ${XXD} -ps | sed 's/(..)/%/g' | tr -d '')

#Uid="ch丶疯子"
Uid="联动优势"
#Key="8c1604e2eb0d66dxxxxx"
Key="cfcc13b087aaee114c8e"
URL="http://utf8.sms.webchinese.cn/?Uid=${Uid}&Key=${Key}&smsMob=${MOBILE_NUMBER}&smsText=${MESSAGE_ENCODE}"

set -x
${CURL} -s --connect-timeout ${TIMEOUT} "${URL}"
[iyunv@node1 ~]# chmod -R +x /usr/lib/zabbix/alertscripts/sms.sh
[iyunv@node1 ~]# chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/sms.sh




2、配置短信告警媒介
Administration--->Media types--->Create media types


3、配置短信Actions
Configuration--->Actions--->Tirggers--->Create action
(a)配置短信内容



(b)配置告警条件

(c)定义告警接收人


4、配置短信接收人
Administration--->Users--->Zabbix administrators--->Users--->Admin--->Media


5、测试nginx短信tcp端口报警
1
[iyunv@node1 alertscripts]# nginx -s stop






问题总结:
1、在host中主机的Discover如果出现"value should not json project",解决办法如下
1
2
3
[iyunv@node1 ~]# ansible zabbix -m shell -a "sed -i '/Defaults    requiretty/c \#Defaults    requiretty' /etc/sudoers"
[iyunv@node1 ~]# ansible zabbix -m shell -a "echo 'zabbix   ALL=(ALL)   ALL' &>> /etc/sudoers"
[iyunv@node1 ~]# ansible zabbix -m shell -a "sed -i '/AllowRoot=0/c \AllowRoot=1' /etc/zabbix/zabbix_agentd.conf"






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-288175-1-1.html 上篇帖子: zabbix监控nginx 下篇帖子: 手把手安装ZABBIX2.2(CentOS6.5+Zabbix2.2.2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表