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

[经验分享] zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板

[复制链接]

尚未签到

发表于 2019-1-18 13:24:22 | 显示全部楼层 |阅读模式
  zabbix设置邮件报警
  http://xianglinhu.blog.运维网.com/5787032/1636436
  http://bbs.176it.com/forum.php?mod=viewthread&tid=31&extra=page%3D1
  方法一:说明此方法,会产生中文乱码问题
  第一步:首先安装mailx组件并配置好能够通过三方邮箱发送邮件
  yum -y install mailx
  然后编辑mailx的配置文件
  vi /etc/mail.rc
  在最末尾添加如下信息
  set from=xxxxxx@qq.com smtp=smtp.qq.com
  set smtp-auth-user=xxxxxx@qq.com smtp-auth-password=xxxxxx
  set smtp-auth=login
  保存退出后测试邮件是否能够正常发送出去
  echo"zabbix test mail" |mail -s "zabbix" xxxxxx@qq.com
  第二步:配置Zabbix服务端邮件报警
  1、打开Zabbix
  管理-示警媒介类型-创建媒体类型
  

  
  名称:Sendmail
  类型:脚本
  脚本名称:sendmail.sh
  已启用:勾选
  存档
  2、设置Zabbix用户报警邮箱地址
  管理-用户-Admin (Zabbix Administrator)
  切换到示警媒介-添加
  类型:Sendmail
  收件人:xxx@163.com
  其他默认即可,也可
  以根据需要设置
  状态:已启用
  存档

  3、设置Zabbix触发报警的动作
  配置-动作-创建动作
  形式一:
  名称:Action-Email
  默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
  默认信息:
  告警主机:  {HOSTNAME1}
  告警时间:  {EVENT.DATE} {EVENT.TIME}
  告警等级:  {TRIGGER.SEVERITY}
  告警信息:  {TRIGGER.NAME}
  告警项目:  {TRIGGER.KEY1}
  问题详情:  {ITEM.NAME}:{ITEM.VALUE}
  当前状态:  {TRIGGER.STATUS}:{ITEM.VALUE1}
  事件ID:  {EVENT.ID}
  恢复信息:打钩
  恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
  恢复信息:
  告警主机:  {HOSTNAME1}
  告警时间:  {EVENT.DATE} {EVENT.TIME}
  告警等级:  {TRIGGER.SEVERITY}
  告警信息:  {TRIGGER.NAME}
  告警项目:  {TRIGGER.KEY1}
  问题详情:  {ITEM.NAME}:{ITEM.VALUE}
  当前状态:  {TRIGGER.STATUS}:{ITEM.VALUE1}
  事件ID:  {EVENT.ID}
  已启用:打钩
  形式二:
  名称:Action-Email
  默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
  注意如果这里默认标题在发送到邮件中出现中文乱码可以改成下面这样的就不会有乱码了
  默认标题:{TRIGGER.STATUS}, : {HOSTNAME1} : {TRIGGER.NAME}
  默认信息:
  AlarmHost:{HOSTNAME1}
  AlarmTime:{EVENT.DATE} {EVENT.TIME}
  AlarmLevel:{TRIGGER.SEVERITY}
  AlarmMessige: {TRIGGER.NAME}
  AlarmItem:{TRIGGER.KEY1}
  AlarmDetil:{ITEM.NAME}:{ITEM.VALUE}
  Status:{TRIGGER.STATUS}:{ITEM.VALUE1}
  EventID:{EVENT.ID}
  恢复信息:打钩
  恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
  注意如果这里默认标题在发送到邮件中出现中文乱码可以改成下面这样的就不会有乱码了
  默认标题:{TRIGGER.STATUS}, : {HOSTNAME1} : {TRIGGER.NAME}
  恢复信息:
  AlarmHost:{HOSTNAME1}
  AlarmTime:{EVENT.DATE} {EVENT.TIME}
  AlarmLevel:{TRIGGER.SEVERITY}
  AlarmMessige: {TRIGGER.NAME}
  AlarmItem:{TRIGGER.KEY1}
  AlarmDetil:{ITEM.NAME}:{ITEM.VALUE}
  Status:{TRIGGER.STATUS}:{ITEM.VALUE1}
  EventID:{EVENT.ID}
  已启用:打钩
  切换到操作选项
  
  新的
  操作类型:送出信息
  送到用户:添加
  默认信息:打钩
  选择用户:Admin
  选择
  仅送到:Sendmail
  存档
  4、添加Zabbix服务端邮件发送脚本
  zabbix 2.2之前版本脚本如下:
  cd/usr/local/zabbix-2.4.4/scripts #进入脚本存放目录
  vi sendmail.sh #编辑,添加以下代码
  #!/bin/bash
  #export LANG=zh_CN.UTF-8         //解决发送的中文变成了乱码的问题
  echo "$3" | mail -s "$2"$1
  :wq! #保存退出
  zabbix 2.4版本脚本如下:
  # yum -y install dos2unix
  # cat /usr/local/zabbix/scripts/sendmail.sh
  #!/bin/bash
  #export LANG=zh_CN.UTF-8
  FILE=/usr/local/zabbix/scripts/log
  echo "$3" >$FILE
  /usr/bin/dos2unix -k $FILE
  /bin/mail -s "$2" $1 < $FILE
  chmod +x /usr/local/zabbix-2.4.4/scripts/sendmail.sh
  #设置脚本执行权限
  touch /usr/local/zabbix-2.4.4/scripts/log
  chmod 755 /usr/local/zabbix-2.4.4/scripts/log
  chown -R zabbix.zabbix /usr/local/zabbix-2.4.4
  5、设置zabbix_server服务调用脚本的目录
  vim/usr/local/zabbix-2.4.4/etc/zabbix_server.conf
  #进入zabbix_server配置文件
  AlertScriptsPath=/usr/local/zabbix-2.4.4/scripts
  找到上面这一行,将脚本存放目录写到此处
  保存并重启zabbix_server服务
  第三步:测试Zabbix报警
  关闭Zabbix客户端服务
  service zabbix_agentd stop
  查看xxx@163.com邮箱,会收到报警邮件
  再开启Zabbix客户端服务
  service zabbix_agentd start
  查看xxx@163.com邮箱,会收到恢复邮件
  使用外部邮箱账号发送报警邮件设置完成。
  至此,Zabbix邮件报警设置完成。
  
  方法二:http://www.cnblogs.com/chrisDuan/p/4505646.html
  1、设置zabbix_server.conf文件
  AlterScript = /usr/local/zabbix/share/zabbix/alterscript
  2、建立告警脚本
  cd /usr/local/zabbix/share/zabbix/alterscript/
  sudo vim sendEmail.sh
