搭建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 ...
随机推荐
- CSS设置table样式
\(\color{purple}{表格是个很重要的东西,让我们来美化一下吧!}\) table{ width:290px;height:300px; border:1px solid black;/* ...
- N - Subpalindromes URAL - 1989 哈希+线段树
N - Subpalindromes URAL - 1989 这个是一个哈希+线段树,这个题目也不算特别难,但是呢,还比较有意思. 这个题目给你两个操作,一个是回答l~r 区间是不是回文,一个是对一个 ...
- spring学习笔记(五)自定义spring-boot-starter(1)
在我们开始定义之前我们应该知道springBoot的大致运行原理,我们从springBoot启动类开始.首先我们看下这个注解,@SpringBootApplication,跟进去可以看到如下代码: @ ...
- ubuntu18.04下mysql安装时没有出现密码提示
前言: 一:配置 ubuntu 18.04 mysql 5.7.30 二:问题 ubuntu18.04下mysql安装时没有出现密码提示,安装后自己有一个默认的用户名以及密码 解决方案: 1. 在终端 ...
- 【Hadoop离线基础总结】数据仓库和hive的基本概念
数据仓库和Hive的基本概念 数据仓库 概述 数据仓库英文全称为 Data Warehouse,一般简称为DW.主要目的是构建面向分析的集成化数据环境,主要职责是对仓库中的数据进行分析,支持我们做决策 ...
- X Error:BadDrawable (individ Pixmap or Window parameter 9)
#描述 平台:aarch64 系统:ubuntu16.04.02 Qt Version:4.8.7 Qt程序可以正常运行,界面渲染出现问题以及乱码,控制提示错误内容: "unable to ...
- spark-2.4.5 安装记录
参考 https://data-flair.training/blogs/install-apache-spark-multi-node-cluster/ 下载 spark 地址为 http://sp ...
- thread模块—Python多线程编程
Thread 模块 *注:在实际使用过程中不建议使用 thread 进行多线程编程,本文档只为学习(或熟悉)多线程使用. Thread 模块除了派生线程外,还提供了基本的同步数据结构,称为锁对象(lo ...
- 使用plupload实现多文件上传,自定义参数
下载地址:点击打开链接 1.在开发中可能需要用户附件上传的功能,实现批量上传功能其实就将多个上传任务放到一个集合中,分别上传. 2,使用plupload js插件可以很轻松的实现带参数的多文件上传 3 ...
- Mockito如何mock一条链式调用
在写单元测试的时候,不免可能需要mock一些对象出来,并且mock一些方法调用去返回一个自己想要的对象.一般的使用是这样的: FinalPumpkin pumpkin = mock(FinalPump ...