Docker 容器监控
监控方案
监控方案我选择了 Zabbix,要实现对每个容器信息的监控,需要 zabbix-docker-monitoring 插件。
配置服务端
Zabbix 是 C/S 架构,服务端最好能配置在一台独立的宿主机上。
服务端 docker-compose 文件:
1 | version: '2' |
容器方式运行 Zabbix-agent
可以无需在宿主机安装 Zabbix-agent,直接运行官方的容器即可。
运行 Zabbix-agent 容器:
1 | docker run \ |
配置容器
- 修改
ZA_Server
,直接改成服务器 ip。
如果想覆盖容器中 agent 的配置变量,可以在 run 的时候使用 -e ZA_Variable=value
的方法,但是对 AllowRoot, LoadModulePath, LoadModule, LogType 的配置无法覆盖,其中 AllowRoot 的默认值就是 1,参看 Github Issue。
宿主机直接运行 Zabbix-agent
容器的方式运行 zabbix-agent
不支持 docker.xnet
数据的监控,想要监控 docker.xnet
数据,得直接在宿主机上运行 zabbix-agent
,并加载 zabbix_module_docker.so
,参看 Github Issue。
1. 添加 zabbix 用户和组
1 | groupadd zabbix |
2. 编译安装 zabbix-agent
1 | apt-get install -y wget autoconf automake gcc subversion make pkg-config |
3. 编译 zabbix_module_docker.so
:
1 | cd ~/zabbix32 |
4. 启动 zabbix_agentd
使用 systemd 管理进程,创建 /lib/systemd/system/zabbix-agentd.service
文件:
1 | [Unit] |
执行下面命令告知 systemctl 如何启动 zabbix-agentd
1 | sudo systemctl enable zabbix-agentd.service |
5. 配置加载项
修改 zabbix-agentd 配置文件 /usr/local/etc/zabbix_agentd.conf
中的下面几个参数:
1 | Server=Zabbix-Server-IP |
运行下面命令启动 zabbix-agentd
1 | systemctl start zabbix-agentd.service |
6. 启动失败分析
如果启动失败,查看
/tmp/zabbix_agentd.log
文件,如不存在,可手动创建,所属用户为zabbix:zabbix
。报错:
1
2zabbix_agentd [xxxxx]: cannot attach to existing shared memory: [13] Permission denied
cannot allocate shared memory for collector可能是
zabbix_module_docker.so
编译错误,重新编译一次即可。
设置监控
1. 登录管理系统
浏览器访问 http://ZabbixServerIP:Port
,可以看到 zabbix 服务器 web 管理界面,默认登录帐号是 Admin/zabbix
(注意 Admin 首字母大写)。
为了方便操作,可将系统语言设置为中文。
2. 导入模板
- 在
配置 > 模板
里面导入监控模板:zabbix-template-app-docker.xml。
注:模板里有一些已经配置好的监控方案,可以参考取舍。
3. 创建主机群组
- 在
配置 > 主机群组
里创建主机群组,命名为Docker Servers
。
4. 创建主机
- 在
配置 > 主机
里面创建一个主机。 - 群组选择
Docker Servers
。 agent代理程序的接口
填写要监控的 agent ip。模板
选项卡中选择第二步中导入的模板,添加更新。- 在
监控 > 最新数据
中查看监控数据。