zabbix页面配置钉钉报警
·
day73 zabbix页面配置钉钉报警
目前,以及确认,你的机器,和钉钉通信,发消息,是没问题
结合这个功能,实现zabbix触发器执行报警动作,触发钉钉报警,切发送报警的信息。
# zabbix配置要熟练,几大名词问你能立即说出来干啥的
模板
监控项
触发器是什么
图形,
报警媒介
完成项目,基于微信,邮件,钉钉,实现zabbix检测xxx服务,实现报警通知
基于bash和python的多种报警脚本开发
注意,该脚本,放入服务端的一个alter脚本目录中即可,
zabbix-server可以去调用它
AlertScriptsPath=/usr/lib/zabbix/alertscripts
确保脚本如下即可
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#ll
total 8
-rwxr-xr-x 1 zabbix zabbix 1739 Jul 11 11:57 dingding.py
-rwxr-xr-x 1 zabbix zabbix 2328 Jul 8 16:24 weixin.sh

至此,你的zabbix又多支持了一个钉钉报警
你还得配置你的用户,采用这个方式

触发报警
最后一步,测试钉钉是否报警
web7机器来测,触发报警(得看这个机器,有什么监控项!!!!!!!!)
day73 钉钉机器人API的关系
目标
1.钉钉报警
2.自定义监控模板(tcp11种状态),关联 web7 web8,或者db组机器
3.zabbix监控核心服务,nginx_status,php_status,这是监控公司网站的主要手段,更多的如数据库,和应用服务器,后面学了再补充
zabbix作为监控系统,核心在于,保障,提前预警,服务器硬件出现各种问题;
监控各种软件系统服务
网站来说
LNMP
linux服务器本身的健康状况,template os linux 50多个监控项,覆盖了绝大多数硬件资源的监控
nginx apache
web server, 提供被动式的web服务,接受http请求,相应http请求
nginx接受,处理的所有的请求状态,监控它的http连接数有多少,链接状况如何
基于nginx的status状态页功能区采集数据,构造监控项,添加触发器
nginx进程本身,master进程,worker进程的运行状态
自定义监控项的配置文件+采集进程的命令脚本 === zabbix-UI中
ps
netstat
nginx所有功能,你都可以给它监控上
属于web检测了
1. 检测nginx的某虚拟主机是否正常,通过什么命令可以监控?
curl 命令可以实现
2. 监控nginx设置的location 七层转发是否正常?
mysql 先放着
mysql服务状态本身
mysql的性能数据采集
php python
nginx(127.0.0.1:80) + 独立的php-fpm进程(127.0.0.1:9000)
以apache模块的形式,去解析php代码,没有独立的进程
php接受用户请求与相应
本质上web相关的通信,都是
一堆client 客户端,手机,ipad,电脑 发出 N个 http请求
↓
发给http服务端,发给php进程
本质上,监控php,1.服务本身运行状态 2、监控连接数
4.web监控
1. 如果上述的1,2,3题目都是基于命令行去监控,采集进程的信息,提取数据等玩法
2. 老大发话了,确保zabbix的登录页面,也要监控上,确保登录正常
通过脚本实现自动化
,找到,人为操作,背后的数据,到底发生了什么
4大知识点,1.zabbix回顾, 2.zabbix和业务结合的思考
构造监控项
2,curl 发出http协议的请求,就是看目标机器正确与http相对应
3,针对结果,构造报警器,和动作
4, 图形化的展示
钉钉的报警
这个和微信报警类似,都是指定的数据发送到钉钉官方提供的API接口
对于api的解释
和微信报警的请求发送流程
API的使用,访问流程
1. curl 发出http请求,携带一堆的参数,发送到json类型的数据,发给微信的API
(nginx先接收到请求,后面是居于路径,转发给location设置的后端服务器,处理以及响应,返回nginx,返回给用户,这里只不过返回的是json数据)
2, 微信的api url接收到请求后,处理请求,构造结果,返回一个json的数据
钉钉会将报警信息,发送到指定的钉钉群聊,提醒所有成员查看,实现报告通知。
什么叫做API,以及发给API请求