#!/usr/bin/env python  
#coding:utf-8
  
import time
  
import smtplib
  
import logging
  
from email.mime.text import MIMEText
  
import sys
  
LOG_FILENAME="/var/log/email_python.log"
  
mail_host = 'mstp.163.com'
  
mail_user = 'xxxx@xxxx.com'
  
mail_pass = 'xxxxx'
  
mail_postfix = 'xxxxx'
  
def send_mail(to_list,subject,content,format='html'):
  
try:
  
  me=mail_user+""
  
  msg=MIMEText(content,format,'utf-8')
  
  msg["Accept-Language"]="zh-CN"
  
  msg["Accept-Charset"]="ISO-8859-1,utf-8"
  
  msg['Subject']=subject
  
  msg['From']=me
  
  msg['to']=to_list
  
  s=smtplib.SMTP()
  
  s.connect(mail_host,"25")
  
  s.login(mail_user,mail_pass)
  
  s.sendmail(me,to_list,msg.as_string())
  
  s.close()
  
except Exception,e:
  
  logging.basicConfig(filename = LOG_FILENAME, level = logging.DEBUG)
  
  logging.error(time.strftime('%Y-%m-%d %H:%I:%M',time.localtime(time.time()))+e)
  
if __name__ == "__main__":
  
send_mail(sys.argv[1],sys.argv[2],sys.argv[3])
  
  3、设置告警脚本的权限
  chmod zabbix:zabbix sendEmail.sh
  chown 755 sendEmail.sh
  4、最后按照方法一只需要在zabbix前端进行相应的配置即可。
  需要注意配置Zabbix触发报警的动作要按照下面方法:
  配置-动作-创建动作
  名称:Action-Email
  默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
  默认信息:
  
  告警主机:{HOSTNAME1}
  

  告警时间:{EVENT.DATE} {EVENT.TIME}
  

  告警等级:{TRIGGER.SEVERITY}
  

  告警信息: {TRIGGER.NAME}
  

  告警项目:{TRIGGER.KEY1}
  

  问题详情:{ITEM.NAME}:{ITEM.VALUE}
  

  当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
  

  事件ID:{EVENT.ID}
  
  

  恢复信息:打钩
  恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
  
  告警主机:{HOSTNAME1}
  

  告警时间:{EVENT.DATE} {EVENT.TIME}
  

  告警等级:{TRIGGER.SEVERITY}
  

  告警信息: {TRIGGER.NAME}
  

  告警项目:{TRIGGER.KEY1}
  

  问题详情:{ITEM.NAME}:{ITEM.VALUE}
  

  当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
  

  事件ID:{EVENT.ID}
  
  

  已启用:打钩

  操作这边按照下面操作
  新的
  操作类型:送出信息
  送到用户:添加
  默认信息:打钩
  选择用户:Admin
  选择
  仅送到:Sendmail
  存档
  
  
  
  
  Zabbix 常用Key值
  http://blog.csdn.net/apache0554/article/details/45821591
  http://www.ttlsa.com/zabbix/zabbix-agent-types-and-all-keys/
  1、监控端口的:net.tcp.port[,3306]
  /usr/local/zabbix/bin/ -s192.168.8.120 -knet.tcp.port[,3306] 返回1为192.168.8.120的端口3306存在,0为不存在
  2、监控进程的:proc.num[mysqld]
  /usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc.num[mysqld] 返回值为192.168.8.120中mysqld的进程数量
  /usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc.num[] 返回值为192.168.8.120中所有的进程数量
  3、查看CPU核数的:system.cpu.num 返回值为服务器CPU的核数
  4、查看系统的系统启动时间和当前时间:system.boottime、system.localtime 返回值为系统启动时间和当前时间,为时间戳格式
  5、查看系统的简单信息:system.uname 返回值为192.168.8.120的系统信息,类似于linux系统的uname -a命令
  6、查看windowns系统当前网卡的进出流量:net.if.out[{HOST.NAME},bytes]、net.if.in[{HOST.NAME},bytes]和linux系统的key:net.if.out[eth0,bytes]、net.if.in[eth0,bytes]一样
  /usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -knet.if.in[192.168.8.120,bytes] 返回值为IP为192.168.8.120的进流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量
  /usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -knet.if.out[192.168.8.120,bytes] 返回值为IP为192.168.8.120的出流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量
  7、查看系统内存大小:vm.memory.size[total],返回值单位bytes
  8、查看文件的大小: vfs.file.size[file] 如: vfs.file.size[/var/log/syslog] 返回的是/var/log/syslog的大小,单位是:bytes
  9、查看文件是否存在:vfs.file.exists[file] 文件如果存在返回0,不存在返回1
  10、查看文件的MD5:vfs.file.md5sum[file]查看小文件的MD5,返回为MD5值(好像只有2.0以上的版本有这个key)
  11、自动发现网卡并监控流量和自动发现分区及分区挂载情况的两个key:net.if.discovery,vfs.fs.discovery,windows和linux监控模板中都有这模板(2.0以上版本),应用即可
  以上是常用的key,其实监控服务器无非就是内存、硬盘占用、CPU负载、流量、服务器和端口等情况。如果要监控其他的可以自定义key来实现,写个脚本来返回,得到自己想要的监控结果,zabbix在这块做的非常好,扩展性很强,支持各种脚本来实现自定义的key。
  要启用自定义key,需要在客户端的配置文件中启用UnsafeUserParameters=1参数,然后在配置文件的最下面来定义key,如:
  UserParameter=free.disk,/usr/local/zabbix/bin/disk.py
  free.disk为key的名字,/usr/local/zabbix/bin/disk.py为服务器端调用free.disk这个key时执行的脚本,其结果就是free.disk的返回值。脚本可以是任何可以运行的脚本语言。注意:脚本要用绝对路径,注意脚本的权限,写的脚本返回值要尽量简单,这样方便设置报警值。
