MENU

基于docker部署zabbix及客户端批量部署

2018 年 09 月 26 日 • 应用服务器

最近一套系统部署完毕,使用阿里云,服务器大概在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部署阶段

要用dockerzabbix-server,需要以下几个组件

组件名称作用
数据库MySQL或是PostgreSQL
Zabbix Java gatewayJava管理扩展,可以不添加
Zabbix serverzabbix 服务端
zabbix-web与MySQL服务器实例和Zabbix server实例关联
zabbix-agentzabbix客户端

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_PASSWORDroot用户的密码

到此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端口,指定数据库服务器,连接MySQLzabbix-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_DATABASEzabbix数据库名称
MYSQL_USER数据库用户,默认是zabbix
MYSQL_PASSWORDzabbix数据库密码,默认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加进去重新拉取镜像启动就行了,镜像已更新。

  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去执行撒,否则有问题,返回结果如下,需要传一个参数,也就是你要发送的消息,返回如下信息表示成功,而且你也能在企业微信收到消息了。

[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端口去发邮件了,点开AdministrationMedia typesEmail编辑,以使用阿里云邮箱为例,其实我刚开始用的是163,但是经常抛如下错误,导致邮件发不出去

[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

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

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

有了撒,酱紫就可以了。

最后编辑于: 2019 年 06 月 06 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码