环境:公司刚小批量使用docker容器,没有使用k8s之类的统一管理docker容器。初期要监控docker每个container的运行状态,并结合nagios报警通知。
由于没有多余时间去搭建docker专门的监控管理工具,就用最简单的古老的方法,用shell脚本获取 docker ps -a 里面的status,状态为非UP就报警;
脚本内容如下:
#!/bin/bash
STATUS=`sudo docker ps -a |grep jenkins|awk '{print $9}'`
if [ "$STATUS" == "Up" ]; then
echo docker container jenkins status is "$STATUS"
exit 0
else
echo "docker container jenkins is not running!"
exit 2
fi
内容很丑也简单粗暴。
然后惯例在nrpe.cfg里面添加
command[check_docker_jenkins]=/usr/local/nagios/libexec/check_docker_jenkins
服务端也配置好之后监控一直报 docker container jenkins is not running
原因:
docker用root账户起的,而且非docker运行账户使用docker ps 根本看不到里面跑的容器。
解决办法:(操作系统为centos7.2)
1 :修改/etc/sudoers
修改Defaults requiretty 为 Defaults:nagios !requiretty (表示仅 nagios 用户不需要控制终端)
添加nagios ALL=NOPASSWD:ALL (表示nagios用户使用sudo直接不输入密码)
2 在nrpe.cfg里面修改(sudo的路径先which一下)
command[check_docker_jenkins]=/bin/sudo /usr/local/nagios/libexec/check_docker_jenkins
3然后重启nrpe
这样就能正常监控了,特此记录一下,举一反三。