docker部署zabbix6.0及企业微信发送告警
1 前言
1.1 实验背景
因zabbix 6.0新增许多新特性,为熟悉界面特意在本地部署一套简易版(未启用HA功能)。原本想要在烧制了centos7.9系统树莓派上部署,一查之下armv7果然冷门,mariadb无论是直接安装或者docker都不支持,还是x86好使,索性将mariadb、zabbix server、zabbix froneted都部署在了本地虚拟机中,相比安装部署方便很多。
1.2 实验环境
宿主机:1核2G本地虚拟机,centos 7.6,docker 1.13.1
mariadb:10.8.5(zabbix 6.0必须使用10.0.5以上版本mariadb)
zabbix server:6.0
1.3 准备工作
防火墙放开tcp 3306(mariadb)、tcp 10051(zabbix server)、tcp 8080(nginx)
2 安装 mariadb
2.1 下载mariadb
参考https://mariadb.org/download/?t=repo-config
创建/etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.8/centos7-amd64
gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
yum install MariaDB-server MariaDB-client
systemctl start mariadb
systemctl enable mariadb
mariadb-secure-installation 设置root密码
mysql -uroot -p"mariadb-root-user-password"
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user 'zabbix'@'%' identified by 'mariadb-zabbix-user-password';
mysql> grant all privileges on zabbix.* to 'zabbix'@'%';
mysql> quit;
2.2 导入数据库
下载源代码后
cd database/mysql
mysql -uzabbix -p"mariadb-zabbix-user-password" zabbix < schema.sql
mysql -uzabbix -p"mariadb-zabbix-user-password" zabbix < images.sql
mysql -uzabbix -p"mariadb-zabbix-user-password" zabbix < data.sql
3 安装zabbix server
3.1 获取镜像
docker pull zabbix/zabbix-server-mysql:6.0-alpine-latest
3.2 启动容器
docker run --name zabbix-server-mysql-1 -e DB_SERVER_HOST="172.17.0.1" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="mariadb-zabbix-user-password" -p 10051:10051 -d zabbix/zabbix-server-mysql:6.0-alpine-latest
其中172.17.0.1为docker0网桥地址
3.3 测试
netstate -nlpt
查看10051端口是否listening
docker exec -it zabbix-server-mysql-1 /bin/sh
进入容器后可以手工使用mysql -uzabbix -p测试能否正常连接数据库
docker logs zabbix-server-mysql-1
查看日志,正常情况下不会有明显报错
4 安装zabbix frontend
4.1 获取镜像
docker pull zabbix/zabbix-web-nginx-mysql:6.0-alpine-latest
4.2 启动容器
docker run --name zabbix-web-nginx-mysql-1 --link zabbix-server-mysql-1:zabbix-server -e DB_SERVER_HOST="172.17.0.1" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="mariadb-zabbix-user-password" -e ZBX_SERVER_HOST="172.17.0.1" -e PHP_TZ="Asia/Shanghai" -p 8080:8080 -d zabbix/zabbix-web-nginx-mysql:6.0-alpine-latest
4.3 测试
netstate -nlpt
查看8080端口是否listening
此时可以通过web访问zabbix web了,默认账号密码是Admin/zabbix
5 企业微信发送告警
zabbix 5.0开始支持使用webhook类型告警,与企业微信等媒介十分契合,因为代码写在web界面上,修改和迁移都比传统的调用脚本方便,不过需要一点点javascript开发工作。
5.1 媒介类型
5.1.1 类型
选用webhook
5.1.2 参数
Message {ALERT.MESSAGE}
To {ALERT.SENDTO}
5.1.3 脚本
根据网络资料简化而来
var Wechat = {
to: null,
message: null,
sendMessage: function() {
var params = {
msgtype: "text",
text: {
content:Wechat.message
}
},
data,
response,
request = new CurlHttpRequest(),
url = Wechat.to;
request.AddHeader('Content-Type: application/json');
data = JSON.stringify(params);
response = request.Post(url, data);
return JSON.parse(response);
}
}
try {
var params = JSON.parse(value);
Wechat.to = params.To;
Wechat.message = params.Message;
Wechat.sendMessage();
return 'OK';
}
catch (error) {
throw 'Sending failed: ' + error + '.';
}
5.2 动作
可自行修改
5.2.1 消息模板Problem
告警时间:{EVENT.DATE} {EVENT.TIME} 告警平台:{TRIGGER.HOSTGROUP.NAME} 告警主机:{HOST.NAME} 告警详情:{ITEM.NAME} {ITEM.VALUE} {TRIGGER.NAME}
5.2.2 消息模板Problem recovery
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME} 告警平台:{TRIGGER.HOSTGROUP.NAME} 告警主机:{HOST.NAME}({HOST.HOST}) 告警详情:{ITEM.NAME} {ITEM.VALUE} {TRIGGER.NAME}
5.3用户
媒介
Send to设置为企业微信机器人的webhook url