- 企业实战之监控升级可视化zabbix4.0 系列 三
- 用户管理及告警实战
- 一、实验环境
- 二、用户管理
- Zabbix创建用户
- 三、邮件告警
- 在zabbix服务器先把映射文件发送到我们需要监控的服务器上
- 在www_001这台服务器上修改主机名
- 在www_002这台服务器上修改主机名
- 使用systemctl管理起来
- 如果这里有问题请重启下服务器
- 四、zabbix告警原理
- 在zabbixserver端
- 这里特别注意zabbix_server配置文件里不能出现中文,如果有中文在做邮件报警的时候回报错,请删掉并且重启zabbix_server。如果还是不行,就直接重启服务器。然后把各个服务重启一遍
- !/usr/bin/python
- -- coding: utf-8 --
- 注意复制粘贴以后吧注释去掉
- 验证脚本是否成功
- 五、微信告警
- !/usr/bin/python
- -- coding: utf-8 --
- get tocken
- send wechart
- ‘Suluo’ 是你的账号,后边的是’’里边是发送的内容
- 六、钉钉告警
- !/usr/bin/python
- -- coding: utf-8 --
- https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx‘">curl ‘https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx‘
企业实战之监控升级可视化zabbix4.0 系列 三
用户管理及告警实战
zabbix4.0系列
—私人课件,不出版,不公开,禁止传播
想做好运维工作,人先要学会勤快;
居安思危,勤记而补拙,方可不断提高;
别人的资料用的再爽也是别人的;
自己总结的东西是你自身特有的一种思想与理念的展现;
精髓不是看出来的,精髓是记出来的;
请同学们在学习的过程中养成好的学习习惯;
勤于实践,抛弃教案,勤于动手,整理文档。
+
一、实验环境
zabbix-server端
| 操作系统 | 主机名 | ip | 内存 |
|---|---|---|---|
| centos7.5 | zabbix | 192.168.200.173 | 1G |
zabbix-agent端
| 操作系统 | 被监控的主机名 | ip地址 | 运行的项目 | 内存 |
|---|---|---|---|---|
| centos6.5 | www_001 | 192.168.200.128 | nginx | 1G |
| centos7.5 | www_002 | 192.168.200.131 | nginx | 1G |
二、用户管理
Zabbix创建用户
2.1创建用户组 dev
2.2创建用户dev_suluo,属于用户组dev
2.3使用新建的用户登录Zabbix
三、邮件告警
3.1实验环境准备
在zabbix服务器先把映射文件发送到我们需要监控的服务器上
- [root@zabbix~]#cat/etc/hosts
- 127.0.0.1localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1localhost localhost.localdomain localhost6 localhost6.localdomain6
- 192.168.200.173zabbix
- 192.168.200.128www_001
- 192.168.200.131www_002
- [root@zabbix~]#scp/etc/hosts192.168.200.128:/etc/
- Theauthenticity of host’192.168.200.128 (192.168.200.128)’can’t be established.
- RSA key fingerprint is SHA256:LWinuYuB8lkixPIA7KfaMNL5vA+hQ3LG7e6Hv2U/6r0.
- RSA key fingerprint is MD5:60:1e:00:37:85:8b:a1:74:68:b3:35:3b:eb:20:33:3a.
- Are you sure you want to continue connecting (yes/no)? yes
- Warning: Permanently added ‘192.168.200.128’ (RSA) to the list of known hosts.
- root@192.168.200.128’s password:
- hosts100%229218.6KB/s00:00
- [root@zabbix~]#scp/etc/hosts192.168.200.131:/etc/
- Theauthenticity of host’192.168.200.131 (192.168.200.131)’can’t be established.
- ECDSA key fingerprint is SHA256:46jNFg96R/vgl81faS4UuFgiAaeYj2mC+OtQtVfR1I8.
- ECDSA key fingerprint is MD5:32:70:a3:6c:1f:50:33:7f:b6:9a:e4:c5:4b:ea:d9:99.
- Are you sure you want to continue connecting (yes/no)? yes
- Warning: Permanently added ‘192.168.200.131’ (ECDSA) to the list of known hosts.
- root@192.168.200.131’s password:
- hosts100%22911.3KB/s00:00
在www_001这台服务器上修改主机名
- [root@192~]#cat/etc/redhat-release
- CentOSrelease6.5(Final)
- [root@192~]#hostname-I
- 192.168.200.128
- [root@192~]#vim/etc/sysconfig/network
- [root@192~]#cat/etc/sysconfig/network
- NETWORKING=yes
- HOSTNAME=www_001
- [root@192~]#hostname www_001
- [root@192~]#exit
- [root@www_001~]#
在www_002这台服务器上修改主机名
- [root@192~]#cat/etc/redhat-release
- CentOSLinuxrelease7.5.1804(Core)
- [root@192~]#hostname-I
- 192.168.200.131
- [root@192~]#vim/etc/hostname
- [root@192~]#cat/etc/hostname
- www_002
- [root@192~]#reboot
-
3.2在agent端www_001服务器建立被监控的nginx服务
[root@www_001~]#ls
- anaconda-ks.cfg install.log install.log.syslog nginx-1.16.1.tar.gz
- [root@www_001~]#mount/dev/sr0/media/cdrom/
- mount:block device/dev/sr0iswrite-protected,mounting read-only
- [root@www_001~]#yum install-y wget gcc gcc-c++make pcre pcre-devel zlib zlib-devel openssl openssl-devel
- [root@www_001~]#tar xf nginx-1.16.1.tar.gz-C/usr/src/
- [root@www_001~]#cd/usr/src/nginx-1.16.1/
- [root@www_001 nginx-1.16.1]#./configure—prefix=/usr/local/nginx&&make&&make install
- [root@www_001 nginx-1.16.1]#ln-s/usr/local/nginx/sbin/* /usr/bin/
- [root@www_001 nginx-1.16.1]# cd /usr/local/nginx/conf/
- [root@www_001 conf]# egrep -v “#|^$” nginx.conf.default > nginx.conf
- [root@www_001 conf]# nginx -t
- nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- [root@www_001 conf]# nginx
- [root@www_001 conf]# ss -antup | grep 80
tcp LISTEN 0 128 :80 :* users:((“nginx”,4006,6),(“nginx”,4007,6))
3.3在agent端www_002服务器建立被监控的nginx服务
[root@www_002~]#ls
- anaconda-ks.cfg nginx-1.16.1.tar.gz
- [root@www_002~]#yum install-y wget gcc gcc-c++make pcre pcre-devel zlib zlib-devel openssl openssl-devel
- [root@www_002~]#tar xf nginx-1.16.1.tar.gz-C/usr/src/
- [root@www_002~]#cd/usr/src/nginx-1.16.1/
- [root@www_002 nginx-1.16.1]#./configure—prefix=/usr/local/nginx&&make&&make install
- [root@www_002 nginx-1.16.1]#ln-s/usr/local/nginx/sbin/* /usr/bin/
- [root@www_002 nginx-1.16.1]# cd /usr/local/nginx/conf/
- [root@www_002 conf]# egrep -v “#|^$” nginx.conf.default > nginx.conf
- [root@www_002 conf]# nginx -t
- nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- [root@www_002 conf]# nginx
- [root@www_002 conf]# ss -antup | grep 80
- tcp LISTEN 0 128 :80 :* users:((“nginx”,pid=3867,fd=6),(“nginx”,pid=3866,fd=6))
使用systemctl管理起来
- [root@www_002 conf]# cat /usr/lib/systemd/system/nginx.service
- [Unit]
- Description=nginx
- After=network.target
- [Service]
- Type=forking
- ExecStart=/usr/local/nginx/sbin/nginx
- [Install]
- WantedBy=multi-user.target
如果这里有问题请重启下服务器
- [root@www_002 ~]# systemctl stop nginx
- [root@www_002 ~]# ss -antup
- Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
- udp UNCONN 0 0 :68 :* users:((“dhclient”,pid=832,fd=6))
- tcp LISTEN 0 128 :22 :* users:((“sshd”,pid=889,fd=3))
- tcp LISTEN 0 100 127.0.0.1:25 : users:((“master”,pid=1043,fd=13))
- tcp ESTAB 0 52 192.168.200.131:22 192.168.200.1:52460 users:((“sshd”,pid=969,fd=3))
- tcp LISTEN 0 128 :::22 :::* users:((“sshd”,pid=889,fd=4))
- tcp LISTEN 0 100 ::1:25 :::* users:((“master”,pid=1043,fd=14))
- [root@www_002 ~]# ss -antup | grep 80
tcp LISTEN 0 128 :80 :* users:((“nginx”,pid=1201,fd=6),(“nginx”,pid=1200,fd=6))
四、zabbix告警原理
触发器触发后,可以配置对应的动作
在动作里可以发邮件、微信、钉钉、短信等4.1查看告警脚本的放置位置
在zabbixserver端
- [root@zabbix~]#cat/usr/local/zabbix/etc/zabbix_server.conf
- LogFile=/usr/local/zabbix/zabbix_server.log
- DBHost=127.0.0.1
- DBName=zabbix
- DBUser=zabbix
- DBPassword=zabbixpwd
- DBPort=3306
- Timeout=30
- AlertScriptsPath=/usr/local/zabbix/alertscripts#邮件告警和微信告警的脚本放置位置
- ExternalScripts=/usr/local/zabbix/externalscripts
- LogSlowQueries=3000
- [root@zabbix~]#ll/usr/local/zabbix/alertscripts#发现没有需要我们自己去创建一个
- ls:cannot access/usr/local/zabbix/alertscripts:Nosuch fileordirectory
- [root@zabbix~]#mkdir-p/usr/local/zabbix/alertscripts
- [root@zabbix~]#cd/usr/local/zabbix/alertscripts/
这里特别注意zabbix_server配置文件里不能出现中文,如果有中文在做邮件报警的时候回报错,请删掉并且重启zabbix_server。如果还是不行,就直接重启服务器。然后把各个服务重启一遍
- 命令:
- [root@zabbix~]#cp/usr/src/zabbix-4.0.3/misc/init.d/fedora/core/zabbix_server/etc/init.d/
- [root@zabbix~]#/etc/init.d/zabbix_server restart
附录1:邮件告警注意事项
服务器往外的25端口一般被云厂商禁止
所以建议使用465端口发送邮件
qq邮箱、163邮箱需要配置开启smtp
4.2生产邮箱授权码




