架构
先简单介绍zabbix监控的最主要的两个组件: zabbix server
zabbix agent
server 用来部署 web console以及相关的数据存储,所以需要配合一些数据库来保存数据,比如mysql
,pgsql
, 又有前端的页面所以还需要配置 nginx
和getway
所以 server端需要三个服务来组成,如果没有数据库,还要在加个数据库的服务
web console 可以方便的配置和管理 主机/监控项/监控图表 等。
agent就比较简单了,主要就是用来采集设备或者docker服务的数据,发送给server
可以参考官方给的说明Zabbix 概述
部署
我这里有三台主机需要监控,所以我选一台来部署server,我是通过docker来部署
最终的 docker ps
查看运行的容器列表如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
908999713a18 zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest "docker-entrypoint.sh" 5 days ago Up 5 days 8443/tcp, 0.0.0.0:80->8080/tcp, :::80->8080/tcp zabbix-web-nginx-mysql
f8b6bc2c3213 zabbix/zabbix-server-mysql:alpine-6.0-latest "/sbin/tini -- /usr/…" 5 days ago Up 5 days 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp zabbix-server-mysql
bde2afae52d9 mysql:8.0 "docker-entrypoint.s…" 5 days ago Up 5 days 3306/tcp, 33060/tcp mysql-server
5a24770317a9 zabbix/zabbix-java-gateway:alpine-6.0-latest "docker-entrypoint.s…" 5 days ago Up 5 days 10052/tcp zabbix-java-gateway
这里最好写一个docker-compose来管理这几个虚拟机,我这没来得及搞,主要是从官网示例-从容器中安装抄过来的,就偷了个懒
暂时先把具体的docker命令记录下:
docker network create zabbix-net
docker run --name mysql-server --network zabbix-net -t -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="password" -e MYSQL_ROOT_PASSWORD="password" -d mysql:8.0 --character-set-server=utf8 --collation-server=utf8_bin
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-6.0-latest
docker run --name zabbix-server-mysql -t \
-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" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-6.0-latest
docker run --name zabbix-web-nginx-mysql -t \
-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" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest
配置 agent
接下来在每个机器上启动zabbix agent2,然后配置zabbix agent2 conf链接到server
通过apt下载zabbix-agent2
apt install zabbix-agent2
主要是对 /etc/zabbix/zabbix_agent2.conf 修改两个参数
具体如下:
Server=serverhost
ServerActive=serverhost:10051
然后重启zabbix agent2服务
systemctl restart zabbix-agent2
配置 web console 主机 监控项 监控图表等
到web页面点点点就行了。
但是这里需要先了解zabbix的一些概念
主机 host
你要监控的主机,通过 ip port 配置到server,让server知道这个agent需要被监控
可以通过主机查看主机下的监控项,告警等配置
模板 template
把一堆的item放到一个template,方便复用给多个host,zabbix给了很多常见的监控项组合,这里可以结合自己的场景来选择相关的预定的template,如果不能满足你的需要,那么就需要自己创建模板,添加监控项/报警等内容。
监控项 item
就是监控的具体指标,通过 key 保证在 zabbix 系统里的唯一性。在一个host下每一个item都有唯一的key,不同的host可以有相同key的item,比如host下都有 key = system.cpu.util[,idle] 的监控项来监控系统的idle状况。