Zabbix通过Agent2监控MySQL服务并配置告警


发布于 2023-02-02 / 346 阅读 / 0 评论 /
Zabbix通过Agent2监控MySQL服务并配置告警

钉钉群创建钉钉机器人

image-20220706233003362

image-20220706233034099

image-20220706233144106

image-20220706233225241

image-20220706233302446

通过curl命令发送消息给机器人

#实例
curl '机器人URL' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "告警通知 钉钉机器人测试"}}'
​
#实际使用
curl 'https://oapi.dingtalk.com/robot/send?access_token=ac660ea5e5c195dcc6dd8b54ba0f8239d031b541702997b22bac93c7d77bd6d1' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "告警通知 钉钉机器人测试"}}'

通过python脚本发送消息给机器人

  • dingding.py脚本内容

#!/usr/bin/python3
#-*- coding: utf-8 -*-
​
import requests,json,sys,os,datetime
​
#设置机器人URL(webhook的值)
webhook="机器人URL"
​
#发给钉钉群中哪个用户
user=sys.argv[1]
​
#发送的报警内容
text=sys.argv[3]
data={
    "msgtype": "text",
    "text": {
        "content": text
    },
    "at": {
        "atMobiles": [
            user
        ],
        "isAtAll": False
    }
}
#钉钉API固定数据格式
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
​
#将发送的告警信息写入本地日志
if os.path.exists("/usr/lib/zabbix/alertscripts/dingding.log"): 
    f=open("/usr/lib/zabbix/alertscripts/dingding.log","a+") 
else:
    f=open("/usr/lib/zabbix/alertscripts/dingding.log","w+")
f.write("\n"+"--"*30)
​
#判断条件
if x.json()["errcode"] == 0:
    f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))
    f.close()
else:
    f.write("\n"+str(datetime.datetime.now()) + "    " + str(user) + "    " + "发送失败" + "\n" + str(text)) 
    f.close()  
  • dingding.py测试

./dingding.py dingding test "告警通知 钉钉机器人测试"
​
dingding                #群组里接收消息的任意一人的钉钉号
test                    #这里因脚本中没有设置接收参数(所以无实际意义仅仅起到变量占位的作用)
"告警通知 钉钉机器人测试"   #这段文字中为告警消息中显示的信息(必须包含刚才机器人安全设置中的关键词否则将不会收到消息)

Zabbix容器配置钉钉机器人

  • 将容器脚本路径映射到宿主机

#查看zabbix-server容器脚本存放路径
docker exec zabbix-server cat /etc/zabbix/zabbix_server.conf | grep ^AlertScriptsPath=
AlertScriptsPath=/usr/lib/zabbix/alertscripts
​
#将脚本存放路径映射到宿主机
vim docker-compose.yaml
version: '3.5'
services:
 zabbix-server:
  image: zabbix/zabbix-server-mysql:centos-6.0-latest
  container_name: zabbix-server
  restart: always
  ports:
   - "10051:10051"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:rw  #映射脚本目录(权限设置未读写)
   - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
   - ./zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw
   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
   - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro 
   - snmptraps:/var/lib/zabbix/snmptraps:rw
​
#关闭Zabbix容器
docker-compose --profile=all down
​
#运行Zabbix容器
docker-compose --profile=all up -d
  • 容器内安装python3

#方法一使用root用户连接容器
docker exec -it -u root zabbix-server bash
yum install python3
python3 -V
​
#方法二直接通过docker exec命令给容器安装软件
docker exec -u root zabbix-server yum -y install python3
docker exec zabbix-server python3 -V
  • 准备钉钉机器人python脚本

vim ./zbx_env/usr/lib/zabbix/alertscripts/dingding.py
#!/usr/bin/python3
#-*- coding: utf-8 -*-
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=ac660ea5e5c195dcc6dd8b54ba0f8239d031b541702997b22bac93c7d77bd6d1"
user=sys.argv[1]
text=sys.argv[3]
data={
    "msgtype": "text",
    "text": {
        "content": text
    },
    "at": {
        "atMobiles": [
            user
        ],
        "isAtAll": False
    }
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/lib/zabbix/alertscripts/dingding.log"): 
    f=open("/usr/lib/zabbix/alertscripts/dingding.log","a+") 
else:
    f=open("/usr/lib/zabbix/alertscripts/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
    f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))
    f.close()
else:
    f.write("\n"+str(datetime.datetime.now()) + "    " + str(user) + "    " + "发送失败" + "\n" + str(text)) 
    f.close() 
  • 赋予钉钉机器人python脚本权限并测试

#赋予权限
chmod 777 -R ./zbx_env/usr/lib/zabbix/alertscripts
​
#测试脚本
docker exec zabbix-server /usr/lib/zabbix/alertscripts/dingding.py dingding test "告警通知 钉钉机器人测试"
​
#查看日志
docker exec zabbix-server cat /usr/lib/zabbix/alertscripts/dingding.log
  • Zabbix添加报警媒介

#脚本参数
{ALERT.SENDTO}   #对应脚本中的user=sys.argv[1](发给钉钉群中哪个用户)
{ALERT.SUBJECT}  #发送的信息的标题(在报表的动作日志中可以看到)
{ALERT.MESSAGE}  #对应脚本中的text=sys.argv[3](发送的报警内容)

image-20220707011559605

image-20220707012126068

image-20220707012154732

image-20220707012552186

Zabbix容器配置邮箱

  • Zabbix添加报警媒介

image-20220708000729452

image-20220708001627977

Agent2监控MySQL服务

#password由您自行决定
mysql> CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
mysql> GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
  • 修改MySQL by Zabbix agent 2监控模板

image-20220707122037065

image-20220707123331500

  • 添加MySQL监控主机

image-20220707123850960

  • 创建告警动作

image-20220707130426916

image-20220707130544971

image-20220708002429714

  • 配置告警操作

#钉钉机器人和邮箱的告警操作消息内容通用

#主题
故障名称:{EVENT.NAME}

#消息内容
【----告警通知----】
告警主机:{HOSTNAME1}
主机IP:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

image-20220708002710893

image-20220708002900152

image-20220708003202283

  • 配置用户告警媒介

image-20220707131408069

image-20220707131432711

image-20220707131550681

image-20220708003036827

image-20220708003102951

  • 被监控主机关闭MySQL服务测试报警

image-20220708000251663

image-20220708000440099

image-20220708000915771

image-20220708000407959




是否对你有帮助?

评论