附录2:qq授权码
- [root@zabbix alertscripts]#cat/usr/local/zabbix/alertscripts/zabbix_sendmail.py
!/usr/bin/python
-- coding: utf-8 --
- fromemail.mime.textimportMIMEText#python 加载的包
- fromemail.headerimportHeader#python 加载的包
- fromsmtplibimportSMTP_SSL#python 加载的包
- importsys
- smtpaddr=’smtp.qq.com‘#表示使用qq邮箱,如果你要使用163邮箱,就写成smtp.163.com
- myemail=’493115250@qq.com‘#你的邮箱地址
- password=’pjtryeiuazqdcbbe’#这里写你的授权码,每次都是不一样的,不要照抄
- recvmail=sys.argv[1]#对应邮件的发给谁
- subject=sys.argv[2]#对应邮件的主题
- content=sys.argv[3]#对应邮件的内容
- msg=MIMEText(“””%s”””%(content),”plain”,”utf-8”)#(content 里面是内容)
- msg[‘Subject’]=Header(subject,’utf-8’).encode()#(这里是主题)
- msg[‘From’]=myemail#调用上边的谁发的
- msg[‘To’]=recvmail#调用上边的参数发给谁
- try:
- smtp=SMTP_SSL(smtpaddr)#使用的协议,写这几行的时候一定要前面空格,要不报错
- smtp.login(myemail,password)#调用上边的账号和密码
- smtp.sendmail(myemail,recvmail.split(‘,’),msg.as_string())#myemail是我的邮箱,recvmailsplit(‘,’)是发送给谁,多个人用逗号隔开,一定要英文的,msg.as_string是发送的内容
- smtp.quit()
- print(“success”)#成功就发成功
- exceptExceptionase:
- print(“fail: “+str(e))#失败就发失败
注意复制粘贴以后吧注释去掉
验证脚本是否成功
- [root@zabbix alertscripts]#chmod+x zabbix_sendmail.py
- [root@zabbix alertscripts]#/usr/local/zabbix/alertscripts/zabbix_sendmail.py493115250@qq.com’zabbix disk’’content: disk > 90%’
- success
4.4查看邮箱是否收到邮件
4.5报警媒介添加邮件告警



