文章目录

  • 1. 了解自定义监控
  • 1.1 认识Template OS Linux 模板的所有监控项
  • 1.2 自定义一个监控项 ( 创建监控项中的所有选项 )
  • 3. 历史保留如何计算? ( 数据 )
  • 4. 自定义监控TCP 11种状态
  • 5. 如何让其他机器也能使用该模板
  • 6. 自定义触发器
  • 6.1 实现一个单条件触发器
  • 6.2 实现一个多条件触发器
  • 7. 自定义图形
  • 8. Zabbix+Grafana打造高逼格监控系统
  • 8.1 安装Grafana
  • 8.2 基于监控项
  • 9. 自定义告警
  • 9.1 Zabbix基于邮件告警
  • 9.2 zabbix基于企业微信告警
  • 9.3 Zabbix基于企业钉钉告警
  • 10. 告警抑制
  • 10.1 远程执行命令
  • 10.2 告警抑制怎么操作
  • 11. 告警升级


1. 了解自定义监控

1.1 认识Template OS Linux 模板的所有监控项

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义

1.2 自定义一个监控项 ( 创建监控项中的所有选项 )

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_02


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_03


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_04

PS:映射值也可写存活于非存活
克隆:基于当前的监控项进行克隆,修改对应的键值即可

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_zabbix自定义脚本配置触发表达式_05

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

4. 自定义监控TCP 11种状态

TCP11种状态

1.使用shell命令提取状态   grep -c  只输出匹配行的计数
	netstat -an | grep -c ESTABLISHED
	netstat -an | grep -c LISTEN
	netstat -an | grep -c SYN_SENT
	netstat -an | grep -c TIME_WAIT

2.通过zabbix-agent将提取的状态封装为一个又一个的监控项目
[root@web01 zabbix_agentd.d]# vim tcp.conf
[root@zabbix zabbix_agentd.d]# cat tcp.conf 
UserParameter=tcp[*],netstat -an |grep -c "$1"

3.检查封装后的监控项是否取值正确
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k tcp[LISTEN]
48

4.创建一个模板
5.基于模板创建监控项
6.将主机关联该模板,完成监控
7.检查监控后的数据

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_06


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_数据库_07


查看我们的最新数据--->若出现不支持的key----->修改我们用户的配置刷新参数为10s/次----重启服务

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_zabbix自定义脚本配置触发表达式_08


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_zabbix自定义脚本配置触发表达式_09


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_zabbix自定义脚本配置触发表达式_10

5. 如何让其他机器也能使用该模板

1.推送*.conf文件,这样其他主机也能提取到key对应的值
systemctl restart zabbix-agent

2.将主机关联对应的模板

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_11

6. 自定义触发器

zabbix监控基本报警故障

6.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}'

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mvc_12


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_zabbix自定义脚本配置触发表达式_13

6.2 实现一个多条件触发器
2.监控内存, 以及swap  当内存低于百分之20,并且swap使用率超过百分之1% 则触发报警
		1.内存取的是剩余		20
		2.swap取的是已使用	1
UserParameter=free.swap.ava,free -m |awk '/^Mem/ {print $3/$2*100}'
-----------------------------------------------------------------------------
常用函数汇总:	
变量----shell
监控项-----zabbix
key  | 键值  ----web

and         #并且    多个监控项,同时成立    
or          #或者	 多个监控项,一个成立

last()      #比对最新的值
avg()       #平均值						网络的流量 avg(5m)  进程  负载  IO
diff()      #比对上一次文件的内容			
nodata()    #收不到数据进行报警nodata(5m)   探测主机存活 
		test.nodata(5m) = 1     这个条件为真	获取不到数据报警
			
(5m)        #表示最近5分钟得到值
(#5)        #表示最近5次得到的值

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mvc_14


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_数据库_15


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_16

7. 自定义图形

1.基于监控项, 创建图形, 可以在模板上创建,这个所有的主机都应用成功
2.基于图形创建, 聚合图形, 将多个小图片整合至一个大图片上 ( 检测中—>聚合图形 )
3.基于聚合图形创建幻灯片, 可以让多张聚合图形进行轮播 (大屏显示器 --> )

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_17


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mvc_18

8. Zabbix+Grafana打造高逼格监控系统

大牛: 如果希望出更好看,更炫的图,需要使用grafana
注意: grafana只是一个出图,所有的数据都是zabbix提供 ( 皮肤 )

8.1 安装Grafana

Grafana官网

1.下载grafana
wget https://dl.grafana.com/oss/release/grafana-6.6.1-1.x86_64.rpm
[root@zabbix ~]# yum localinstall grafana-6.6.1-1.x86_64.rpm -y

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  变量()  了解

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_数据库_19


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_zabbix自定义脚本配置触发表达式_20


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_21

8.2 基于监控项
1.图形
2.聚合图形
3.幻灯片
4.grafana安装

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mvc_22


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_zabbix自定义脚本配置触发表达式_23

9. 自定义告警

基于监控项-->触发器-->执行动作--> ( 通知  |  执行命令  
	1.怎么发        
	2.发什么
	3.发给谁
9.1 Zabbix基于邮件告警
1.启用动作
2.动作中将所有的报警消息通过介质发送给administrator用户
3.配置介质--> 新建一个发邮件的邮箱介质
4.配置administrator用户, 填写收件人邮件

定义自定义报警的内容

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_24


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_25


1. 修改报警的消息

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_数据库_26

报警主机:{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}

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_27

9.2 zabbix基于企业微信告警
企业微信地址,个人可注册
https://work.weixin.qq.com/

0.登录企业微信
1.	企业 -> 微工作台里可以直接微信关注,无需要下载企业微信
2.	通讯录里的账号在发微信脚本中要用到
3.	应用与小程序可创建应用

1.安装所需软件包
[root@zabbix ~]# yum install python-pip -y
[root@zabbix ~]# pip install requests
[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/

2.编写微信告警脚本
[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)  

3.告警测试
[root@zabbix alertscripts]# chmod +x weixin.py 
[root@zabbix alertscripts]# ./weixin.py ChengYinWu "监控测试" 123456

4.删除.log文件
[root@zabbix alertscripts]# rm -rf /tmp/weixin.log


5.下边脚本需要传入的参数
{ALERT.SENDTO}      #发送的用户
{ALERT.SUBJECT}     #发送的主题
{ALERT.MESSAGE}     #发送的内容

点击管理--->报警媒介类型--->创建媒介类型填写微信告警名称,以及脚本需要传入的参数:

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_28


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_29


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_30


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_自定义_31

9.3 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 测试测试

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_zabbix自定义脚本配置触发表达式_32


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_33

10. 告警抑制

10.1 远程执行命令

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_34


zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mysql_35

10.2 告警抑制怎么操作

当服务出现异常时,无需立刻发送消息,等待下一次检查,如果还故障发送消息

11. 告警升级

1-2步: 发送给运维	1h
		3-4步: 发送给经理	10m
		5-6步: 发送给总监	10m
1个故障 出现  			发邮件给运维		邮件
超过1分钟没有被处理 	发邮件给经理		微信
超过2分钟没有被处理 	发邮件给总监		钉钉

zabbix自定义脚本配置触发表达式 zabbix自定义告警模板_mvc_36