搭建Prometheus平台,你必须考虑的6个因素
作者简介
Loris Degioanni,Sysdig的创始人和CTO,同时还是容器安全工具Falco的创建者。
原文链接
https://thenewstack.io/6-things-to-consider-in-a-prometheus-monitoring-platform/
本文转自Rancher Labs
当前,Prometheus被许多企业和组织广泛使用,以监控其容器和微服务。但是在这一过程中,大型公司通常会陷入困境:当应用程序数量越来越多的时候,扩展监控指标则是一个十分重大的挑战。
不断增长的容器使情况复杂化
相对来说,监控单体环境常常更简单,因为静态物理服务器和虚拟机数量是确定的,并且监控指标的数量也是有限的。但是,如今由于容器以及需要向微服务架构迁移,要跟踪监控的实例程序数量激增。
如果说位于数据中心的服务器是宠物,需要我们不断关注的话,那么云实例则更像牛(因为有很多,你不必关心单个实例),而容器则更像小蜜蜂。它们数量很多,有时每台机器有数百个容器,并且新的容器一直不断出现,当与诸如Kubernetes的容器编排引擎一起使用时,它们的寿命可能非常短。这使得跟踪监控它们变得更加困难,而且如果你不小心误操作的话,它们可能会造成很多损害。
随着复杂性和分布式环境的增加,你需要监控的实体数量也在增加。此外,你可能希望监控更多属性以确保你对正在发生的事情有准确的了解,或者在进行故障排除或事件响应的情况下,可以了解正在发生的事情。在短暂的环境中,后者尤其成问题,因为当你想了解问题的根本原因时,通常相关的资源已经停用,这意味着监控解决方案必须提供一种能够存储足够的历史记录以进行取证的方法。
流行的监控工具:Prometheus
越来越多需要云监控的团队正在转向Prometheus,这是一个开源的CNCF项目。Prometheus已成为开发人员用来在云原生环境中收集和理解指标的首选监控工具。它由一个大型社区支持,有来自700多家公司的6300个贡献者,有13500个代码提交和7200个拉取请求。
默认情况下,典型的云原生应用程序堆栈(如Kubernetes、Ngnix、MongoDB、Kafka、golang等)会暴露Prometheus指标。Prometheus是一个可以垂直弹性伸缩的Go程序,为单个容器或单个主机部署它时十分容易。换言之,一开始使用Prometheus极为容易,你可以轻松监控你的第一个Kubernetes集群,但是这也意味着随着基础架构的增长,监控会越来越复杂。