附录3:三个参数
- 发送给谁{ALERT.SENDTO}
- 发送的主题{ALERT.SUBJECT}
- 发送内容{ALERT.MESSAGE}
4.6用户设置报警媒介


4.7修改模板的监控项



4.8定义模板触发器




4.9触发器关联动作









4.10验证发送邮件

- 我们让www_001服务器的nginx挂掉
- [root@www_001 conf]#nginx-s stop
4.11将001服务器回复我们看一下
- [root@www_001~]#nginx
- [root@www_001~]#ss-antup|grep80
- tcp LISTEN0128:80:*users:((“nginx”,4395,6),(“nginx”,4396,6))
4.12告警内容自定义以及告警抑制
一般来说我们自定义主题,里边带上主机名,以及主机ip就可以了,这样我们只看主题就可以很明确的看出是哪个服务器出问题了
- 主机名变量:{HOST.NAME1}
- 主机IP变量:{HOST.IP1}
4.13发送邮件来验证自定义告警主题内容
- 让www_001nginx挂掉
- [root@www_001~]#nginx-s stop
- [root@www_001~]#ss-antup|grep80
4.14将www_001主机的nginx回复我们看下邮件
- [root@www_001~]#nginx
- [root@www_001~]#ss-antup|grep80
- tcp LISTEN0128:80:*users:((“nginx”,4454,6),(“nginx”,4455,6))
4.15告警抑制
为什么要用告警抑制
像我们监控80端口这样的监控项,有的时候会因为网络波动获取不到数据,这个时候如果直接报警,我们设定通知100个人,那么100个人会收到邮件,下次网络恢复了,会在发邮件,这样的话,运维的垃圾邮件太多。所以我们要使用告警抑制,如果连续2分钟或者5分钟检查不到80端口,这个时候我们在发送邮件




