热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Rancher监控最佳实践

配置合理的监控和告警规则对于安全、可靠地运行生产工作负载至关重要。在使用Kubernetes和Rancher时也是如此。幸运的是,集成的监控和告警功能使整个过程变得更加简单。Ran

配置合理的监控和告警规则对于安全、可靠地运行生产工作负载至关重要。在使用 Kubernetes 和 Rancher 时也是如此。幸运的是,集成的监控和告警功能使整个过程变得更加简单。

Rancher 的监控文档( https://docs.rancher.cn/docs/rancher2.5/monitoring-alerting/_index )描述了如何设置一个完整的 Prometheus 和 Grafana。开箱即用,它将从集群中的所有系统和 Kubernetes 组件中抓取监控数据,并提供合理的仪表盘和告警。但为了实现可靠的设置,您还需要监控自己的工作负载并使 Prometheus 和 Grafana 适应您自己的特定用例和集群大小。本文档将为您提供这方面的最佳实践。


需要监测的内容

Kubernetes 本身以及运行在其内部的应用,构成了一个分布式系统,不同的组件之间相互影响。对于整个系统和每个单独的组件,你必须确保性能、可用性、可靠性和可扩展性。更多细节和信息的参考 Google 免费的Site Reliability Engineering Book( https://landing.google.com/sre/sre-book/ ),尤其是关于监控分布式系统( https://landing.google.com/sre/sre-book/chapters/monitoring-distributed-systems/ )这一章。


配置 Prometheus 资源使用

在安装集成监控时,Rancher 允许配置一些设置,这些设置取决于您的集群的大小和其中运行的工作负载。本章将详细介绍这些设置。


存储和数据保留

Prometheus 所需的存储空间与您存储的时间序列和标签的数量以及您配置的数据保留量直接相关。需要注意的是,Prometheus 并不是用来作为长期指标存储的。数据保留时间通常只有几天,而不是几周或几个月。原因是,Prometheus 不会对其存储的指标进行任何聚合。这很好,因为聚合会稀释数据,但这也意味着所需的存储空间随着时间的推移线性增长而没有保留。

计算所需存储空间的一种方法是通过以下查询来查看 Prometheus 中存储块的平均大小

rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1h]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[1h])

接下来,找出你每秒的数据摄取率

rate(prometheus_tsdb_head_samples_appended_total[1h])

然后与保留时间相乘,并添加几个百分点作为缓冲区

平均块大小(以字节为单位)*每秒的摄取速率*保留时间(以秒为单位)* 1.1 = 必需的存储空间(以字节为单位)

