添加自定义监控项目
很多监控项目是在模版里面配置体现出来的,但有时候会有一些个性化的需求,比如就是想知道某一个业务的数据,运营人员想知道网站注册量,和会员活动每天的活跃度,这些数据实际上是可以通过数据库里面的表体现出来的,但是在Zabbix不可以提供这么详细的监控项目,当遇到这种需求怎么办? 当遇到这种需求需要一个在客户端写一个shell脚本,把这个数值展现出来,通过一个监控项目,再去形成图表,给运营人员分析每星期的数值,以及每个月的数值趋势走向. zabbix在这点上还是不错的,可以自定义去监控一个项目.
需求:监控某台80端口的连接数,并出图
说明:首先是要获得这个连接数,拿到数值后到zabbix中心创建监控项目,然后针对这个项目做一个图形.
第1步:到客户端上定义一个脚本
[root@root-02 ~]# vim /usr/local/sbin/estab.sh
#! /bin/bash
## 获取80端口并发连接数
netstat -ant |grep ':80' |grep -c ESTABLISHED
注:netstat -ant 是可以查看连接数的.
# 赋予执行权限
[root@root-02 ~]# chmod 755 /usr/local/sbin/estab.sh
注:其实是赋予zabbix用户 执行权限,因为最终是zabbix用户执行这个脚本
第2步:编辑客户端的配置文件
[root@root-02 ~]# vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1 --> 表示使用自定义脚本,(0表示关闭使用自定义脚本,1表示使用自定义脚本)
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh --> 定义脚本路径, 后面的[*]里面写脚本的参数,如果没有参数则可以省略.
#修改配置文件后,重启zabbix-agent服务
[root@root-02 ~]# systemctl restart zabbix-agent
在服务端测试客户端写的脚本是否有效
[root@root-01 ~]# zabbix_get -s 192.168.2.116 -p 10050 -k 'my.estab.count'
zabbix_get [28999]: Get value error: cannot connect to [[192.168.2.116]:10050]: [113] No route to host
注:提示没有找到这个host
#解决
检查防火墙是否关闭
[root@root-01 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2017-09-10 12:12:51 CST; 21h ago
Docs: man:firewalld(1)
Main PID: 592 (firewalld)
CGroup: /system.slice/firewalld.service
└─592 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
9月 10 12:12:45 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
9月 10 12:12:51 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
[root@root-02 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2017-09-10 12:13:17 CST; 21h ago
Docs: man:firewalld(1)
Main PID: 583 (firewalld)
CGroup: /system.slice/firewalld.service
└─583 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
9月 10 12:13:10 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
9月 10 12:13:17 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
说明:测试不成功的是原因是因为防火墙没有关闭
#关闭客户端&服务端的防火墙
[root@root-01 ~]# systemctl stop firewalld
[root@root-02 ~]# systemctl stop firewalld
#重新测试就OK了
说明: 显示0, 说明可以获得数值
[root@root-01 ~]# zabbix_get -s 192.168.2.116 -p 10050 -k 'my.estab.count'
0
Zabbix监控中心配置,增加监控项目
说明:点击配置 --> 主机 --> 选择root-02 的监控项 -->点击创建监控项
名称(自定义) --> 键值 -->添加
给添加的并发连接数监控项目做图形
说明:点击图形 --> 创建图形 -->名称 --并发连接数 --> 添加 -->选中并发连接数 -->选择 -->添加#并发连接数图形创建成功
给并发连接数监控项目做个触发器
说明:点击触发器 -->创建触发器 --> 名称 :并发连接数 --> 严重性 -- 选择告警 -->表达式 --添加 --> 监控项目 --点击选择--> 选中并发连接数 --> 功能 选择 最新的T值<N --> N 定义为200 (意思是并发数达到200就告警) -->添加
配置邮件告警
说明:需要准备一个邮箱作为告警用 (可以使用QQ邮箱或163邮箱),要想这个邮箱发邮件,也就是在第三方平台上,比如在服务器上调用163的邮箱发邮件,需要开启POP3/SMTP/IMAP服务.
在邮件上开启POP3/SMTP/IMAP服务
步骤:登录163邮箱 -->点击设置 -->选择POP3/SMTP/IMAP -->POP3/IMAP服务 和SMTP/IMAP服务 选中 --> 会提示让我们设置授权码 --> 确定 -->开启 -->提示手机验证 -->输入手机发来的验证码 -->确定 -->设置授权码 -->确定 -->保存
在Zabbix监控中心设置报警媒介类型
说明 :点击设置-->告警媒介类型 -->创建报警媒介类型 --> 名称 自定义 --> 类型 选择脚本 -->脚本名称 自定义 -->添加 -->定义脚本参数 --添加
脚本参数含义:
{ALERT.SENDTO} -- 发邮件给谁
{ALERT.SUBJECT} -- 邮件标题
{ALERT.MESSAGE} -- 邮件内容
创建告警脚本
说明:脚本放在哪里,在服务端的配置文件是定义的.
[root@root-01 ~]# vim /etc/zabbix/zabbix_server.conf
搜索/AlertScripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts --> 这就是定义脚本所放路径 (这不需要我们定义,自带的)
# 在/usr/lib/zabbix/alertscripts目录下创建mail.py脚本
说明:脚本内容去以下网址下载:
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
[root@root-01 ~]# cd /usr/lib/zabbix/alertscripts
[root@root-01 alertscripts]# vim mail.py
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.163.com'
mail_user = '15017941124@163.com'
mail_pass = '123466'
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me,to_list,msg.as_string())
s.close()
return True
except Exception,e:
print str(e)
return False
if __name__ == "__main__":
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
#给mail.py脚本设置权限
[root@root-01 alertscripts]# chmod 755 mail.py
测试能否发邮件
[root@root-01 alertscripts]# python mail.py anna_wqd@163.com "asdhgj" "testagdjyoujian12434"
Send mail failed. Error: (535, 'Error: authentication failed')
注:报错是因为脚本写错了密码,邮箱账号后面应该跟授权码,修改回来就OK了
[root@root-01 alertscripts]# python mail.py anna_wqd@163.com "asdhgj" "testagdjyoujian12434"
创建用户
说明:这个用户是用来接收邮件的,若没有用户这邮件是发给说呢?
第1步 :设置 --> 用户 -->创建用户 -->别名 、用户名第一部分、姓氏 (自定义) -->
添加 -->选择 Zabbix administrators (管理员用户组)-->设置密码 -->设置语言-->添加
第2步:设置报警媒介
说明:报警媒介 --> 添加 -->类型 -->选择报警 -->收件人 (填收件邮箱地址)--> 添加
第3步:设置权限
说明:点击权限 --> 用户类型 -->选择用户 (显示没有权限)-->需要到用户组里面去更改权限
#更改用户组权限
说明:点击用户组--> 点击Zabbix administrators --> 选择中读写 -->选择 -->全选 -->添加 -->更新
# 更改用户组的权限后,再来Anna用户的权限就变成读写了
第4步:定义动作
说明:我们配置了触发器,在触发了触发器后,要做什么,是要发邮件,还是发短信,还是去执行脚本,要做什么行为,都在动作定义的.
步骤:点击配置 -->动作 -->创建动作 --> 名称 (自定义) --> 新的触发条件 -->选择触发器警示度 -->选择大于或等于 (>=) -->选择未分类 -->添加
第5步:操作
说明:点击操作 --> 把默认信息全部删除掉 -->定义新的默认信息 -->点击新的 --> 发送到用户 --> 选择Anna -->选择 -->仅送到 -->选择报警 -- >点击新的 --> 条件 -->添加 --> 点完添加会看到:发送消息给用户-->添加
HOST:{HOST.NAME} {HOST.IP} -->定义hostname
TIME:{EVENT.DATE} {EVENT.TIME} -->定义时间
LEVEL:{TRIGGER.SEVERITY} -->就是前面定义的是触发示警度
NAME:{TIRGGER.NAME} --> 哪个触发器发生了报警
messages:{ITEM.NAME}:{ITEM.VALUE} --> 当发生报警的时候,会有什么状态码
ID:{EVENT.ID} --> 事件ID
第6步:恢复操作
说明:比如当负载很高的时候要发告警邮件,但当负载变成ok的时候也要发
步骤:点击恢复 -->把默认信息全部删除 --> 定义默认信息 --> 点击新的 -->发送到用户 -->选择Anna -->仅送到-->选择报警 -->添加
测试告警
说明:故意把监控项目更改成有问题的, 设置触发器,让它告警.
步骤:配置-->主机--> root -02 选择触发器 --> 创建触发器 --> 名称(自定义)- 系统负载 --> 添加
-->最新的T值<N --> N 设置为1 ; 当小于1的时候就告警,正常情况下负载是0 ,那么就会马上告警
点击Zabbix -->查看最近20个问题
可以看到动作完成1,说明可以正常发送邮件
#查看邮件,是可以收到告警邮件的
#原本负载值更改为1了,就会马上告警,那么现在把负载值更回正常的,也会收到ok的邮件
若是设置回正常,仍然收不到邮件,那么检查恢复操作.
不发邮件的问题处理
1.检查发邮件的脚本
[root@root-01 alertscripts]# python mail.py anna_wqd@163.com "test" "This is test jiaoben"
[root@root-01 alertscripts]# ls -lt mail.py
-rwxr-xr-x. 1 root root 1163 9月 11 12:42 mail.py
可以收到邮件,说明脚本ok
2. 检测Zabbix 监控中心 -- 用户设置
检查报警媒,查看收件人邮箱地址是否有误
说明:点击管理 -->用户 -->报警媒介;
检查用户权限是否是读写,若不是将无法收到告警邮件
3.检查Zabbix 监控中心 --动作
检查动作--操作是否有选择发送到用户(Anna)
说明:点击配置-->动作-->发邮件-->条件