4.16验证告警抑制
模拟网络波动
- [root@www_001~]#nginx-s stop
- [root@www_001~]#ss-antup|grep80

- [root@www_001~]#nginx
- [root@www_001~]#ss-antup|grep80
- tcp LISTEN0128:80:*users:((“nginx”,4505,6),(“nginx”,4506,6))
4.17我们来测试抑制两分钟后,再发送邮件
- [root@www_001~]#nginx-s stop
- [root@www_001~]#ss-antup|grep80



我们恢复nginx
- [root@www_001~]#nginx
- [root@www_001~]#ss-antup|grep80
- tcp LISTEN0128:80:*users:((“nginx”,4548,6),(“nginx”,4549,6))


附录4:

自己按着步骤去注册一个

不用下载企业微信就可以接受消息操作

获取zabbix给微信发消息的账号

创建应用,并且选择给谁发微信



记录我们重要的三个参数
5.2编写发送给微信的脚本
附录5:
- agentid = ‘1000002’ #这里是你的应用ID
- corpid = ‘wweb7edbef7979a552’ #这里是你的企业ID
- corpsecret = ‘XZdSEpQJxL3qEojydpGd3CymHx3te4kryZzkw5e8kYM’ #这里是你的应用ID的密码
- touser=sys.argv1 #many user: ‘zhangsan|wangwu’ 这个是发送给谁,我们这里使用参数,如果是多用户可以使用 | 去分割
- content=sys.argv2 #content 发送的内容下边的脚本可以直接粘贴使用,但是需要改下应用ID,企业ID,应用密码,后边的都不用改,其余的直接复制,脚本里不可以出现中文。
- [root@zabbix~]#cat/usr/local/zabbix/alertscripts/zabbix_wx.py
!/usr/bin/python
-- coding: utf-8 --
- importjson
- importsys
- importurllib,urllib2
- agentid=’1000002’
- corpid=’wweb7edbef7979a552’
- corpsecret=’XZdSEpQJxL3qEojydpGd3CymHx3te4kryZzkw5e8kYM’
get tocken
- gettoken_url=’https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=‘+corpid+’&corpsecret=’+corpsecret
- token_file=urllib2.urlopen(gettoken_url)
- token_data=token_file.read().decode(‘utf-8’)
- token_json=json.loads(token_data)
- my_token=token_json[‘access_token’]
send wechart
- touser=sys.argv[1]#many user: ‘zhangsan|wangwu’
- content=sys.argv[2]#content
- post_content={
- “touser”:touser,
- “agentid”:agentid,
- “msgtype”:”text”,
- “text”:{
- “content”:content,
- }
- }
- json_content=json.dumps(post_content)
- url=’https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=‘+my_token
- response=urllib2.urlopen(url,json_content)
- print(response.read().decode(‘utf-8’))
- [root@zabbix~]#chmod+x/usr/local/zabbix/alertscripts/zabbix_wx.py
- [root@zabbix~]#/usr/local/zabbix/alertscripts/zabbix_wx.py’Suluo’’disk >90’
- {“errcode”:0,”errmsg”:”ok”,”invaliduser”:””}
‘Suluo’ 是你的账号,后边的是’’里边是发送的内容
5.3在web界面设置媒介
5.4定义给那个用户
5.5定义动作
5.6测试微信发送告警
- [root@www_001~]#nginx-s stop
- [root@www_001~]#ss-antup|grep80


