我正在尝试按照这篇文章的说明设置 sensu-server 来监控我的 docker 容器。
Docker 守护进程运行在具有 sensu-server 和 sensu-clients (localhost) 的同一主机上。
文件 check-docker,包含一个调用脚本 load-docker-metrics.sh 的条目
检查-docker.sh
{
"checks": {
"load_docker_metrics": {
"type": "metric",
"command": "load-docker-metrics.sh",
"subscribers": [
"docker"
],
"interval": 10
}
}
}
加载docker-metrics.sh
#!/bin/bash
set -e
# Count all running containers
running_containers=$(echo -e "GET /containers/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock \
| tail -n +5 \
| python -m json.tool \
| grep \"Id\" \
| wc -l)
# Count all containers
total_containers=$(echo -e "GET /containers/json?all=1 HTTP/1.0\r\n" | nc -U /var/run/docker.sock \
| tail -n +5 \
| python -m json.tool \
| grep \"Id\" \
| wc -l)
# Count all images
total_images=$(echo -e "GET /images/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock \
| tail -n +5 \
| python -m json.tool \
| grep \"Id\" \
| wc -l)
echo "docker.invismac.running_containers ${running_containers}"
echo "docker.invismac.total_containers ${total_containers}"
echo "docker.invismac.total_images ${total_images}"
if [ ${running_containers} -lt 3 ]; then
exit 1;
fi
load-docker-metrics 基本上是对 docker api 进行一些调用,并检索一些指标。如果我在我的主机(invismac)上运行这个脚本,它会给我一个准确的结果:
docker.invismac.running_containers 7
docker.invismac.total_containers 8
docker.invismac.total_images 15
我正在使用以下命令启动 sensu-server 容器:
docker run -d --name sensu-server \ -p 3000:3000 \ -p 4567:4567 \ -p 5671:5671 \ -p 15672:15672 \ -v $PWD/check-docker.json:/etc/sensu /conf.d/check-docker.json \ hiroakis/docker-sensu-server
之后,我可以在端口 3000 正确访问 uchima 仪表板
然后我使用以下命令启动客户端:
docker run --name sensu-client --privileged \ -v $PWD/load-docker-metrics.sh:/etc/sensu/plugins/load-docker-metrics.sh \ -v /var/run/docker.sock :/var/run/docker.sock \ usman/sensu-client localhost sensu 密码 CLIENT-1 localhost
假设客户端与 RabbitMQ 通信,并在 uchima 中注册自己,但没有任何反应。我已经进入了运行客户端的容器,通过查看日志,rabbitMQ似乎有错误:
"timestamp":"2016-04-15T15:18:50.768594+0000","level":"error","message":"[amqp] 检测到 TCP 连接失败"}
Rabbitmq 正在运行,我可以在这里访问它的端点:
仪表板给了我一些信息:我有 2 个连接、2 个频道、2 个用户。
另外,如果我去 sensu-master 容器,我可以检查 rabbitmq 是否有这个用户:
sensu [管理员]
拥有所有权限:
/sensu .* .* .*
任何想法为什么 sensu-client 无法与 RabbitMQ 通信?我可以尝试其他一些检查吗?我是否在服务器或客户端的配置上传递了一些错误的值?不能在同一主机上拥有服务器和客户端吗?
客户端上的 Dmesg,也给了我这个消息(我不知道它是否可能相关)
[29252.322147] 审核:type=1400 审核(1460734746.650:975):apparmor="DENIED" operation="ptrace" profile="docker-default" pid=27531 comm="ps" requested_mask="trace" denied_mask="trace"对等=“无限制”