1.客户端页面上提交账户和密码
2,点击sign in 标签前端代码会构造json类型的数据
是post类型的求情发给这个url
所以说这个url称之为api
3.判断api是否正常,url是否正常
微信报警
钉钉报警
通过脚本 bash curl 命令请求
访问微信 钉钉的api url发送请求,提交数据
python脚本
另外的方式,都是api发送一个api而已
API会返回什么给你
1.可能返回一个html给你,zabbix是返回的字符串,html`
- 可能返回一个json数据(字符串)给你,
微信,钉钉API就是这么玩的。

- 发送请求构造post类型,构造json类型的账户密码数据
- 到达index.php 服务器
- 服务器返回给你一个response响应
该zabbix的登录,首页api每一个url就是一个api
作为你以后部署网站必须掌握的API的知识,web通信知识
先看微信的api,发送到微信,
#就是这一段代码
curl -s -H "Content-Type: application/json" -X POST "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${token}" -d' {
"toparty" : "'"${group}"'",
"msgtype" : "text",
"agentid" : "'"${agentid}"'",
"text" : {
"content" : "'"${title}\n\n${message}"'"
},
"safe":0
}'
发出get类型的请求,看看是什么结果
2个方式
给这个API,发出get类型的请求
curl 访问 ,方式1
用浏览器直接访问,方式,get类型
什么是api,
1.zabbix的登录页面,发出的http请求,查看响应的结果
都是携带者数据的get请求
(传入的数据,就是json类型的字符串,相应的数据,也就是json数据类型,json是一个网络传输的数据,数据结构类型)
具体,来看钉钉报警了
具体的操作流程
1.创建钉钉群聊
2.创建自定义机器人
创建报警关键词, zabbix
自动的生成一个AIP 以及身份令牌token
https://oapi.dingtalk.com/robot/send?access_token=9f47d1319cdfbc4af977dfe5ce17c65ddfc34bd302498891d99b82aafb13af6c
{"errcode":43002,"errmsg":"需要POST请求"}
只能通过post请求访问
测试该钉钉api 是否能发到钉钉组里
# 至此,API的玩法,你应该基本懂了
# 测试钉钉的API,是能发出去消息的
# 写脚本,按照该API规定的key,构造数据即可
curl -H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "关键字:zabbix 来自于linux0224的钉钉消息,看懂了吗老六同志。"}}' \
https://oapi.dingtalk.com/robot/send?access_token=9f47d1319cdfbc4af977dfe5ce17c65ddfc34bd302498891d99b82aafb13af6c
开发报警脚本
填写zabbix-ui界面的配置
测试钉钉报警通知


钉钉脚本,python版本
注意,该脚本是python3,你的目标机器,是否支持python3
yum install python3 python3-devel python3-pip -y
pip3 install requests
python语法比较优雅,你拿到代码,只需要修改什么就行?修改你的webhook,web钩子,钉钉机器人的API地址,该成你自己的即可
#!/usr/bin/python3
# coding: utf-8
# about zabbix python script
# Author: www.yuchaoit.cn
import requests,json,sys,os,datetime
# 钉钉机器人API
webhook_url='https://oapi.dingtalk.com/robot/send?access_token=9f47d1319cdfbc4af977dfe5ce17c65ddfc34bd302498891d99b82aafb13af6c'
# 给脚本参数手机号参数1
user_phone=sys.argv[1]
# 参数2,消息正文
text=sys.argv[2] + "\n\n" + sys.argv[3]
# 构造json数据体
data={
"msgtype":"text",
"text":{
"content":text
},
"at":{
"atMobiles":[user_phone],
"isAtAll":False
}
}
# 请求头,表明请求类型是json
headers={"Content-Type":"application/json"}
# 发HTTP请求,POST方式,传入数据与请求头
response=requests.post(url=webhook_url,data=json.dumps(data),headers=headers)
print(response.content)
# 日志目录生成
if os.path.exists("/tmp/dingding.log"):
with open("/tmp/dingding.log","a+") as f:
print("该文件以存在,追加写入中")
if response.json().get("errcode")==0:
f.write("\n" + str(datetime.datetime.now()) + " " + str(user_phone) + " " + "发送成功" + "\n" + str(text) )
else:
f.write("\n" + str(datetime.datetime.now()) + " " + str(user_phone) + " " + "发送失败" + "\n" + str(text) )
else:
with open("/tmp/dingding.log","w+") as f:
print("该日志文件不存在,创建且写入中")
if response.json().get("errcode")==0:
f.write("\n" + str(datetime.datetime.now()) + " " + str(user_phone) + " " + "发送成功" + "\n" + str(text) )
else:
f.write("\n" + str(datetime.datetime.now()) + " " + str(user_phone) + " " + "发送失败" + "\n" + str(text) )
这里需要传入几个参数
python3 dingding.py 15210858004 "来自于linux0224的钉钉消息" "keyword:zabbix 老六门,看懂了吗"
# 必须要有关键字

钉钉脚本bash版本
#!/bin/bash
# about zabbix bash script
# Author: www.yuchaoit.cn
#webhook 地址 webhook=''
#接受者的手机号,由 zabbix 传入
user=$1
#报警邮件标题,由 zabbix 传入
title=$2
#报警邮件内容,由 zabbix 传入
message=$3
# 构造语句执行发送动作
# bash就是用curl 构造json数据发出去而已,注意引号的细节就好
# 通过API返回的数据,来确认是否发送正确
curl -s -H "Content-Type: application/json" -X POST "https://oapi.dingtalk.com/robot/send?access_token=9f47d1319cdfbc4af977dfe5ce17c65ddfc34bd302498891d99b82aafb13af6c " -d '{"msgtype":"text","text":{"content":"'"${title}\n\n${message}\n\nzabbix报警啦!!!火烧屁股啦!!!老六们!!!"'"},"at":{"atMobiles":["'"${user}"'"],"isAtAll":false}}'
#将报警信息写入日志文件
echo -e "\n 报警时间:$(date +%F-%H:%M)\n 报警标题:${title}\n 报警内容:${message}" >> /tmp/ding_bash.log

更多推荐
所有评论(0)