1.详细讲解自定义监控
1.认识Template OS Linux 模块的所有监控项都是干什么的
2.自定义一个监控项 ( 创建监控项中的所有选项 )
PS:映射值也可写存活于非存活 克隆:基于当前的监控项进行克隆,修改对应的键值即可
3.历史保留如何计算? ( 数据 )
days*(items/refresh rate)*24*3600*bytes items:监控项数量。 days:保留历史数据的天数。 refresh rate:监控项的更新间隔。 bytes:保留单个值所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。 90*(200/60)*24*3600 ~ 24MB * 200主机 = 5G
4.趋势保留如何计算? ( 图形 )
days*(items/3600)*24*3600*bytes items:监控项数量。 days:保留历史数据的天数。 bytes:保留单个趋势数据所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。 365*(200/3600)*24*3600 ~ 2MB * 200主机 = 500MB
5.事件如何计算?
days*events*24*3600*bytes events:每秒产生的事件数量。假设最糟糕的情况下,每秒产生 1 个事件。 days:保留历史数据的天数。 bytes:保留单个趋势数据所需的字节数,取决于数据库引擎,通常为 ~170 字节。 365*1*24*3600 ~ 30MB *200主机 = 6G https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements
6.自定义监控TCP 11种状态?
netstat -an | grep -c ESTABLISHED netstat -an | grep -c LISTEN netstat -an | grep -c SYN_SENT netstat -an | grep -c TIME_WAIT 1.使用shell命令提取状态 2.通过zabbix-agent将提取的状态封装为一个又一个的监控项目 3.检查封装后的监控项是否取值正确 4.创建一个模板 5.基于模板创建监控项 6.将主机关联该模板,完成监控 7.检查监控后的数据 UserParameter=tcp[*], netstat -lntp | grep -c "$1"
查看最新数据—>若出现不支持的key----->修改我们用户的配置刷新参数为10s/次----重启服务
7.如何让其他机器也能使用该模板?
1.推送*.conf文件,这样其他主机也能提取到key对应的值 2.将主机关联对应的模板
8.自定义触发器
https://www.cnblogs.com/kingle-study/p/10172413.html
1.单条件触发器
1.单条件触发:监控内存的百分比, 如果 低于20% 则触发报警 1.通过shell命令提取内存的百分比 2.设定触发器 [root@web01 zabbix_agentd.d]# cat all.conf UserParameter=user_login,who|wc -l UserParameter=free.mem.ava,free -m |awk '/^Mem/ { print $NF/$2*100}'
2.多条件触发器
2.监控内存, 以及swap 当内存低于百分之20,并且swap使用率超过百分之1% 则触发报警 内存取的是剩余 20 swap取的是已使用 1 UserParameter=free.swap.ava,free -m |awk '/^Mem/ {print $3/$2*100}'
常用函数汇总:
变量 监控项 key | 键值 and #并且 多个监控项,同时成立 or #或者 多个监控项,一个成立 last() #比对最新的值 avg() #平均值 网络的流量 avg(5m) 进程 负载 IO diff() #比对上一次文件的内容 nodata() #收不到数据进行报警nodata(5m) 探测主机存活 test.nodata(5m) = 1 这个条件为真 获取不到数据报警 (5m) #表示最近5分钟得到值 (#5) #表示最近5次得到的值
3.自定义图形
1.基于监控项, 创建图形, 可以在模板上创建,这个所有的主机都应用成功 2.基于图形创建, 聚合图形, 将多个小图片整合至一个大图片上 ( 检测中--->聚合图形 ) 3.基于聚合图形创建幻灯片, 可以让多张聚合图形进行轮播 (大屏显示器 --> )
扩展: 如果希望出更好看,更炫的图,需要使用grafana 注意: grafana只是一个出图,所有的数据都是zabbix提供 ( 皮肤 )
1.安装grafana
yum localinstall grafana-6.4.4-1.x86_64.rpm
2.启动grafana 默认监听在3000端口
systemctl start grafana-server
3.安装插件, 集成zabbix
grafana-cli plugins install alexanderzobnin-zabbix-app systemctl restart grafana-server
4.启用已安装好的zabbix插件,这样就完成了集成
5.配置zabbix数据源
6.grafana 变量 ()
9.基于监控项
1.图形 2.聚合图形 3.幻灯片 4.grafana安装
10.自定义报警
基于监控项-->触发器-->执行动作--> ( 通知 | 执行命令 1.怎么发 2.发什么 3.发给谁
1.zabbix基于邮件报警
1.启用动作 2.动作中将所有的报警消息通过介质发送给administrator用户 3.配置介质--> 新建一个发邮件的邮箱介质 4.配置administrator用户, 填写收件人邮件
https://www.zabbix.com/documentation/3.4/zh/manual/appendix/macros/supported_by_location 修改报警的消息
报警主机:{HOST.NAME1} 报警服务: {ITEM.NAME1} 报警Key1: {ITEM.KEY1}:{ITEM.VALUE1} 报警Key2: {ITEM.KEY2}:{ITEM.VALUE2} 严重级别: {TRIGGER.SEVERITY}
2.配置故障恢复消息,消息内容如下:
恢复主机:{HOST.NAME1} 恢复服务: {ITEM.NAME1} 恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1} 恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}
3.zabbix基于企业微信报警
企业微信地址,个人可注册
https://work.weixin.qq.com/
1.登录企业微信
企业 -> 微工作台里可以直接微信关注,无需要下载企业微信 通讯录里的账号在发微信脚本中要用到 应用与小程序可创建应用
2.安装所需软件包
[root@zabbix ~]# yum install python-pip -y [root@zabbix ~]# pip install requests [root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/
3.编写微信告警脚本
[root@zabbix alertscripts]# cat weixin.py #!/usr/bin/env python #-*- coding: utf-8 -*- #author: chengyinwu #date: 2019 #comment: zabbix接入微信报警脚本 import requests import sys import os import json import logging logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s', datefmt = '%a, %d %b %Y %H:%M:%S', filename = os.path.join('/tmp','weixin.log'), filemode = 'a') corpid='ww4736ba0d716094' appsecret='C5GU_lus1Yxmn1heTccmRt2wOTUExeB6_edmPFAMg' agentid=10002 #获取accesstoken token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret req=requests.get(token_url) accesstoken=req.json()['access_token'] #发送消息 msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken touser=sys.argv[1] subject=sys.argv[2] #toparty='3|4|5|6' message=sys.argv[2] + "\n\n" +sys.argv[3] params={ "touser": touser, "toparty": toparty, "msgtype": "text", "agentid": agentid, "text": { "content": message }, "safe":0 } req=requests.post(msgsend_url, data=json.dumps(params)) logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
4.删除.log文件
[root@zabbix alertscripts]# rm -rf /tmp/weixin.log
5.报警测试
[root@zabbix alertscripts]# chmod +x weixin.py [root@zabbix alertscripts]# ./weixin.py ChengYinWu "监控测试" 123456
6.下边脚本需要传入的参数
{ALERT.SENDTO} #发送的用户 {ALERT.SUBJECT} #发送的主题 {ALERT.MESSAGE} #发送的内容
4.zabbix基于企业钉钉报警
钉钉企业的地址 https://oa.dingtalk.com/
钉钉企业告警的注意事项
1.通讯录管理里的userid发钉钉需要用到 2.工作台里可自建应用 3.微应用管理可以管理应用 4.开发账号管理可以查看密码信息
1.编写发送钉钉告警的脚本
[root@zabbix alertscripts]# cat dingding.py #!/usr/bin/python -*- coding: utf-8 -*- #curl 'https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx' import json,urllib2,sys appkey = 'dingqp5feq9vmsa8mc' appsecret = 'MD8Hq9Rfeztr3MMa6YSG95u98ZGeIkG_V8hzu3NOaYvvSVg1E8YchQ6NsK41r' agentid = '3204096' 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'))
2.报警测试
[root@zabbix alertscripts]# chmod +x dingding.py [root@zabbix alertscripts]# ./dingding.py manager9273 测试
11.告警抑制
1.远程执行命令
2.告警抑制是怎么回事
当服务出现异常时,无需立刻发送消息,等待下一次检查,如果还故障发送消息
12.告警升级
1个故障 出现 发邮件给运维 邮件 超过1分钟没有被处理 发邮件给经理 微信 超过2分钟没有被处理 发邮件给总监 钉钉