当前位置: 首页 > 科技观察

需要什么样的选择才能使K8s可观察?

时间:2023-03-21 00:42:51 科技观察

作者|YunZhaoObservability在微服务盛行的时代是非常必要的。数以千计的微服务给开发和运营团队带来了指数级的维护成本。解决这一问题,需要引入高效的监控工具,辅助技术管理和决策。由于K8s是目前微服务领域的热门选手,如何有效地选择和部署监控K8s集群工具成为了大家普遍关注的话题。问题在K8s环境下,应用程序运行在跨集群的多个节点上,服务分布在多个集群和多个云中,这使得跟踪和监控这些应用程序及其所依赖的基础设施的健康状况变得非常困难,非常具有挑战性。K8s监控涉及从K8s集群收集指标,识别关键事件,目标是确保所有硬件、软件和应用程序按预期运行。因此,在一个中心位置收集指标将有效地帮助开发人员了解和维护整个K8s机群及其上运行的应用程序或服务的健康状况。实现全方位的监控是非常困难的,其中两个是:1、容器化与K8s创建的抽象层之间的监控;2.K8s环境下运行的应用动态特性之间的监控。这篇文章探讨了一些不错的K8s监控和日志记录工具,包括用于监控的Prometheus和用于可视化和仪表板的Grafana等。K8sObservableTools目前业界流行的K8s容器监控开源工具有很多。比较常见的有:Prometheus、Grafana、Elasticsearch、Thanos等。1.PrometheusPrometheus是一个开源的系统监控和告警工具包,最初是在SoundCloud上构建的,灵感来自谷歌使用的Borgmon工具。自2012年启动以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发者和用户社区。Prometheus于2016年加入云原生计算基金会,成为继K8s之后的第二个托管项目。虽然本文在K8s监控的上下文中讨论Prometheus,但它可以满足各种监控需求,例如帮助简化指标收集、关联事件和警报、提供安全性以及进行大规模故障排除和跟踪。Prometheus的主要功能之一是收集指标。这里的指标是什么?这取决于用户想要测量的内容或应用程序。对于Web服务器,它可能是请求时间,对于数据库,它可能是活动连接数或活动查询等。Prometheus收集用户指定的指标并将其存储为时间序列数据。可以分析指标以了解集群及其组件的健康状况。Prometheus的可靠性非常好。这有助于确保在用户环境出现其他问题时Prometheus仍然可以访问。每个Prometheus服务器都是独立的。本地时间序列数据库使其独立于远程存储或其他远程服务。这有助于快速识别问题并接收有关受监控集群和应用程序系统性能的实时反馈。Prometheus的主要组件,包括Prometheusserver和Alertmanager,整体架构如下图所示。虽然Prometheus提供了WebUI,但它通常与Grafana结合使用以实现更灵活的可视化。2.GrafanaGrafana是一个完全托管的应用程序和基础架构可视化平台,可与Prometheus等监控软件配合使用。Prometheus和Grafana的组合正在成为DevOps团队越来越普遍的监控堆栈,用于存储和可视化时间序列数据。Prometheus作为存储后端,Prafana作为分析和可视化的接口。3.ThanosThanos作为一个Metric系统,提供了一种简单且具有成本效益的方式来集中和扩展基于Prometheus的监控系统。4.Elasticsearch(ES)Elasticsearch是一个分布式的、RESTful风格的搜索和数据分析引擎。它适用于几乎所有数据类型:数字、文本、地理位置、结构化数据、非结构化数据等。5.LogstashLogstash是一种开源服务器端数据处理管道,可同时从多个来源获取数据、转换数据并发送它到适当的商店。6.KibanaKibana为Elasticsearch数据可视化提供了免费开放的用户界面,并允许用户在ElasticStack中导航。它为日志和时间序列分析、应用程序监控和运营智能用例提供数据可视化和探索工具。从跟踪查询负载到了解请求在整个应用程序中的移动,都可以高效地完成。许多团队单独或组合使用这些监控和日志记录工具来创建自己的解决方案并解决特定的容器监控和K8s应用程序监控需求。目前市面上流行的K8s监控工具组合大致可以分为两种:Prometheus+Grafana、Elasticsearch+Logstash+Kibana。后者通常被称为ELKstack或ElasticStack,这种组合目前是免费和开源的。注意事项无论是单独部署还是组合部署,监控工具的使用都不可避免地会带来一些复杂性,尤其是遇到复杂的K8s集群时——可能在不同的云环境中运行不同的K8s发行版,难度会陡然增加。一般来说需要注意以下几点:1.Prometheus单独配置不适合大规模场景。由于应用加载问题、手动配置门槛高、配置不同步,大规模的Prometheus配置管理将交给开发和维护团队。提出了严峻的挑战。例如,到2019年底,Uber的工作负载已增长到4,000多个微服务。为了管理和操作如此复杂的应用程序,技术团队需要更高级的可观察性,这需要为每个应用程序专门配置爬行、仪表板和警报。创建这些配置并将它们应用到每个环境中——通常是手动完成的,并且每次有变化时都以临时方式完成——对于一个家庭来说负担不起。2.Prometheus和Grafana在多集群环境下的适用性有限。尽管Prometheus和Grafana对于单个集群可以很好地协同工作,但在多集群环境中,用户可能不得不将Thanos添加到用户的工具集中,以聚合数据并提供长期存储和全局视图。用户可能仍然面临数据保留和HA(高可用性)限制,导致一些人更喜欢ELK堆栈。由于这种多集群的复杂性,许多企业团队更喜欢使用Datadog、Cloudwatch和NewRelic等商业解决方案进行监控即服务。写在最后,K8s对于当前大规模应用的技术架构的重要性不言而喻。K8s的observability(监控)工具也成为了开发维护团队绕不过去的一道门槛。无论是Prometheus、Grafana还是ELK,这些工具都在业务中得到了验证。我希望这篇文章能给你一些有用的想法。参考资料:https://dzone.com/articles/kubernetes-monitoring-with-prometheushttps://prometheus.io/docs/