你可以在这篇博客文章( https://www.robustperception.io/how-much-disk-space-do-prometheus-blocks-use )中找到更多关于如何计算必要存储的信息。

你可以在Prometheus 文档( https://prometheus.io/docs/prometheus/latest/storage )中阅读更多关于 Prometheus 存储概念的内容。


CPU 和内存的请求和限制

在较大的 Kubernetes 集群中,Prometheus 会消耗大量内存。Prometheus 需要的内存直接与它存储的时间序列和标签的数量以及填充这些标签的 scrape 间隔有关。

你可以在这个博客文章( https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion )中找到更多关于如何计算所需内存的信息。

所需的 CPU 数量与您正在执行的查询数量相关。


长期储存

Prometheus 并不是为了长期存储指标,而只用于短期存储。

为了长期存储一些或所有的指标,你可以利用 Prometheus 的远程读/写( https://prometheus.io/docs/prometheus/latest/storage/#remote-storage-integrations )功能将其连接到存储系统,如Thanos( https://thanos.io/ )、InfluxDB( https://www.influxdata.com/ )、M3DB( https://www.m3db.io/ )或其他系统。你可以在这篇博客文章( https://rancher.com/blog/2020/prometheus-metric-federation )中找到一个示例设置。


抓取自定义工作负载

虽然集成的 Rancher Monitoring 已经可以从集群的节点和系统组件中抓取系统指标,但你部署在 Kubernetes 上的自定义工作负载也应该被抓取数据。为此,你可以配置 Prometheus 在一定的时间间隔内对你的应用程序的端点进行 HTTP 请求。然后,这些端点应该以 Prometheus 格式返回它们的指标。

一般来说,您要从集群中运行的所有工作负载中抓取数据,以便可以将它们用于告警或调试问题。很多时候,你会认识到,只有当你在事件中真正需要指标的时候,你才需要一些数据。如果它已经被抓取并存储了,那就好办了。由于 Prometheus 只是为了成为一个短期的指标存储,所以抓取和保存大量数据通常并不那么昂贵。如果你使用的是 Prometheus 的长期存储方案,那么你仍然可以决定数据的存储位置。


关于 Prometheus Exporters

许多第三方工作负载,如数据库、队列或 Web 服务器,要么已经支持以 Prometheus 格式公开指标,要么有所谓的 exporter,可以在工具的指标和 Prometheus 理解的格式之间进行转换。通常,您可以将这些 exporter 作为额外的 sidecar 容器添加到工作负载的 Pods 中。很多 helm charts 已经包含了部署 exporter 的选项。此外,你还可以在promcat.io( https://promcat.io/ )和ExporterHub( https://exporterhub.io/ )上找到一个由 SysDig 策划的 exporter 列表。


Prometheus 在编程语言和框架中的支持

要想把自己的自定义应用指标放到 Prometheus 中,你必须直接从你的应用代码中收集和暴露这些指标。幸运的是,对于大多数流行的编程语言和框架来说,已经有一些库和集成可以帮助解决这个问题。其中一个例子是Spring( https://docs.spring.io/spring-metrics/docs/current/public/prometheus )框架中的 Prometheus 支持。


ServiceMonitors 和 PodMonitors

一旦所有工作负载都以 Prometheus 格式公开了指标后,你必须配置 Prometheus 来获取它。 Rancher 使用prometheus-operator( https://github.com/prometheus-operator/prometheus-operator ),这使得使用 ServiceMonitors 和 PodMonitors 添加额外的目标变得容易。很多 helm charts 已经包含了一个选项来直接创建这些监控器。你也可以在 Rancher 文档中找到更多信息。


Prometheus Push Gateway

有些工作负载的指标很难被 Prometheus 获取。就像 Jobs 和 CronJobs 这样的短期工作负载,或者是不允许在单个处理的传入请求之间共享数据的应用程序,如 PHP 应用程序。

要想获得这些用例的指标,你可以设置 prometheus-pushgateways( https://github.com/prometheus/pushgateway )。CronJob 或 PHP 应用程序将把指标更新推送到 pushgateway。pushgateway 汇总并通过 HTTP 端点暴露它们,然后可以由 Prometheus 获取。


Prometheus Blackbox Monitor

有时,从外部监控工作负载是很有用的。为此,您可以使用Prometheus blackbox-exporter( https://github.com/prometheus/blackbox_exporter ),它允许通过 HTTP、HTTPS、DNS、TCP 和 ICMP 探测任何类型的端点。


(微)服务架构中的监控

如果你有一个(微)服务架构,集群中的多个单独的工作负载相互通信,那么拥有关于这些流量的详细指标和跟踪非常很重要,这是为了解所有这些工作负载是如何相互通信的,以及问题或瓶颈可能在哪里。

当然,你可以监控所有工作负载中的所有内部流量,并将这些指标暴露给 Prometheus,但这相当耗费精力。像 Istio 这样的服务网格,可以通过单击( https://docs.rancher.cn/docs/rancher2.5/istio/_index )在 Rancher 中安装,可以自动完成这项工作,并提供关于所有服务之间的流量的丰富的遥测数据。


真实用户监控

监控所有内部工作负载的可用性和性能对于运行稳定、可靠和快速的应用程序至关重要。但这些指标只能向你展示部分情况。要想获得一个完整的视图,还必须知道你的最终用户是如何实际感知的。为此,你可以研究各种真实用户监控解决方案( https://en.wikipedia.org/wiki/Real_user_monitoring )。


安全监控

除了监控工作负载以检测性能、可用性或可扩展性的问题外,还应该监控集群和运行到集群中的工作负载,这可以发现一些潜在的安全问题。一个好的起点是经常运行CIS 扫描( https://docs.rancher.cn/docs/rancher2.5/cis-scans/_index )并发出告警,检查集群是否按照安全最佳实践进行配置。

对于工作负载,你可以看看 Kubernetes 和 Container 安全解决方案,比如Falco( https://falco.org/ )、Aqua Kubernetes Security( https://www.aquasec.com/solutions/kubernetes-container-security/ )、SysDig( https://sysdig.com/ )。


设置告警

将所有的指标纳入监控系统并在仪表盘中可视化是很棒的做法,但你也希望在出现问题时能主动提醒。

集成的 Rancher 监控已经配置了一套合理的告警,这些告警在任何 Kubernetes 集群中都是可用的。您应该扩展这些内容并且覆盖您的特定工作负载和用例。

在设置告警时,应为所有至关重要的工作负载配置告警。但也要确保它们不会太频发送告警通知。理想情况下,你收到的每一个告警都应该是因为一个需要你关注并需要解决的问题。如果你的告警一直在发送,但并不是那么关键,那么你就有可能开始完全忽略你的告警,然后错过真正重要的告警。先开始关注真正重要的指标,比如说如果你的应用离线了就发出告警。修复所有开始出现的问题,然后开始创建更详细的告警。

如果告警开始发送,但你暂时无法处理,也可以将告警静默一定时间,以便以后查看。

您可以在Rancher 文档( https://docs.rancher.cn/docs/rancher2.5/monitoring-alerting/_index )中找到更多关于如何设置告警和通知的信息。

作者:Varden

出处:http://www.cnblogs.com/varden/

本文内容如有雷同,请联系作者!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。



推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 本文介绍了在Go语言中可见性与scope的规则,包括在函数内外声明的可见性、命名规范和命名风格,以及变量声明和短变量声明的语法。同时,还介绍了变量的生命周期,包括包级别变量和局部变量的生命周期,以及变量在堆和栈上分配的规则和逃逸分析的概念。 ... [详细]
  • PatchODAX8: ... [详细]
  • 点击上方“新机器视觉”,选择加”星标”或“置顶”重磅干货,第一时间送达很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习,做 ... [详细]
author-avatar
墨尔本晴上残留的余温丶_856
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有