实例和容器的监控

【Chinese】
随着容器技术在生产环境中的广泛应用,对容器的监控和性能调优变得越来越重要。

容器技术生产环境的运营首先由少数大型IT公司进行调查、实践、验证和调优。该公司的业务系统通常具有以下特点:
– 大规模的客户访问和大量的数据流量。
– 大规模而复杂的混合平台(本地和云端)。
– 业务系统具备高可用性、横向扩展和纵向缩减的能力。
– 专业而世界级的运维团队。
– 积极参与开源社区,并能提交改进措施并将使用经验反馈给社区。
– 能够及时吸收先进成熟的技术并在运营环境中使用。

贵公司运营团队拥有丰富的集装箱使用经验,借此可以利用大型企业的使用经验和最佳实践来监控和优化集装箱的最佳部署方式。此外,还需要结合自身系统的实际情况。

2、容器监控
为了优化容器的性能,我们需要准确了解主机和容器的当前状态,并获取所需的监控指标。目前,”Docker”无疑已成为容器技术的行业标准。因此,我们将选择将” Docker”作为唯一的容器引擎来使用。我们也希望将调查工作集中在”Docker”所在的环境中展开。

在监控容器之前,首先需要知道从容器中获取哪些性能指标。容器是一种虚拟化技术,相较于虚拟机,它可以更小更精细地利用硬件资源,提供更好的性能、稳定性和隔离性,这点大家都知道。因此,容器监控也应该从资源消耗的角度展开,如CPU使用量、内存消耗、磁盘IO、网络IO等。还需要提取正在运行的容器的指标并进行监控。此外,还需要收集容器特有的生命周期和镜像数量等信息。

一旦理解了上述的容器监视基本概念后,我们来解释一下如何收集指标。说实话,收集单个容器数据非常简单。Docker自己也提供了命令行工具(例1)。如果您想要收集更详细的信息,也可以结合Docker API和”NS”命令来使用(例2)。而且,如果您想要以图像的形式显示指标数据,那么Ruxar公司的”CAdvisor”是一个非常好的工具(例3)。

例1:命令
$ docker stats termined_shockley judged_wozniak prickly_hypatia
prickly_hypatia
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O
determined_shockley 0.00% 884 KiB/1.961 GiB 0.04% 648 B/648 B
determined_wozniak 0.00% 1.723 MiB/1.961 GiB 0.09% 1.266 KiB/648 B
prickly_hypatia 0.00% 740 KiB/1.961 GiB 0.04% 1.898 KiB/648 B

例2:Docker API
$ echo -e “GET /containers/[容器名称]/stats HTTP/1.0\r\n” | nc -U /var/run/docker.sock
“cpu_stats”: {
“cpu_usage”: { “total_usage”: 44651120376, “percpu_usage”: [ 44651120376 ], “usage_in_kernelmode”: 9660000000, “usage_in_usermode”: 24510000000 },
“system_cpu_usage”: 269321720000000,
“throttling_data”: { “periods”: 0, “throttled_periods”: 0, “throttled_time”: 0 }
}

例3:cadvisor
$ docker run \
–volume=/:/rootfs:ro \
–volume=/var/run:/var/run:rw \
–volume=/sys:/sys:ro \
–volume=/var/lib/docker/:/var/lib/docker:ro \
–publish=8080:8080 \
–detach=true \
–name=cadvisor \
google/cadvisor:latest

例3:cadvisor
$ docker run \
–volume=/:/rootfs:ro \
–volume=/var/run:/var/run:rw \
–volume=/sys:/sys:ro \
–volume=/var/lib/docker/:/var/lib/docker:ro \
–publish=8080:8080 \
–detach=true \
–name=cadvisor \
使用google/cadvisor:latest进行运行

image.png

