基于docker部署zabbix及客户端批量部署
最近一套系统部署完毕,使用阿里云,服务器大概在30台左右,但是有件事情还没有做,那就是监控这块,我打算还是继续用zabbix
去做,心血来潮想琢磨一下怎么用docker
去做这件事情,有段时间没搞docker
了,说搞就搞,我的环境说一下,阿里云,centos7.5
,最新版本,我提供了两种方式,一种是手动写Dockerfile
,构建完了再去启动,一种是使用docker-compose
,建议使用docker-compose
方式,容器内置微信报警脚本,创建完企业号及应用传入指定参数即可,看标题,从安装docker开始吧。
docker安装阶段
添加 docker 源
[root@zabbix ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
修改下载源为中科大源
[root@zabbix ~]# sed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
安装docker
[root@zabbix ~]# yum -y install docker-ce
看到下面输出结果则安装成功
Installed:
docker-ce.x86_64 0:18.06.1.ce-3.el7
Dependency Installed:
audit-libs-python.x86_64 0:2.8.1-3.el7_5.1 checkpolicy.x86_64 0:2.5-6.el7 container-selinux.noarch 2:2.68-1.el7 libcgroup.x86_64 0:0.41-15.el7 libsemanage-python.x86_64 0:2.5-11.el7
libtool-ltdl.x86_64 0:2.4.2-22.el7_3 policycoreutils-python.x86_64 0:2.5-22.el7 python-IPy.noarch 0:0.75-6.el7 setools-libs.x86_64 0:3.3.8-2.el7
Dependency Updated:
audit.x86_64 0:2.8.1-3.el7_5.1 audit-libs.x86_64 0:2.8.1-3.el7_5.1 libselinux.x86_64 0:2.5-12.el7 libselinux-python.x86_64 0:2.5-12.el7 libselinux-utils.x86_64 0:2.5-12.el7
libsemanage.x86_64 0:2.5-11.el7 libsepol.x86_64 0:2.5-8.1.el7 policycoreutils.x86_64 0:2.5-22.el7 selinux-policy.noarch 0:3.13.1-192.el7_5.6 selinux-policy-targeted.noarch 0:3.13.1-192.el7_5.6
Complete!
更换源
顺便把docker源也换一下吧,免得一会还的重启
[root@zabbix~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
启动docker,查看版本号
[root@zabbix ~]# systemctl start docker.service
[root@zabbix ~]# docker version
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:03 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:25:29 2018
OS/Arch: linux/amd64
Experimental: false
到这里就安装结束了。
zabbix-server部署阶段
要用docker
跑zabbix-server
,需要以下几个组件
组件名称 | 作用 |
---|---|
数据库 | MySQL 或是PostgreSQL |
Zabbix Java gateway | Java管理扩展,可以不添加 |
Zabbix server | zabbix 服务端 |
zabbix-web | 与MySQL服务器实例和Zabbix server实例关联 |
zabbix-agent | zabbix客户端 |
MySQL数据库
数据库我选择MySQL
,还是得写Dockerfile
,改一下时区,时间不对很蛋疼,字符集也改一下吧
[root@zabbix ~]# mkdir /data/docker/mysql -p
[root@zabbix /data/docker/mysql]# vim Dockerfile
FROM mysql:5.7
ENV LANG en_US.utf8
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo Asia/Shanghai > /etc/timezone \
然后构建一下试试
[root@zabbix /data/docker/mysql]# docker build -t debian-mysql5.7 .
[root@zabbix /data/docker/mysql]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian-mysql5.7 latest 3d3c7dc9608c 14 seconds ago 372MB
mysql 5.7 563a026a1511 3 weeks ago 372MB
镜像有了,可以启动了。
启动容器
[root@zabbix ~]# docker run --hostname mysql --name debian-mysql-5.7 -t \
> -e MYSQL_USER="zabbix" \
> -e MYSQL_DATABASE="zabbix" \
> -e MYSQL_PASSWORD="passwd" \
> -e MYSQL_ROOT_PASSWORD="passwd" \
> -v /data/mysql:/var/lib/mysql:rw \
> -d debian-mysql5.7
9a98a2ba0896a8a146d515764d2d8eef4bc32a9f0dbea445c360fab5668a5cfe
[root@zabbix ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a98a2ba0896 debian-mysql5.7 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 3306/tcp, 33060/tcp debian-mysql-5.7
变量说明
变量 | |
---|---|
MYSQL_USER | 启动时要添加的用户 |
MYSQL_DATABASE | 启动时要创建的数据库 |
MYSQL_PASSWORD | 指定添加用的的密码 |
MYSQL_ROOT_PASSWORD | root用户的密码 |
到此MySQL
完成
Zabbix Java gateway
这个看个人,如果不监控java
应用服务器可以不安装这个,还是得写Dockerfile
,改一下时区和编码。
[root@zabbix /data/docker/java-gateway]# cat Dockerfile
FROM zabbix/zabbix-java-gateway:latest
ENV LANG en_US.utf8
RUN apk add -U tzdata
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo Asia/Shanghai > /etc/timezone \
[root@zabbix /data/docker/java-gateway]# docker build -t zabbix-java-gateway .
[root@zabbix /data/docker/java-gateway]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zabbix-java-gateway latest 7948dffa9af0 35 seconds ago 80.1MB
启动容器
需要映射一下10052
端口
[root@zabbix ~]# docker run --hostname zabbix-java-gateway \
> --name zabbix-java-gateway -t \
> -p 10052:10052 \
> -d zabbix-java-gateway
5e2434e7a4c6f3f947e6408ff5a90097e802c6a36282c36ce7e4cd5819474f7a
[root@zabbix ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e2434e7a4c6 zabbix-java-gateway "docker-entrypoint.sh" 9 seconds ago Up 7 seconds 0.0.0.0:10052->10052/tcp zabbix-java-gateway
9a98a2ba0896 debian-mysql5.7 "docker-entrypoint.s…" 33 minutes ago Up 33 minutes 3306/tcp, 33060/tcp debian-mysql-5.7
这个也算完事了
Zabbix server
编写Dockerfile
[root@zabbix /data/docker/zabbix-server]# cat Dockerfile
FROM zabbix/zabbix-server-mysql:latest
ENV LANG en_US.utf8
RUN apk add -U tzdata
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo Asia/Shanghai > /etc/timezone \
[root@zabbix /data/docker/zabbix-server]# docker build -t zabbix-server .
[root@zabbix /data/docker/zabbix-server]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zabbix-server latest 531aa3116f61 About a minute ago 62.3MB
启动容器
需要做的事情,映射10051
端口,指定数据库服务器,连接MySQL
和zabbix-java-gateway
容器,开撸。
[root@zabbix ~]# docker run --name zabbix-server -t \
> -p 10051:10051 \
> --hostname zabbix-server \
> -e DB_SERVER_HOST="debian-mysql-5.7" \
> -e MYSQL_DATABASE="zabbix" \
> -e MYSQL_USER="zabbix" \
> -e MYSQL_PASSWORD="passwd" \
> -e MYSQL_ROOT_PASSWORD="passwd" \
> -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
> --link debian-mysql-5.7:mysql \
> --link zabbix-java-gateway:zabbix-java-gateway \
> -d zabbix-server
a45ef352cc68ea8f6a1d53b768dbdd0405e8adbe4ffd9ec155b2eb3ae269f5cb
[root@zabbix ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a45ef352cc68 zabbix-server "docker-entrypoint.sh" 9 minutes ago Up 8 minutes 0.0.0.0:10051->10051/tcp zabbix-server
变量说明
变量 | |
---|---|
DB_SERVER_HOST | 指定MySQL或PostgreSQL服务器的IP或DNS名称 |
MYSQL_DATABASE | zabbix数据库名称 |
MYSQL_USER | 数据库用户,默认是zabbix |
MYSQL_PASSWORD | zabbix数据库密码,默认zabbix |
ZBX_JAVAGATEWAY | 是否启用Zabbix Java gateway,默认false |
最后一步,启动zabbix-web
zabbix-web
编写Dockerfile
[root@zabbix /data/docker/zabbix-web]# cat Dockerfile
FROM zabbix/zabbix-web-nginx-mysql:latest
ENV LANG en_US.utf8
RUN apk add -U tzdata
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo Asia/Shanghai > /etc/timezone \
[root@zabbix /data/docker/zabbix-web]# docker build -t zabbix-web .
[root@zabbix /data/docker/zabbix-web]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zabbix-web latest 6ff51e2f0545 About a minute ago 164MB
启动容器
需要做的事情,映射80端口到宿主机,连接数据库,连接zabbix-server
容器,开撸开撸。
[root@zabbix ~]# docker run --name zabbix-web -t \
> -p 80:80 \
> --hostname zabbix-web \
> -e PHP_TZ="Asia/Shanghai" \
> -e DB_SERVER_HOST="debian-mysql-5.7" \
> -e MYSQL_DATABASE="zabbix" \
> -e MYSQL_USER="zabbix" \
> -e MYSQL_PASSWORD="passwd" \
> -e MYSQL_ROOT_PASSWORD="passwd" \
> --link debian-mysql-5.7:mysql \
> --link zabbix-server:zabbix-server \
> -d zabbix-web
f0c33f227992ce220730da9454df2f354565ed0b3d0813513a87797c2b752702
[root@zabbix ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f0c33f227992 zabbix-web "docker-entrypoint.sh" 13 seconds ago Up 10 seconds 0.0.0.0:80->80/tcp, 443/tcp zabbix-web
以上方式安装的是3.4
版本,也就是最新版本,因为在指定镜像的时候没有指定版本号,默认的就是laster
,也就是最新版本,建议zabbix-agent
版本要和服务端一致。
安装zabbix-agent测试
最后看一眼正在运行的容器。
一共四个就对了,然后就可以打开你的服务器IP看效果了,重点是这里撒,看上去是没啥子问题,手动加个主机试试,看看能不能监控到。
zabbix客户配置
现在需要加一个客户端撒,先装一个试试能不能监控到,网页操作全部略过,从安装客户端开始。
安装zabbix-agent
emmmm,这个还是用官方的yum
源吧,安装3.4
版本很简单,两条命令解决
[root@nginx ~]# rpm -i https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
warning: /var/tmp/rpm-tmp.AbbbMW: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
[root@nginx ~]# yum -y install zabbix-agent
装完之后改一下配置文件,指定一下zabbix-server
的地址,UserParameter
顺便也开启一下吧,以后肯定要添加自定义监控的,就这样
[root@nginx ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.31.223.165
UnsafeUserParameters=1
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@nginx ~]# systemctl start zabbix-agent
网页看效果可以检测到主机
然后看一眼图形,也有数据了。
如果要对宿主机进行监控,请编辑宿主机的zabbix_agentd.conf
,将Server
地址,默认127.0.0.1
,修改为docker-server
容器地址,否则不通。
最后,那就是zabbix-agent
安装的问题,还有20多个服务器没安装zabbix-agent
,一个一个去装不太现实,zabbix
暂时退场,ansible
上线。
zabbix-agent批量安装
ansible
这一块安装配置就不写了,直接撸playbook
,其实也很简单,需要做的事情,1.添加zabbix
官方源,2.安装zabbix-agent
客户端,3.传输已经写好的zabbix_agentd.conf
,4.启动服务,大概就是这样,开撸。
[root@ansible ~]# vim zabbix_agent.yml
# zabbix-agent install
- hosts: all
tasks:
- name: add zabbix-agent repo
yum: name=https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
state=installed
- name: install zabbix-agent
yum: name=zabbix-agent
state=installed
- name: copy zabbix_agent.conf to /etc/zabbix/
copy: src=/root/zabbix_agentd.conf
dest=/etc/zabbix/
backup=yes
- name: start zabbix-agent
systemd: state=started
name=zabbix-agent
enabled=yes
[root@ansible ~]# ansible-playbook zabbix_agent.yml
changed=1&2
的是我下午搞得那两个,全部安装成功,下一步就是在zabbix
创建自动发现了。
至于有人问我说zabbix-agent
能不能也跑在容器里,这个当然可以,但是有很多问题,首先容器逻辑上是和宿主机资源隔离的,agent
就是来监视系统资源的,所以启动agent
需要使用特权模式或挂载宿主机硬盘到容器,这样容器才能访问到宿主机上的资源,并不是全部的资源。
再就是自定义监控这一块,可能会涉及到监控脚本去监控宿主机的某些东西,譬如监控某个进程,就算你启用了特权模式挂载了硬盘到容器,在容器里是绝对看不到宿主机上的进程的,再就是自定义脚本是需要放到agent
容器里的,每次新加都要built tag push update
,自行琢磨吧。
所以容器跑agent
不考虑,agent
还是安装到宿主机上,如果你想试试效果建议使用swarm
进行部署,使用global
模式,使用主机网络创建agent
服务,指定好ENV
启动,加到监控里自行看看效果吧。agent
镜像使用方法看这里吧。
最终结果
自动发现可以看一下这里,最终结果。
这只是部署了一套最基础的监控系统,熟悉操作的话几分钟就能完成,现在还没有添加任何的自定义监控,添加自定义监控这块的话还是很麻烦,暂时没什么好办法,毕竟各个服务的集群要监控的东西都不一样,想想都烦,暂时就这样吧,下面简单写一下docker-compose
。
使用docker-compose
emmmm,最近有项目迁移,从某云迁到了阿里云,当然监控系统肯定少不了,还是用zabbix
,我顺便把已经构建好的镜像传到了华为云,所以有需要的人可以直接用docker-compose
去做,该镜像版本为4.0.1
,很简单,几条命令。
安装docker-compose
[root@zabbix ~]# curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@zabbix ~]# chmod +x /usr/local/bin/docker-compose
[root@zabbix ~]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01
编写zabbix.yml
这个是我已经写好的,拿过去直接用吧,image
不要动,其他的看自己情况自行调整吧。
2019/03/31日更新zabbix-web
镜像,替换了默认字体,所以不会出现启用中文出现乱码的问题了。
使用bridge网络
[root@zabbix ~]# mkdir /docker-compose
[root@zabbix ~]# cd /docker-compose/
[root@zabbix /docker-compose]# vim zabbix.yml
version: '3'
services:
mysql:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-mysql:5.7
environment:
MYSQL_USER: zabbix
MYSQL_DATABASE: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: Sowhat?
volumes:
- /data/mysql/zabbix:/var/lib/mysql
ports:
- 3306:3306
restart: always
networks:
- zabbix
zabbix-java-gateway:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-java-gateway:4.0.1
ports:
- 10052:10052
restart: always
networks:
- zabbix
zabbix-server:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-server:4.0.1
environment:
ZBX_JAVAGATEWAY: zabbix-java-gateway
ZBX_JAVAGATEWAY_ENABLE: "true"
DB_SERVER_HOST: mysql
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: Sowhat?
links:
- mysql
ports:
- 10051:10051
depends_on:
- mysql
restart: always
networks:
- zabbix
zabbix-web:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-web:4.0.1
environment:
PHP_TZ: Asia/Shanghai
DB_SERVER_HOST: mysql
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: Sowhat?
links:
- mysql
ports:
- 80:80
depends_on:
- zabbix-server
- mysql
restart: always
networks:
- zabbix
networks:
zabbix:
driver: bridge
上面这种方式用的网络模式是bridge
,比较灵活,很多时候会在一个新服务器上安装zabbix
,所以直接用host
网络模式就好
使用host网络模式
2019/03/31更新,添加host
网络模式
[root@rj-bai /docker-compose]# cat zabbix.yml
version: '3'
services:
mysql:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-mysql:5.7
environment:
MYSQL_USER: zabbix
MYSQL_DATABASE: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: Sowhat?
volumes:
- /data/mysql/zabbix:/var/lib/mysql
restart: always
network_mode: host
zabbix-java-gateway:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-java-gateway:4.0.1
restart: always
network_mode: host
zabbix-server:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-server:4.0.1
environment:
DB_SERVER_HOST: 127.0.0.1
ZBX_JAVAGATEWAY: 127.0.0.1
ZBX_JAVAGATEWAY_ENABLE: "true"
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: Sowhat?
restart: always
network_mode: host
zabbix-web:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-web:4.0.1
extra_hosts:
- "zabbix-server:127.0.0.1"
environment:
PHP_TZ: Asia/Shanghai
DB_SERVER_HOST: 127.0.0.1
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: Sowhat?
restart: always
network_mode: host
根据自己的实际情况选择使用哪种模式吧。
启动容器组
[root@zabbix /docker-compose]# docker-compose -f zabbix.yml up -d --build
[root@zabbix /docker-compose]# docker-compose -f zabbix.yml ps
这样就好了撒,没必要向上面那样麻烦,现在阔以点主页了,版本4.0.1
添加主机
将宿主机添加到监控中,安装配置zabbix-agent
,使用版本和server
端一致。
[root@zabbix ~]# rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@zabbix ~]# yum -y install zabbix-agent-4.0.1
[root@zabbix ~]# docker inspect docker-compose_zabbix-server_1_31014f0269ac | grep -i ipaddress
"IPAddress": "172.18.0.4",
[root@zabbix ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.18.0.4 ## 使用host网络的忽略这个撒,默认127.0.0.1就可以
UnsafeUserParameters=1
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@zabbix ~]# systemctl start zabbix-agent.service
网页端操作
直接编辑名为zabbix server
的主机,Agent interfaces
改为宿主机内网IP,然后update
,我顺便又手动加了个主机进来,启用了JMX
,监控别的主机server
地址直接写zabbix server
宿主机即可,
绿了之后就阔以去看图形了。
微信告警
2019年4/24更新,启用了微信告警功能,原因其一是每套业务都有一个zabbix
监控,没有统一集中监控,而且我对外发邮件的账户也只有两个,有时候一个告警邮件发过来了看得我很懵,我不知道这是哪个zabbix
发出来的,监控主机名称各个业务系统几乎都是一样的,这个就比较尴尬了,再就是最近已经发邮件已经开始退信了,大概这样。
于是琢磨了一下微信告警,不是很麻烦,首先要申请企业微信,创建应用,获取四个东西,加一个脚本就够了,至于是具体怎么实现的看这里吧,写的特别详细,因为我这里用的是容器,所以我这头的话就是将脚本传入到了容器里,装了点依赖,加了几个变量进去,操作的是zabbix-server
,我用的脚本也是在上面的那个地址复制过来的,改了改,方便传参,所以我脚本内容如下。
[root@rj-bai /data/docker/zabbix-server]# cat wechat.sh
#!/bin/bash
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$WECHAT_CROPID&corpsecret=$WECHAT_SECRET"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
function body() {
local UserID=$1
local Msg=$(echo "$@" | cut -d" " -f3-)
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$WECHAT_PARTYID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'" $WECHAT_APPID "\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
这个脚本用到了curl
的命令,而且我看了一下跑zabbix-server
容器的系统是Alpine
,所以基于我之前的镜像之上重新构建了一下,Dockerfile
如下。
[root@rj-bai /data/docker/zabbix-server]# cat Dockerfile
FROM swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-server:4.0.1
COPY --chown=zabbix:zabbix wechat.sh /usr/lib/zabbix/alertscripts/wechat.sh
RUN apk update && apk add curl && chmod +x /usr/lib/zabbix/alertscripts/wechat.sh && chown zabbix:zabbix /usr/lib/zabbix/alertscripts/wechat.sh && rm -rf /var/cache/apk/*
然后在compose
文件中加了四个ENV
进去,如下。
WECHAT_PARTYID: 1
WECHAT_APPID: 1000003
WECHAT_CROPID: wwcec34e526aaff59f
WECHAT_SECRET: -X_viSLtuQpBa3ocAlEwCj9AhB8_uqmDUJbwkBGr0xg
```
`WECHAT_PARTYID`为接收消息的部门`ID`,也就是企业微信后台这里的数据,点开通讯录

`WECHAT_APPID&WECHAT_SECRET`为应用`ID`和应用的`Secret`,点开应用与小程序,自建的点进去就能看到。

`WECHAT_CROPID`为企业`ID`,点开我的企业最下面就可以看到。

获取到这四个值就可以了,然后`compose`文件在`zabbix-server`下面把上面的`env`加进去重新拉取镜像启动就行了,镜像已更新。
```yaml
zabbix-server:
image: swr.cn-north-1.myhuaweicloud.com/rj-bai/zabbix-server:4.0.1
environment:
DB_SERVER_HOST: 127.0.0.1
ZBX_JAVAGATEWAY: 127.0.0.1
ZBX_JAVAGATEWAY_ENABLE: "true"
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: Sowhat?
WECHAT_PARTYID: 1
WECHAT_APPID: 1000002
WECHAT_CROPID: wwcec0nlkjkasaaff59f
WECHAT_SECRET: -X_viSLtuQpBa3ocAKjckalAhB8_uqmDUJbwkBGr0xg
restart: always
network_mode: host
```
建议启动完之后手动执行脚本测试一下,一定要用`bash`去执行撒,否则有问题,返回结果如下,需要传一个参数,也就是你要发送的消息,返回如下信息表示成功,而且你也能在企业微信收到消息了。
```shell
[root@rj-bai ~]# docker exec -it docker-compose_zabbix-server_1 /bin/bash -c "bash /usr/lib/zabbix/alertscripts/wechat.sh "rj-bai""
{"errcode":0,"errmsg":"ok","invaliduser":""}
```
然后就是`web`端操作了,注意我的脚本名为`wechat.sh`,


这样就行了,然后我随便关一个`agent`看一下效果。

没问题,这是一套系统,对应一个应用,其他的也是,一对一,这样就区分出来是哪套系统发出来的消息了。大概就是这样。
## 邮件报警
阿里把25端口封掉了,申请解封也无法解除,所以得用`465`端口去发邮件了,点开`Administration`→`Media types`→`Email`编辑,以使用阿里云邮箱为例,其实我刚开始用的是`163`,但是经常抛如下错误,导致邮件发不出去
```bash
[root@zabbix ~]# docker logs -f docker-compose_zabbix-server_1_348c7cfc953c
139:20181220:171247.393 failed to send email: Failure when receiving data from the peer
```
调了很长时间就是不行,换成阿里云的就没这个问题,所以抛弃`163`,用阿里的,配置如下

填好后单击`Update`,编辑`Admin`资料,`Media`添加要收信人地址,`Update`

接下来去`Configuration`→`actions`,选择`Triggers`,编辑`Report problems to Zabbix administrators`,添加触发条件,可以有多个,我添加的是时间段,也就是酱紫。

现在阔以做测试了,宿主机停掉`zabbix-agent`,另一个主机添加一个用户,然后等邮件就行了。

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。