docker版本:Docker version 27.0.3, build 7d4bcd8,docker安装这里就不介绍了
系统版本:Kylin Linux Advanced Server release V10 (Lance)
docker安装zabbix,不受系统依赖限制
zabbix7.0 支持mysql8.0.30及以上版本
一:为了部署 Zabbix 7.0 和 MySQL 8.0.30 版本,以下是详细的步骤和 Docker 命令:
agent 部分碰到端口不通,暂未解决,暂时不使用agent,有机会在做修改
-
拉取镜像:
docker pull mysql:8.0.30 docker pull zabbix/zabbix-java-gateway:alpine-7.0-latest docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest docker pull zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest #docker pull zabbix/zabbix-agent:alpine-7.0-latest -
创建 Docker 卷:
docker volume create -d local mysql_data docker volume create -d local mysql_logs docker volume create -d local mysql_conf docker volume create -d local zabbix_server #docker volume create -d local zabbix_agent注释:Docker 将在本地主机上创建这些卷 作为本地存储
-
创建 Docker 网络:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net -
启动 MySQL 8.0 容器
docker run --name mysql-server -t \
-v mysql_data:/var/lib/mysql \
-v mysql_logs:/var/log/mysql \
-v mysql_conf:/etc/mysql \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="password" \
-e MYSQL_ROOT_PASSWORD="password" \
--network=zabbix-net \
--restart=unless-stopped \
-d -p 3306:3306 \
mysql:8.0.30 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=caching_sha2_password
注释:-p 3306:3306: 将主机的 3306 端口映射到容器的 3306 端口
格式:-p 主机端口:容器端口
- 启动 Zabbix Java 网关容器
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart=unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-7.0-latest
- 启动 Zabbix Server 容器
docker run --name zabbix-server-mysql -t \
-v zabbix_server:/etc/zabbix \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="password" \
-e MYSQL_ROOT_PASSWORD="password" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
-p 10051:10051 \
--network=zabbix-net \
--restart=unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-7.0-latest
- 启动 Zabbix Web 容器(Nginx + PHP + MySQL)
docker run --name zabbix-web-nginx-mysql -t \
-e PHP_TZ="Asia/Shanghai" \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="password" \
-e MYSQL_ROOT_PASSWORD="password" \
-p 7777:8080 \
--network=zabbix-net \
--restart=unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
注释:启动一个包含 Zabbix Web 的容器,与前面的 Zabbix 服务器和 MySQL 数据库容器配合,使得可以通过浏览器访问主机的 7777 端口来访问 Zabbix 的 Web 页面,并与 Zabbix 服务器交互
docker ps 查看容器启动状态:

访问zabbix:ip:7777 Admin/zabbix:

- 启动 Zabbix Agent 容器
#docker run --name zabbix-agent -t \
-v zabbix_agent:/etc/zabbix \
-e ZBX_HOSTNAME="master" \
-e ZBX_SERVER_HOST="172.20.240.3" \
-e ZBX_SERVER_PORT=10051 \
-p 10050:10050 \
--network host \
--restart=unless-stopped \
--privileged \
-d zabbix/zabbix-agent:alpine-7.0-latest
二:告警通知配置web-hook
企业微信中的群3人及以上,随便添加个机器人,获取Webhook地址
登录zabbix容器:
docker exec -u root -it zabbix-server-mysql bash
赋权目录
chmod 777 /usr/lib/zabbix/alertscripts
编写微信通知脚本:
vi /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import json
import sys
# Webhook URL
api_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c63e8ebb-23e7-4143-a432-0038077d4b9d" #替换为自己企业微信群机器人的webhook地址
# HTTP headers
headers = {'Content-Type': 'application/json;charset=utf-8'}
# 定义发送消息的函数
def send_message(text):
# 构建消息体
json_text = {
"msgtype": "text",
"text": {
"content": text
}
}
# 发送 POST 请求
response = requests.post(api_url, json=json_text, headers=headers)
# 检查响应状态码
if response.status_code == 200:
print("Message sent successfully.")
else:
print(f"Failed to send message. Status code: {response.status_code}")
# 主函数
if __name__ == '__main__':
# 检查命令行参数是否正确
if len(sys.argv) < 2:
print("Usage: python3 wechat.py <message>")
sys.exit(1)
# 获取命令行参数中的消息内容
text = sys.argv[1]
# 调用发送消息函数
send_message(text)
测试脚本:
1:需要再容器中安装python环境,我的是麒麟系统
apk update
apk add python3 py3-pip
apk add py3-requests
2:执行脚本
python3 wechat.py cesi
企业微信会接收到信息

三:登录z自己的zabbix:http://192.168.9.181:7777 Admin/zabbix 配置消息通知
1:告警-媒介-消息模版

2:消息模版,可根据需求进行调整
消息类型:问题
主题:告警通知
消息:
事件名称:{EVENT.NAME}
告警地址:{HOST.NAME}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警严重性:{EVENT.SEVERITY}
当前状态:{EVENT.STATUS}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}

3:消息模版
消息类型:问题恢复
主题:恢复通知
消息:
事件名称:{EVENT.NAME}
告警地址:{HOST.NAME}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警严重性:{EVENT.SEVERITY}
当前状态:{EVENT.RECOVERY.STATUS}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.RECOVERY.ID}

4:告警-动作-触发器动作-创建动作


消息模版和上面使用的模版一样

5:用户创建

这里的收件人可以写企业微信群中的任何一个人的名称


测试:关掉一台被监控服务器的agent服务,看一下消息发送状态

仅供参考
1550

被折叠的 条评论
为什么被折叠?