zabbix触发器表达式详解
  我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下:
  {:.()}
  {主机:key.函数(参数)}常数
Functions函数
  触发器functions可以引用检索到的值,当前时间或者其他元素。
  触发器表达式支持的function完整列表请点击官网地址 supported functions
  大多数数值functions可以使用秒来作为参数。你可以使用前缀“#”来表示它有不同的含义

  last函数使用不同的参数将会得到不同的值,#2表示倒数第二新的数据。
  例入从老到最新值为1,2,3,4,5,6,7,8,9,10,last(#2)得到的值为9,last(#9)得到的值为2。last函数必须包含参数。
  AVG,count,last,min和max函数还支持额外的参数,以秒为单位的参数time_shift(时间偏移量)。
  例如avg(1h,1d),那么将会获取到昨天的1小时内的平均数据。
  注意:触发器表达式需要使用history历史数据来计算,如果history不可用(time_shift时间偏移量参数无法使用),因此history记录一定要保留长久一点,至少要保留需要用的记录。
  触发器表达式可以使用单位符号来替代大数字,例如5m替代300,或者1d替代86400,1k替代1024字节等等。
操作符

触发器示例
  三分钟取不到agent.ping的值,那也就是说agent宕了或者服务器挂了
{test-01:agent.ping.nodata(3m)}=1  触发器名称:Processor load is too high on www.zabbix.com
{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5  www.zabbix.com:host名称
  system.cpu.load[all,avg1]:item值,一分内cpu平均负载值
  last(0):最新值
  >5:最新值大于5
  如上所示,www.zabbix.com主机监控项,最新的CPU负载值如果大于5,那么表达式会返回true,这样一来触发器状态就改变为“problem”了。
  触发器名称:/etc/passwd has been changed
  使用函数 diff():
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0  /etc/passwd最新的checksum与上一次获取到的checksum不同,表达式返回true.触发器状态改变为“problem”了。
  我们可以使用同样的方法监控系统重要的配置文件,例如/etc/passwd,/etc/inetd.conf等等。这些zabbix一般都会自带,没带的你自己加上吧。
  触发器名称:Someone is downloading a large file from the Internet
  使用函数 min:
{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K  当前主机网卡eth0最后5分钟内接收到的流量超过100KB那么触发器表达式将会返回true,触发器状态变为problem
  触发器名称:Both nodes of clustered SMTP server are down
{smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0  当smtp1.zabbix.com和smtp2.zabbix.com两台主机上的SMTP服务器都离线,表达式将会返回true.
  触发器名称:Zabbix agent needs to be upgraded
  使用函数str():
{zabbix.zabbix.com:agent.version.str("beta8")}=1  如果当前zabbix agent版本包含beta8(假设当前版本为1.0beta8),这个表达式会返回true.
  触发器名称:Server is unreachable
{zabbix.zabbix.com:icmpping.count(30m,0)}>5  表示最近30分钟zabbix.zabbix.com这个主机超过5次不可到达。
  触发器名称:No heartbeats within last 3 minutes
  使用函数 nodata():
{zabbix.zabbix.com:tick.nodata(3m)}=1  tick为Zabbix trapper类型,
  首先我们要定义一个类型为Zabbix trapper,key为tick的item。我们使用zabbix_sender定期发送数据给tick,
  如果在3分钟内还未收到zabbix_sender发送来的数据,那么表达式返回一个true,与此同时触发器的值变为“PROBLEM”。
  触发器名称:CPU activity at night time
  使用函数 time():
{zabbix:system.cpu.load[all,avg1].min(5m)}>2&{zabbix:system.cpu.load[all,avg1].time(0)}>000000&{zabbix:system.cpu.load[all,avg1].time(0)}2Hysteresis(迟滞,滞后)
  触发器状态转变为problem需要一个条件,从problem转变回来还需要一个条件才行。一般触发器只需要不满足触发器为problem条件即可恢复。
  有时候触发器需要使用不同的条件来表示不同的状态,举个官网很有趣的例子:机房温度正常稳定为15-20°,当温度超过20°,触发器值为problem,当问题到了15°与20°之间,异常会解除。
  为了达到这个效果,我们需要使用如下触发器表达式:
  触发器名称:Temperature in server room is too high
({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)|  
({TRIGGER.VALUE}=1&{server:temp.last(0)}>15)
  如上有两个小括号,前面一个表示触发异常的条件,后面一个表达式表示解除异常的条件。
  注意:宏变量 {TRIGGER.VALUE}将会返回当前触发器的值
  触发器名称:Free disk space is too low
  Problem: 最近5分钟剩余磁盘空间小于10GB。(异常)
  Recovery: 最近10分钟磁盘空间大于40GB。(恢复)
  简单说就是一旦剩余空间小于10G就触发异常,然后接下来剩余空间必须大于40G才能解除这个异常,就算你剩余空间达到了39G(不在报警条件里)那也不算恢复了,还是处于problem状态
({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}

运维网声明 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-664853-1-1.html 上篇帖子: zabbix企业应用之解决大量的nodata报警通知 下篇帖子: centos安装zabbix
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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