添加自定义监控项目、 配置邮件告警、测试告警 、不发邮件的问题处理
添加自定义监控项目、 配置邮件告警、测试告警 、不发邮件的问题处理
Linux_Anna 发表于1个月前
添加自定义监控项目、 配置邮件告警、测试告警 、不发邮件的问题处理
  • 发表于 1个月前
  • 阅读 8
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

19.12 添加自定义监控项目

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

 

19.13 /19.14 配置邮件告警 

说明:需要准备一个邮箱作为告警用 (可以使用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/env python
#-*- coding: UTF-8 -*-
import os,sys
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from  subprocess import *
def sendqqmail(username,password,mailfrom,mailto,subject,content):
    gserver = 'smtp.163.com'
    gport = 25
    try:
        msg = MIMEText(unicode(content).encode('utf-8'))
        msg['from'] = mailfrom
        msg['to'] = mailto
        msg['Reply-To'] = mailfrom
        msg['Subject'] = subject
        smtp = smtplib.SMTP(gserver, gport)
        smtp.set_debuglevel(0)
        smtp.ehlo()
        smtp.login(username,password)
        smtp.sendmail(mailfrom, mailto, msg.as_string())
        smtp.close()
    except Exception,err:
        print "Send mail failed. Error: %s" % err
def main():
    to=sys.argv[1]
    subject=sys.argv[2]
    content=sys.argv[3]
##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
    sendqqmail('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)
if __name__ == "__main__":
    main()


#给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 -->仅送到-->选择报警 -->添加

 

 

19.15 测试告警

说明:故意把监控项目更改成有问题的, 设置触发器,让它告警.

步骤:配置-->主机--> root -02 选择触发器 --> 创建触发器 --> 名称(自定义)- 系统负载 --> 添加
-->最新的T值<N --> N 设置为1 ; 当小于1的时候就告警,正常情况下负载是0 ,那么就会马上告警



点击Zabbix -->查看最近20个问题

可以看到动作完成1,说明可以正常发送邮件


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




#原本负载值更改为1了,就会马上告警,那么现在把负载值更回正常的,也会收到ok的邮件
  若是设置回正常,仍然收不到邮件,那么检查恢复操作.



 

 

19.16 不发邮件的问题处理

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)

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


共有 人打赏支持
粉丝 4
博文 57
码字总数 96541
×
Linux_Anna
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: