zabbix install for docker - qingchensecai/documents GitHub Wiki

构建相应镜像

拉取镜像

docker pull mysql:5.7
docker pull zabbix/zabbix-server-mysql:latest
docker pull zabbix/zabbix-web-nginx-mysql:latest

#java监控组件(选装) docker pull zabbix/zabbix-java-gateway:latest

这里使用mysql 5.7
docker build -t zabbix-mysql .

  • 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 \

构建命令:
docker build -t zabbix-java-gateway .

  • 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 \

构建命令:
docker build -t zabbix-server-mysql .

  • 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 \

构建命令:
docker build -t zabbix-web-nginx-mysql .

  • 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 \

分别运行docker run

  • 创建zabbix专用网络,将所有zabbix容器加入到网络中 docker network create -d bridge zabbix_net
    docker network ls

  • 使用mysql数据库
    docker run --name mysql-server -t \
    --restart=always \
    --name=zabbix-java-gateway \ -e MYSQL_DATABASE="zabbix" \
    -e MYSQL_USER="zabbix" \
    -e MYSQL_PASSWORD="nP1AEsdlCNtMHw==" \
    -e MYSQL_ROOT_PASSWORD="nP1AEsdlCNtMHw==" \
    -p 3306:3306 \
    -d mysql:5.7 \
    --character-set-server=utf8 --collation-server=utf8_bin

  • 备注 其中-p 是将容器中的3306端口映射到服务器的3306端口,
    --network zabbix_net是将容器加入到zabbix_net网络中,
    -v /etc/localtime:/etc/localtime是同步服务器和容器内部的时区,
    --restart always设置自启动,
    -e MYSQL_DATABASE="zabbix",创建环境变量。
    --name zabbix-mysql,给容器命名。

  • java-gateway用来监控java应用,可选择安装
    docker run \
    --name zabbix-java-gateway -p 10052:10052 \
    --restart=always \
    --name=zabbix-java-gateway \
    --network zabbix_net \
    -d zabbix/zabbix-java-gateway:latest

  • 创建数据卷zabbix-server-vol
    docker volume create zabbix-server-vol

  • zabbix-server-mysql
    docker run --name zabbix-server-mysql -t \
    --mount source=zabbix-server-vol ,target=/etc/zabbix \
    -v /etc/localtime:/etc/localtime \
    -v /usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
    --restart=always \
    --network zabbix_net \
    -e export TZ='Asia/Shanghai' \
    -e DB_SERVER_HOST="mysql-server" \
    -e MYSQL_DATABASE="zabbix" \
    -e MYSQL_USER="zabbix" \
    -e MYSQL_PASSWORD="nP1AEsdlCNtMHw==" \
    -e MYSQL_ROOT_PASSWORD="nP1AEsdlCNtMHw==" \
    -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
    --link mysql-server:mysql \
    --link zabbix-java-gateway:zabbix-java-gateway \
    -p 10051:10051 \
    -d zabbix/zabbix-server-mysql:latest

  • zabbix-web-nginx-mysql
    docker run --name zabbix-web-nginx-mysql -t \
    -e DB_SERVER_HOST="mysql-server" \
    -e MYSQL_DATABASE="zabbix" \
    -e MYSQL_USER="zabbix" \
    -e MYSQL_PASSWORD="nP1AEsdlCNtMHw==" \
    -e MYSQL_ROOT_PASSWORD="nP1AEsdlCNtMHw==" \
    -v /data/docker/zabbix-server/fonts:/usr/share/zabbix/assets/fonts \ ###放置字符集位置
    -v /etc/localtime:/etc/localtime \
    --restart=always \
    --network zabbix_net \
    --link mysql-server:mysql \
    --link zabbix-server-mysql:zabbix-server \
    -p 1234:80 \
    -d zabbix/zabbix-web-nginx-mysql:latest

zabbix-agent 不建议安装在容器里,因为docker特性,容器资源与宿主机资源隔离,监控会出现各种问题,即使使用特权模式或者挂载宿主机磁盘到容器也会有问题,并且宿主机上的进程也无法在容器内监控到。

修补网页不能进入用户修改的问题

docker exec -it zabbix-web bash

bash-5.0# apk add php7-fileinfo
bash-5.0# exit

docker restart zabbix-web

修复中文字符乱码问题

确认zabbix-web容器中已经放入中文字符集
/usr/share/zabbix/assets/fonts
simkai.ttf
修改位置:
/usr/share/zabbix/include/defines.inc.php define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name

docker 部署 grafana 以及相关配置

docker search grafana

选择stars数最多的版本进行拉取
docker run -d --name=grafana -p 7777:3000 -v /var/lib/grafana:/var/lib/grafana grafana/grafana

进入容器安装zabbix插件
grafana-cli plugins install alexanderzobnin-zabbix-app

安装完成后登录网页默认账户Admin 密码zabbix

告警配置(企业微信)

注册企业微信号
通讯录-设置部门-添加成员(记录部门id)
应用管理-创建应用 (记录AgentId Secret)
我的企业(记录 企业ID)

监控脚本
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#date: 2018-04-20
#comment: zabbix接入微信报警脚本
import requests
import sys
import os
import json
import logging
#logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',datefmt = '%a, %d %b %Y %H:%M:%S',filename = os.path.join('/data/zabbix','weixin.log'),filemode = 'a')
corpid='xx' #企业ID
appsecret='xx' #secret
agentid=1000002 #AgentID
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[3]
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message
测试,接收到消息说明ok,wechatname为企业微信应用程序中的用户ID

动作配置: 主题:
故障: {TRIGGER.STATUS} 服务器: {HOSTNAME1} 发生: {TRIGGER.NAME}故障

消息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}