上述的工具非常方便易用,但有一定的限制,只能收集单一或单个主机的指标。对于云平台或大规模集群环境,需要更专业的方法和解决方案。幸运的是,在容器监控领域已经有一些优秀的解决方案。其中包括托管的付费SAAS解决方案,如 “DataDog”、”mackerel”、”sysdig”。也有一些自托管的开源解决方案,如”Prometheus”、”nagios”、”Sensu”、”Icinga”。此外,作为开源解决方案的一个选择,也可以结合时间数据库”InfluxDB”和”cAdvisor”以及”Grafana”来构建自己的监控系统。

3、选择容器监控解决方案
以下将根据「Rancher」PAAS平台的评估数据,将上述列举的方案分为托管和自托管,并比较它们各自的优缺点,最终根据实际需求选择最佳解决方案。比较指标如下所示。

– 部署难度:
– 详细级别:
– 汇总水平:
– 警报功能:
– 监控非容器资源:
– 成本:
– 操作和维护压力:
– 支持公共云服务。

■托管
①DataDog
https://www.datadoghq.com/customers/
・配置难度:*****
・详细级别:*****
・汇总级别:*****
・警报功能:*****
・非容器资源监控:支持
・费用:每个主机$15
・维护压力:小
・支持公共云服务:支持

②马鲛
https://mackerel.io/ja/blog/
・配置难度:*****
・详细程度:*****
・汇总程度:*****
・警报功能:*****
・非容器资源监测:支持
・费用:¥1800/主机
・维护管理压力:小
・支持公有云服务:支持

③Sysdig
https://sysdig.com/opensource/
・配置难度:***
・详细程度:*****
・汇总程度:*****
・警报功能:****
・非容器资源监测:支持
・费用:$20/主机
・维护管理压力:小
・支持公有云服务:支持

② Sensu
– 部署难度:*
– 细节级别:****
– 聚合级别:****
– 警报功能:****
– 非容器资源监控:支持
– 费用:开源免费
– 维护管理压力:中
– 支持公共云服务:支持

③自行监视架构(cAdvisor + InfluxDB + Grafana)
– 部署难度:*
– 详细级别:*****
– 聚合级别:*****
– 警报功能:***
– 非容器资源监控:支持
– 费用:开源免费
– 维护压力:大
– 不支持公共云服务

另外,上述的调查资料对于系统基础设施进行了几种方法和工具的指标收集、监控和警报比较。除此之外,还没有提及到更重要的应用程序应用日志。个人认为,除了系统基础设施指标和应用性能数据(APM)之外,使用专用的日志处理引擎(例如ELK)会更好。因为这些数据是企业的重要资产,具有独立、长期积累和分析的价值。

经过对以上各项选择的优缺点进行比较后,我们建议根据团队的技术积累情况以及运营和维护的预算来做出决定。综合考虑下,我们推荐以下方案的组合:
– 主机托管推荐:DataDog
– 开源推荐:Prometheus
– 应用程序日志应用:ELK

我下次想要讨论关于实例和容器性能优化的问题。

5、参考资料
日本语
https://deeeet.com/writing/2014/05/11/docker-host-networking/
https://blog.stormcat.io/post/entry/docker-tcp-kernel/

以下是一些与Docker部署相关的监控选项的对比链接:

1. 英文链接:https://rancher.com/comparing-monitoring-options-for-docker-deployments/
2. 英文链接:https://rancher.com/comparing-10-container-monitoring-solutions-rancher/
3. 英文链接:https://www.datadoghq.com/blog/the-docker-monitoring-problem/
4. 英文链接:https://www.datadoghq.com/blog/how-to-monitor-docker-resource-metrics/
5. 英文链接:https://www.datadoghq.com/blog/how-to-collect-docker-metrics/
6. 英文链接:https://www.datadoghq.com/blog/iheartradio-monitors-docker/

以下是几个有关中国语言的链接,请查看:
– [链接1](https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/79546137)
– [链接2](https://blog.51cto.com/ganbing/2083389)
– [链接3](https://cloud.tencent.com/info/5b3bbaedbe00efe6c7dc1c35372ad5db.html)

bannerAds