1.数据计算
2.自定义监控TCP 11种状态?
3.触发器
4.自定义报警
5.自定义模板(nginx状态
1.数据计算
1.历史保留如何计算? ( 数据 )
days(items/refresh rate)243600bytes
items:监控项数量。
days:保留历史数据的天数。
refresh rate:监控项的更新间隔。
bytes:保留单个值所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。
90(200/60)24*3600 ~ 24MB * 200主机 = 5G
2.趋势保留如何计算? ( 图形 )
days(items/3600)243600bytes
items:监控项数量。
days:保留历史数据的天数。
bytes:保留单个趋势数据所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。
365(200/3600)24*3600 ~ 2MB * 200主机 = 500MB
3.事件如何计算?
daysevents243600bytes
events:每秒产生的事件数量。假设最糟糕的情况下,每秒产生 1 个事件。
days:保留历史数据的天数。
bytes:保留单个趋势数据所需的字节数,取决于数据库引擎,通常为 ~170 字节。
365124*3600 ~ 30MB *200主机 = 6G
https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements
2.自定义监控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"
如何让其他机器也能使用该模板?
1.推送*.conf文件,这样其他主机也能提取到key对应的值
2.将主机关联对应的模板
3.触发器
1.自定义触发器
https://www.cnblogs.com/kingle-study/p/10172413.html
①.监控内存的百分比, 如果 低于20% 则触发报警
1.通过shell命令提取内存的百分比
2.设定触发器
②.多条件触发器
1.监控内存, 以及swap 当内存低于百分之20,并且swap使用率超过百分之1% 则触发报警
内存取的是剩余 20
swap取的是已使用 1
变量
监控项
key | 键值
2.触发器功能
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 变量 ()
1.实现一个单条件触发器
2.实现一个多条件触发器
3.基于监控项
1.图形
2.聚合图形
3.幻灯片
4.grafana安装
4.自定义报警
基于监控项-->触发器-->执行动作--> ( 通知 | 执行命令
1.怎么发
2.发什么
3.发给谁
1.启用动作
2.动作中将所有的报警消息通过介质发送给administrator用户
3.配置介质--> 新建一个发邮件的邮箱介质
4.配置administrator用户, 填写收件人邮件
https://www.zabbix.com/documentation/3.4/zh/manual/appendix/macros/supported_by_location
1.修改触发器动作
1.修改报警的消息
报警主机:{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}
{ALERT.SENDTO} #发送的用户
{ALERT.SUBJECT} #发送的主题
{ALERT.MESSAGE} #发送的内容
2.报警方式
邮件报警
微信报警
钉钉报警
-
邮件报警:
image.png
image.png 微信报警
企业微信地址,个人可注册
https://work.weixin.qq.com/
登录企业微信
1. 企业 -> 微工作台里可以直接微信关注,无需要下载企业微信
2. 通讯录里的账号在发微信脚本中要用到
3. 应用与小程序可创建应用
发微信的python脚本/usr/local/zabbix/alertscripts/weixin.py
[root@zabbix-server alertscripts]# cat weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: bgx
#date: 2018
#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='xxx'
appsecret='xxx'
agentid=xxx
#获取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)
测试脚本
/usr/local/zabbix/alertscripts/weixin.py 'xuliangwei' 'weixin_subject' 'weixin_message'
- 钉钉报警
钉钉企业的地址
https://oa.dingtalk.com/
钉钉企业告警的注意事项
1.通讯录管理里的userid发钉钉需要用到
2.工作台里可自建应用
3.微应用管理可以管理应用
4.开发账号管理可以查看密码信息
发送钉钉告警的脚本/usr/local/zabbix/alertscripts/zabbix_dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
#curl 'https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx'
import json,urllib2,sys
appkey = 'xxx'
appsecret = 'xxx'
agentid = 'xxx'
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'))
手动发钉钉告警测试
chmod +x /usr/local/zabbix/alertscripts/zabbix_dingding.py
/usr/local/zabbix/alertscripts/dingding.py 194668593697491 'dingding_messages'
{ALERT.SENDTO} #发送的用户
{ALERT.SUBJECT} #发送的主题
{ALERT.MESSAGE} #发送的内容
3.告警升级 | 告警抑制
1.远程执行命令
2.告警抑制是怎么回事
告警抑制:
1个故障 出现 发邮件给运维 邮件
超过1分钟没有被处理 发邮件给经理 微信
超过2分钟没有被处理 发邮件给总监 钉钉
5.自定义模板(nginx状态)
开启nginx状态
location /nginx_status {
stub_status;
access_log off;
allow 127.0.0.1;
deny all;
}
编写取值脚本
[root@web1 zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.d/scripts/nginx.sh Nginx_status_file=/tmp/nginx_status.tmp
Nginx_status_name=status.oldxu.com
Nginx_status_path=/nginx_status
curl -sH host:${Nginx_status_name} http://127.0.0.1:80/${Nginx_status_path} > ${Nginx_status_file}
case $1 in
active)
echo $[ $(awk 'NR==1 {print $NF}' ${Nginx_status_file}) -1 ]
;;
accepts)
echo $[ $(awk 'NR==3 {print $1}' ${Nginx_status_file}) - 1 ]
;;
handled)
echo $[ $(awk 'NR==3 {print $2}' ${Nginx_status_file}) - 1 ]
;;
requests)
echo $[ $(awk 'NR==3 {print $3}' ${Nginx_status_file}) - 1 ]
;;
reading)
awk 'NR==4 {print $2}' ${Nginx_status_file}
;;
writing)
awk 'NR==4 {print $4}' ${Nginx_status_file}
;;
waiting)
awk 'NR==4 {print $NF}' ${Nginx_status_file}
;;
*)
echo "USAGE: $0 [active|accepts|handled|requests|reading|writing|waiting]"
;;
esac
添加自定义监控项
UserParameter=nginx[*],/bin/bash /etc/zabbix/zabbix_agentd.d/scripts/nginx.sh "$1"
web界面添加模板