docker部署zabbix7.0,mysql8.0.30,企业微信告警通知

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,有机会在做修改

  1. 拉取镜像

    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
    
  2. 创建 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 将在本地主机上创建这些卷 作为本地存储

  3. 创建 Docker 网络

    docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
    
  4. 启动 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 主机端口:容器端口

  1. 启动 Zabbix Java 网关容器
docker run --name zabbix-java-gateway -t \
  --network=zabbix-net \
  --restart=unless-stopped \
  -d zabbix/zabbix-java-gateway:alpine-7.0-latest
  1. 启动 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
  1. 启动 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:
在这里插入图片描述

  1. 启动 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服务,看一下消息发送状态

在这里插入图片描述

仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值