添加自定义监控项目

很多监控项目是在模版里面配置体现出来的,但有时候会有一些个性化的需求,比如就是想知道某一个业务的数据,运营人员想知道网站注册量,和会员活动每天的活跃度,这些数据实际上是可以通过数据库里面的表体现出来的,但是在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 的监控项 -->点击创建监控项  
          名称(自定义) --> 键值 -->添加




 给添加的并发连接数监控项目做图形

说明:点击图形 --> 创建图形 -->名称 --并发连接数 --> 添加 -->选中并发连接数 -->选择 -->添加 

zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警



#并发连接数图形创建成功


zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警_02


zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_03

 



给并发连接数监控项目做个触发器

说明:点击触发器 -->创建触发器 --> 名称 :并发连接数 --> 严重性 -- 选择告警 -->表达式 --添加  --> 监控项目 --点击选择--> 选中并发连接数 --> 功能 选择 最新的T值<N --> N 定义为200 (意思是并发数达到200就告警) -->添加


 



 配置邮件告警 

说明:需要准备一个邮箱作为告警用 (可以使用QQ邮箱或163邮箱),要想这个邮箱发邮件,也就是在第三方平台上,比如在服务器上调用163的邮箱发邮件,需要开启POP3/SMTP/IMAP服务.




在邮件上开启POP3/SMTP/IMAP服务

步骤:登录163邮箱 -->点击设置 -->选择POP3/SMTP/IMAP -->POP3/IMAP服务 和SMTP/IMAP服务 选中 --> 会提示让我们设置授权码 --> 确定 -->开启 -->提示手机验证 -->输入手机发来的验证码 -->确定 -->设置授权码  -->确定 -->保存

zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_04


zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_05



zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_06


zabbix监控手动关闭告警 监控报警怎么设置关闭_触发器_07

 



在Zabbix监控中心设置报警媒介类型

说明 :点击设置-->告警媒介类型 -->创建报警媒介类型 --> 名称 自定义 --> 类型 选择脚本 -->脚本名称 自定义 -->添加 -->定义脚本参数 --添加

zabbix监控手动关闭告警 监控报警怎么设置关闭_连接数_08



zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警_09



 

脚本参数含义:

    {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"

zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_10

 



创建用户

说明:这个用户是用来接收邮件的,若没有用户这邮件是发给说呢?
第1步 :设置 --> 用户 -->创建用户 -->别名 、用户名第一部分、姓氏 (自定义) -->
         添加 -->选择 Zabbix administrators (管理员用户组)-->设置密码 -->设置语言-->添加


第2步:设置报警媒介
            说明:报警媒介 --> 添加 -->类型 -->选择报警 -->收件人 (填收件邮箱地址)--> 添加


第3步:设置权限 
说明:点击权限 --> 用户类型 -->选择用户 (显示没有权限)-->需要到用户组里面去更改权限

zabbix监控手动关闭告警 监控报警怎么设置关闭_触发器_11


 

#更改用户组权限
说明:点击用户组--> 点击Zabbix administrators --> 选择中读写 -->选择 -->全选 -->添加 -->更新

zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_12

zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警_13


zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警_14


 

# 更改用户组的权限后,再来Anna用户的权限就变成读写了

zabbix监控手动关闭告警 监控报警怎么设置关闭_触发器_15

第4步:定义动作

说明:我们配置了触发器,在触发了触发器后,要做什么,是要发邮件,还是发短信,还是去执行脚本,要做什么行为,都在动作定义的.
步骤:点击配置 -->动作 -->创建动作 --> 名称 (自定义) --> 新的触发条件 -->选择触发器警示度 -->选择大于或等于 (>=) -->选择未分类 -->添加


第5步:操作

说明:点击操作 --> 把默认信息全部删除掉 -->定义新的默认信息 -->点击新的 -->  发送到用户 --> 选择Anna -->选择 -->仅送到  -->选择报警 -- >点击新的 --> 条件 -->添加 --> 点完添加会看到:发送消息给用户-->添加

zabbix监控手动关闭告警 监控报警怎么设置关闭_连接数_16


zabbix监控手动关闭告警 监控报警怎么设置关闭_触发器_17

zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_18

zabbix监控手动关闭告警 监控报警怎么设置关闭_连接数_19

zabbix监控手动关闭告警 监控报警怎么设置关闭_触发器_20

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,说明可以正常发送邮件

zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警_21


#查看邮件,是可以收到告警邮件的

zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警_22


#原本负载值更改为1了,就会马上告警,那么现在把负载值更回正常的,也会收到ok的邮件


  若是设置回正常,仍然收不到邮件,那么检查恢复操作.

zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_23


zabbix监控手动关闭告警 监控报警怎么设置关闭_触发器_24


zabbix监控手动关闭告警 监控报警怎么设置关闭_连接数_25

 

 



 不发邮件的问题处理



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

zabbix监控手动关闭告警 监控报警怎么设置关闭_触发器_26

 



2. 检测Zabbix 监控中心 -- 用户设置



检查报警媒,查看收件人邮箱地址是否有误

说明:点击管理 -->用户 -->报警媒介; 

zabbix监控手动关闭告警 监控报警怎么设置关闭_触发器_27



检查用户权限是否是读写,若不是将无法收到告警邮件

zabbix监控手动关闭告警 监控报警怎么设置关闭_自定义_28

 



3.检查Zabbix 监控中心 --动作



检查动作--操作是否有选择发送到用户(Anna)

说明:点击配置-->动作-->发邮件-->条件

zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警_29


zabbix监控手动关闭告警 监控报警怎么设置关闭_zabbix监控手动关闭告警_30