day62-可观测性建设-全链路监控zabbix+grafana
🌟监控api接口
🔍监控zabbix-api接口
生成API tokens
命令行测试
curl -s -X POST -H \"Content-Type: application/json-rpc\" -d \'{ \"jsonrpc\": \"2.0\", \"method\": \"host.get\", \"params\": { \"output\": [ \"hostid\", \"host\" ], \"selectInterfaces\": [ \"interfaceid\", \"ip\" ] }, \"id\": 2, \"auth\": \"api tokens\"}\' http://10.0.0.63/api_jsonrpc.php
web页面添加web场景监测
🌟告警分类
🌟邮件报警
📝全流程
- 准备个人邮箱/企业邮箱
- 开启个人邮箱 smtp功能 获取授权码
- 发件人:配置zabbix报警媒介类型
- 收件人:配置 用户 接受报警
- 发件条件:配置触发器(trigger)动作(条件判断)
✉️准备个人邮箱(略)
📌添加报警媒介
🧩修改消息模板
两个 报警媒介的模板:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!告警主机:{HOSTNAME1}告警地址:{HOST.IP}告警时间:{EVENT.DATE} {EVENT.TIME}告警等级:{TRIGGER.SEVERITY}告警信息: {TRIGGER.NAME}告警项目:{TRIGGER.KEY1}问题详情:{ITEM.NAME}:{ITEM.VALUE}当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}事件ID:{EVENT.ID}恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!告警主机:{HOSTNAME1}告警地址:{HOST.IP}告警时间:{EVENT.DATE} {EVENT.TIME}告警等级:{TRIGGER.SEVERITY}告警信息: {TRIGGER.NAME}告警项目:{TRIGGER.KEY1}问题详情:{ITEM.NAME}:{ITEM.VALUE}当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}事件ID:{EVENT.ID}
✉️添加收件人
🍀添加触发器动作
✉️邮件里查看告警信息
🌟企业微信告警
🧩企业微信告警脚本
#!/usr/bin/python3# -*- coding: utf-8 -*-#desc: 调用企业微信群中机器人进行发送消息#desc: 调用钉钉机器人进行发送消息#desc: 调用各种OA系统的群机器人(webhook)方式 通用的#导入python 函数库(包)#request http请求(curl/wget命令)import requestsimport json#sys 系统功能函数库 import sys# 机器人的webhook地址 群里添加群机器人后可以获取 #支持企业微信,钉钉,飞书.WEBHOOK_URL = \"WEBHOOK地址\"# HTTP请求头部信息HEADERS = { \'Content-Type\': \'application/json;charset=utf-8\'}# 定义发送消息的函数def send_msg(text): #text变量就是要传输的数据. # 构建消息体 texts = { \"msgtype\": \"text\", \"text\": { \"content\": text } } # 发送HTTP POST请求 response = requests.post(WEBHOOK_URL, json=texts, headers=HEADERS) # 打印响应内容(一般用于调试) print(response.content)# 如果该文件被直接执行,则从命令行接收一个参数并将其发送到机器人的webhook地址if __name__ == \'__main__\': # $# -ne 2 if len(sys.argv) != 2: print(\"Usage: python3 all_app_webhook.py \") sys.exit(1) text = sys.argv[1] # 获取命令行参数 $1 send_msg(text) # 发送消息
🛠️准备阿里云的源文件
- sources.list
deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse# deb http://mirrors.aliyun.com/ubuntu/ noble-proposed main restricted universe multiverse# deb-src http://mirrors.aliyun.com/ubuntu/ noble-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
📝编写Dockerfile
FROM zabbix/zabbix-server-mysql:7.0.9-ubuntuLABEL author=zhu desc=带有python3环境的zbx_server镜像,带有webhook脚本USER rootADD all-api-alert.py /usr/lib/zabbix/alertscripts/ADD sources.list /etc/apt/sources.listRUN apt update \\ && apt install -y python3 python3-requests # 安装python request模块(依赖) # pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simpleEXPOSE 10051/TCPWORKDIR /var/lib/zabbix/ENTRYPOINT [\"/usr/bin/docker-entrypoint.sh\"]USER 1997CMD [\"/usr/sbin/zabbix_server\", \"--foreground\", \"-c\", \"/etc/zabbix/zabbix_server.conf\"]
📝编写docker-compose
#version: \"3.8\"services: db: image: mysql:8.0-debian container_name: zbx_db networks: - zbx_net restart: always volumes: - ./zbx_db/:/var/lib/mysql/ environment: MYSQL_ROOT_PASSWORD: \"${ROOT_PASS}\" MYSQL_DATABASE: \"${ZBX_DB}\" MYSQL_USER: \"${ZBX_USER}\" MYSQL_PASSWORD: \"${ZBX_PASS}\" command: - --character-set-server=utf8 - --collation-server=utf8_bin - --default-authentication-plugin=mysql_native_password zbx_server: image: zabbix/zabbix-server-mysql:7.0.9-ubuntu-python build: context: . dockerfile: Dockerfile container_name: zabbix-server-mysql-7.0 networks: - zbx_net restart: always ports: - 10051:10051 depends_on: - db environment: DB_SERVER_HOST: \"db\" MYSQL_ROOT_PASSWORD: \"${ROOT_PASS}\" MYSQL_DATABASE: \"${ZBX_DB}\" MYSQL_USER: \"${ZBX_USER}\" MYSQL_PASSWORD: \"${ZBX_PASS}\" ZBX_JAVAGATEWAY_ENABLE: true ZBX_JAVAGATEWAY: zbx_java_gateway ZBX_JAVAGATEWAYPORT: 10052 zbx_web: image: zabbix/zabbix-web-nginx-mysql:7.0.9-ubuntu container_name: zabbix-web-nginx-mysql networks: - zbx_net restart: always ports: - 80:8080 depends_on: - db - zbx_server environment: ZBX_SERVER_HOST: \"zbx_server\" DB_SERVER_HOST: \"db\" MYSQL_ROOT_PASSWORD: \"${ROOT_PASS}\" MYSQL_DATABASE: \"${ZBX_DB}\" MYSQL_USER: \"${ZBX_USER}\" MYSQL_PASSWORD: \"${ZBX_PASS}\" zbx_java_gateway: image: zabbix/zabbix-java-gateway:7.0.9-ubuntu container_name: zabbix-java-gateway-7.0 networks: - zbx_net restart: always ports: - 10052:10052 depends_on: - zbx_servernetworks: zbx_net: driver: bridge ipam: config: - subnet: 172.100.0.0/16 ip_range: 172.100.1.0/24 gateway: 172.100.1.1
☀️docker-compose生成镜像
docker-compose build
🚀启动镜像
docker-compose up -d
🐹修改机器人webhook地址
[root@m03-zbx-server /app/tools/zbx-weixin-7.0]# docker-compose exec -it -uroot zbx_server /bin/bashroot@8064aca0fdeb:/var/lib/zabbix# apt install -y vimroot@8064aca0fdeb:/var/lib/zabbix# vim alertscripts/all-api-alert.py
💡命令行测试
python3 weixin-api-alert.py 测试
🌏web页面添加报警媒介
💡修改消息模板
🛠️测试
✉️添加收件人
🍀添加触发器动作
🌏企业微信群查看告警
🌟钉钉或其他OA系统
- 钉钉,飞书,飞鸽…
- 使用流程与企业微信WEBHOOK版本一致
📝使用流程
- 群组里添加机器人,设置访问IP(服务器,公司内网IP)
- 使用脚本修改WEBHOOK地址
- 使用流程与企业微信群机器人流程一致
🌟部署grafana
🚀安装grafana软件并启动
rpm -ivh grafana-enterprise-10.4.17-1.x86_64.rpmsystemctl enable grafana-server.service --now
🌏浏览器登录
http://10.0.0.63:3000/loginadmin/admin
🌏修改语言为中文
🧩安装插件
grafana-cli plugins list-remote | grep zabbixgrafana-cli plugins install alexanderzobnin-zabbix-appsystemctl restart grafana-server.service
🚀web页面启动插件
添加zabbix数据源
导入仪表盘
查看仪表盘
注意:仪表盘有些数据获取不到,需要调试