本帖最后由 Globaldc 于 2020-9-1 10:34 编辑
Kubernetes和Docker是在DevOps圈中最常听到的两个词。Docker是一个工具,它使你能够以容器化的方式运行应用程序,Kubernetes是一个用于编排、管理容器的平台——如果你想使用Docker CLI去手动地管理数千个容器,这是不切实际的。
然而,仅仅通过Kubernetes管理并运行数千个容器是不够的,你还需要监控这些容器,以确保服务处于最佳运行状态。这一过程被称为网站可靠性工程(Site Reliability Engineering),是由谷歌提出并推广的一个术语。可观测性和分析性是SRE的重要组成部分。它可细分为以下三个部分:
监踪:从应用程序和宿主机中提取数值指标,这些指标可以被可视化和分析,以显示资源的当前状态。一旦提取到了数值指标,就可以使用它们来设置告警规则、促进分析和调试,并更好的做出决策; 日志:帮助开发人员在容器发生故障时,排除出错原因。容器日志随着容器生命周期的结束也就消失了。Kubernetes和Docker确实提供了一种浏览容器日志的方式,但是它的功能非常有限。因此,在任何以容器构成的环境中,集中式的管理日志是必须的; 跟踪:帮助你调试在网络上运行的服务,并跟踪请求链路,直到找到问题的根源。在微服务体系结构中,当多个服务/容器相互发送请求以完成一个业务任务时,需要一个适当的跟踪解决方案。
本文将详细讲解热门的开源工具,专门用于容器化服务的监控和分析。
当讨论开源监控解决方案时,首先想到的就是Prometheus。它在开发社区中非常流行,是CNCF的毕业项目。Prometheus最初由SoundCloud创建并开放源代码。Prometheus简化了提取数值指标的过程,直接从一个基于时间序列的监控端点中提取。适用于监视高度动态变化的容器环境。
Prometheus由三个部分组成:Prometheus server、Alertmanager和exporters。exporters以独立进程或容器的方式运行在目标机器上,生成各种指标数据,通过API的方式发送给Prometheus server。Prometheus server负责服务发现,也可以从exporters直接拉取指标数据,然后将数据存储在Prometheus的数据库中,用于可视化或告警服务。Alertmanager用于设置告警规则,分析Prometheus数据库中的数据,当触发某个规则时,向接收者发送警报。在这里可以找到大量的exporters,它们都得到了Prometheus的官方支持和社区的维护。
Prometheus已经成为监控云原生应用的行业标准。尽管它以服务发现的简单性、易用性、告警服务和与Kubernetes的集成而闻名,但指标数据只能被Prometheus server拉取的方式并不理想。这意味着exporters必须能够被Prometheus server访问。然而,在Prometheus中实现了一个pushgateway,它支持将数据直接推送给Prometheus server,而不是由Prometheus server主动拉取。Prometheus的另一个缺点是它不能很好地水平扩展。这个问题可以在Thanos adaptation of Prometheus(https://improbable.io/blog/thanos-prometheus-at-scale)找到解决方案。
相关工具和技术:Grafana、Cortex、Thanos、Prometheus Exporters、Alert Manager、Istio、Prometheus Operator。
|