应用程序增长带来的扩展问题
随着环境规模增长,你需要跟踪监控飞速增长的时间序列数据,并且在数据量达到某个点之后,单个Prometheus实例无法继续跟踪监控。这一情况下,最直接的选择是在整个企业中运行一组Prometheus服务器,但这带来了一些挑战。例如,跨数十甚至数百台Prometheus服务器管理和合并数据并不容易。同样,了解企业工作流程、单点登录、基于角色的访问控制以及遵守SLA或合规性也不是容易的问题。随着应用程序的增长,在不中断开发人员工作的情况下运行一个全方位的监控解决方案,这将成为一个可管理性和可靠性的问题。
为了解决这一问题,企业采用了许多方法。
简单的方法是为每个命名空间或每个集群都准备一个单独的Prometheus服务器。这种方法到一定规模就会难以为继,此外,它还有一个缺点,那就是会造成大量的断开的数据孤岛。这会使故障排查变得很麻烦,因为大多数问题会跨越多个服务/团队/集群。不但在每个环境中很难找到相同的指标,你还需要把数据拼接在一起,以试图了解发生了什么。
另一个常见方法是使用类似Cortex或Thanos的开源工具来集合多个Prometheus服务器。这些高效的工具可以让你集中查询服务器、收集数据然后在统一的dashboard中共享。然而,与任何数据密集型分布式系统一样,它们需要大量的技能和资源才能运行。
需要考虑的6个因素
对于那些以Prometheus为起点,然后寻求商业化解决方案以获得全局监控的公司来说,重要的是,不丢失Prometheus上完成的所有标准化开发工作——dashboard、告警、exporter等。然而,这不是需要考虑的唯一事情,如果你继续使用Prometheus,需要坚持以下标准:
1、 兼容性,以支持所有Prometheus功能
你的供应商/所使用的工具/SaaS解决方案需要能够使用任何可产生Prometheus指标的实体程序中消耗数据,无论是本地Kubernetes还是云服务。相对来说,消耗Prometheus指标微不足道,但是也不要忽略一些小事情,例如将指标提取到存储中或增加数据时能够重新标注指标,这样对你的环境更有意义。这些小事加起来,能够收集到的数据将会堆积如山、大不相同。
2、 PromQL兼容性
Prometheus查询语言由Prometheus创建者发明,用于提取存储在Prometheus中的信息。PromQL能让你查询指定服务或指定用户的指标,它还能汇总或细分数据。例如,你可以使用它显示所有容器中每个应用的CPU使用率。或者仅显示Cassandra容器的数据,并将其显示为每个集群的单个值。可以说,PromQL释放了Prometheus的真正价值,因此如果将Prometheus的指标集成到一个不完全支持PromQL的产品中,就完全违背了使用Prometheus的初衷。
3、 支持热插拔
要真正与Prometheus兼容,该解决方案必须能够支持热插拔,以便能够与你现有的dashboard、告警和脚本一起使用。例如,许多使用Prometheus的企业都将Grafana用于dashboard。这个开源工具能够与Prometheus很好地集成在一起,包括在查询级别,并且可以用于生成一系列有用的图表和dashboard。因此,声称与Prometheus兼容的商业产品应与Grafana等工具兼容。仅仅说解决方案可以让你在Grafana中查看数字是远远不够的,你需要能够按照原样提取现有的Grafana dashboard,并将它们重新应用于商业解决方案中已安装的数据。
4、 访问控制
在评估工具时,访问控制是另一个你需要考虑的安全问题。能够使用行业标准协议(包括LDAP、Google Oauth、SAML和OpenID)保护用户身份验证,使公司能够通过基于服务的访问控制来隔离和保护资源。
5、 故障排查
Kubernetes简化了部署、弹性伸缩和管理容器化应用程序和微服务。这有助于保持服务的正常运行,但是要识别和解决诸如性能降低、部署失败和连接错误之类的根本问题,你需要能够从整个环境中收集和可视化基础架构、应用程序和性能数据。由于无法同时访问实时信息和上下文数据,因此几乎不可能关联环境中的指标,所以你可以更快地解决问题。
6、 与现有告警兼容
最后,如果你正在寻找商业解决方案来帮助解决Prometheus可扩展性问题,请确保它支持所有级别的告警。能够实现这一目标的关键是全面支持Alert Manager功能,而Alert Manager还要求100%的集成和 PromQL兼容性。
如果你找到一个能够满足以上标准的商业化工具,你应该能够轻松将其集成到现有的Prometheus中,并且能够避免公司遇到的可扩展性问题。开发人员有充分的理由喜爱Prometheus,因此在采用商业化方案之前进行全面、尽职的调查将确保他们仍然可以使用自己喜欢的指标。
搭建Prometheus平台,你必须考虑的6个因素的更多相关文章
- [转帖]基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html need good study 一 ...
- gitbook安装与使用之windows下搭建gitbook平台
最近需要在GitBook中去阅读电子书 安装nodejs cnpm安装gitbook 解压书籍文件,并cd到书籍文件目录 gitbook serve 浏览器访问localhost:4000 先在win ...
- eclispe搭建android平台
1.不推荐在线安装android ADT,因为需要FQ.可以在网上下载ADT,然后离线安装. 离线安装方式:help->Install ->点击add然后选择你的安装包(不需要解压),一直 ...
- 源码搭建lnmp平台
lnmp平台是指利用linux操作系统,nginx服务器,mysql数据库和php语言搭建高性能web服务器,负载均衡器和邮件代理服务器. 原理图:‘
- MAC中在eclipse luna上搭建移动平台自己主动化測试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录
这几天由于原来在用的hp laptop的电池坏掉了,机器一不小心就断电.所以仅仅能花时间在自己的mackbook pro上又一次搭建整套环境.大家都知道搭建好开发环境是个非常琐碎须要耐心的事情,特别是 ...
- MAC中在eclipse luna上搭建移动平台自动化测试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录
这几天因为原来在用的hp laptop的电池坏掉了,机器一不小心就断电,所以只能花时间在自己的macbook pro上重新搭建整套环境,大家都知道搭建环境是个很琐碎需要耐心的事情,特别是当你搭建的安卓 ...
- logstash+elasticsearch+kibana快速搭建日志平台
使用logstash+elasticsearch+kibana快速搭建日志平台 日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日 ...
- windows平台下基于QT和OpenCV搭建图像处理平台
在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...
- 大数据Hadoop学习之搭建hadoop平台(2.2)
关于大数据,一看就懂,一懂就懵. 一.概述 本文介绍如何搭建hadoop分布式集群环境,前面文章已经介绍了如何搭建hadoop单机环境和伪分布式环境,如需要,请参看:大数据Hadoop学习之搭建had ...
随机推荐
- Hadoop入门学习笔记-第一天 (HDFS:分布式存储系统简单集群)
准备工作: 1.安装VMware Workstation Pro 2.新建三个虚拟机,安装centOS7.0 版本不限 配置工作: 1.准备三台服务器(nameNode10.dataNode20.da ...
- B - Housewife Wind POJ - 2763 树剖+边权转化成点权
B - Housewife Wind POJ - 2763 因为树剖+线段树只能解决点权问题,所以这种题目给了边权的一般要转化成点权. 知道这个以后这个题目就很简单了. 怎么转化呢,就把这个边权转化为 ...
- crontab自动启动小任务例子(每一分钟将当前日期打入一个文件)
crontab -l #查看当前定时任务列表 显示没有,那么我们来安装一下(必须在root用户下) – yum install vixie-cron – yum install crontabs ...
- 如何发挥Visual Studio 2019强大的编辑功能轻松编辑Keil项目
本文地址:https://www.cnblogs.com/jqdy/p/12565161.html 习惯了VS的强大编辑功能,对Keil 5越来越深恶痛绝.查阅网络文章后按图索骥初步实现了VS编辑Ke ...
- IDEA打包JavaWeb项目
IDEA打包JavaWeb项目 步骤: 1.配置项目->2.Build Artifacts->3.找到.war文件 具体操作: 首先,单击顶部工具栏的“File”选项,在弹出选项中选择“P ...
- 「雕爷学编程」Arduino动手做(12)——霍尔磁力模块
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- 弹性式数据集RDD
弹性式数据集RDD 一.RDD简介二.创建RDD 2.1 由现有集合创建 2.2 引用外部存储系统中的数据集 2.3 textFile & who ...
- 快手4-5月Java岗面经
快手面试准备 我的牛客网帖子链接:https://www.nowcoder.com/discuss/429362 一面: 基础知识 1.java基本数据类型(8种) 1.基本数据类型有哪些,各占多少位 ...
- Django模板之模板标签
标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中. 一些标签需要开始和结束标签 (例如:{% tag %} ...标签 内容 ... ...
- python3.x 基础八:socket网络编程
Socket socket就是一直以来说的“套接字”,用于描述:ip:端口,是通信链的句柄,客户端通过这个句柄进行请求和响应 普通文件的操作顺序:打开-读写-关闭,针对的是文件 socket是特殊的文 ...