- [root@www_001~]#nginx
- [root@www_001~]#ss-antup|grep80
- tcp LISTEN0128:80:*users:((“nginx”,4713,6),(“nginx”,4714,6))
六、钉钉告警
6.1注册一个企业钉钉
注册地址
https://oa.dingtalk.com/
根据提示自己注册一个








6.2编写发送给钉钉的脚本
- [root@zabbix~]#cat/usr/local/zabbix/alertscripts/zabbix_dd.py
!/usr/bin/python
-- coding: utf-8 --
curl ‘https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx‘
- importjson,urllib2,sys
- appkey=’ding6wxsawxeygipfztg’#这里发现跟微信的脚本的用法一样,同样的需要这三个重要的信息
- appsecret=’Xm3N2C4L05omoBogh8_qKhj5f4IB0jtH6ely0Yw1oQbKJPUjl0nyMrSi234BSk8x’
- agentid=’583990691’
- touser=sys.argv[1]
- content=sys.argv[2]
- tockenurl=’https://oapi.dingtalk.com/gettoken?corpid=‘+appkey+”&corpsecret=”+appsecret
- tockenresponse=urllib2.urlopen(tockenurl)
- tockenresult=json.loads(tockenresponse.read().decode(‘utf-8’))
- tocken=tockenresult[‘access_token’]
- sendurl=’https://oapi.dingtalk.com/message/send?access_token=‘+tocken
- headers={
- ‘Content-Type’:’application/json’
- }
- main_content={
- “touser”:touser,
- “toparty”:””,
- “agentid”:agentid,
- “msgtype”:”text”,
- “text”:{
- “content”:content
- }
- }
- main_content=json.dumps(main_content)
- req=urllib2.Request(sendurl,headers=headers)
- response=urllib2.urlopen(req,main_content.encode(‘utf8’))
- print(response.read().decode(‘utf-8’))
注意脚本里不要出现中文,还有这个重要的信息有可能会变,大家看好自己的在去改下。
6.3测试钉钉脚本
- [root@zabbix~]#chmod+x/usr/local/zabbix/alertscripts/zabbix_dd.py
- [root@zabbix~]#/usr/local/zabbix/alertscripts/zabbix_dd.py manager6580’disk > 90’
{“errcode”:0,”errmsg”:”ok”,”messageId”:”578997677db63d4bb6df100dc61c1c0b”,”invalidparty”:””,”invaliduser”:””}
6.4钉钉接受到了消息
6.5在web界面定义媒介
6.6定义给那个用户
6.7定义动作
6.8测试钉钉
[root@www_001~]#nginx-s stop
- [root@www_001~]#ss-antup|grep80


恢复www_001
- [root@www_001~]#nginx
- [root@www_001~]#ss-antup|grep80
- tcp LISTEN0128:80:*users:((“nginx”,4849,6),(“nginx”,4850,6))

















































