一. Prometheus 监控集群概述
Prometheus三大组件:
Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
Alertmanager 警告管理器,用来进行报警。
Push Gateway 支持临时性Job主动推送指标的中间网关。
1.1 Prometheus组件架构图
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。Prometheus的主要特点如下:
多维度数据模型。
灵活的查询语言。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种图形和Dashboard的展示,例如Grafana。
Prometheus根据配置的任务(job)以周期性pull的方式获取指定目标(target)上的指标(metric):
Prometheus Server:主服务,接受外部http请求,根据配置完成数据采集,服务发现以及数据存储。
prometheus targets:静态收集的目标服务数。
service discovery:动态发现服务。
Push Gateway:为应对部分push场景提供的插件,监控数据先推送到Push Gateway上,然后再由Prometheus Server端采集pull。由于存在时间较短,可能在Prometheus来pull之前,jobs就消失了。(若Prometheus Server在采集间隔期间,Push Gateway上的数据没有变化,Prometheus Server将采集到2次相同的数据,仅时间戳不同)。
Exporters(探针):是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。抓取什么样的数据,就需要什么类型的exporter,比如说抓取mysql状态的数据,就需要mysqld_exporter。
Alertmanager:Prometheus server主要负责根据基于PromQL的告警规则分析数据,如果满足PromQL定义的规则,则会产生一条告警,并发送告警信息到Alertmanager,Alertmanager则是根据配置处理告警信息并发送。常见的接收方式有:电子邮件,webhook等。Alertmanager三种处理告警信息的方式:分组,抑制,静默。
Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。
Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
其工作流程大致如下:
Prometheus 服务器定期从配置好的 jobs 或者 exporters 中获取度量数据;或者接收来自推送网关发送过来的度量数据。
Prometheus 服务器在本地存储收集到的度量数据,并对这些数据进行聚合。
运行已定义好的 alert.rules,记录新的时间序列或者向告警管理器推送警报。
告警管理器根据配置文件,对接收到的警报进行处理,并通过email等途径发出告警。
Grafana等图形工具获取到监控数据,并以图形化的方式进行展示。
1.2 Grafana简介
Grafana是一个开源的度量分析与可视化套件,经常被用作基础设施的时间序列数据和应用程序分析的可视化。
Grafana支持许多不同的数据源,每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。
官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB。
每个数据源的查询语言和能力都是不同的,可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。
1.3 Exporter详解
随着Prometheus的流行,很多系统都已经自带了用于Prometheus监控的接口,例如etcd、Kubernetes、coreDNS等,所以这些系统可以直接被Prometheus所监控。但是有很多应用目前还没有提供用于Prometheus监控的接口,针对这这类应用Prometheus提出了Exporter的解决方案。
Exporter是一个采集被监控系统的监控数据,通过Prometheus监控规范对外提供数据的组件。简单来说,为了采集被监控系统的监控样本数据,需要安装一个程序,该程序对外暴露了一个用于获取当前监控样本数据的HTTP访问地址,这样的一个程序称为Exporter,Exporter的实例称为一个Target。Prometheus通过轮询的方式定时从Target中获取监控数据样本,并且存储在数据库当中。
从广义的层面上讲,任何遵循Prometheus数据格式 ,可对其提供监控指标的程序都可以称为Exporter。Prometheus官方和社区提供了非常丰富的Exporter,例如Node Exporter、HAProxy Exporter、MySQL Exporter、Redis Exporter和Rabbitmq Exporter等等。
这些Exporter主要通过被监控对象提供的监控相关的接口获取监控数据,通过例如以下几种方式获取到被监控对象的监控指标:
HTTP/HTTPs:例如Rabbitmq Exporter通过HTTPs接口获取监控数据。
TCP:例如Redis Exporter通过Redis提供的系统监控相关命令获取监控指标,MySQL Server Exporter通过MySQL开放的监控相关的表获取监控指标
本地文件:例如Node Exporter通过读取整个proc文件系统下的文件,得到整个系统的当前状态。
标准协议:例如IPMI Exporter通过IPMI协议获取硬件相关信息,并将这些信息的格式进行转化,输出为Prometheus能够识别的监控数据格式,从而扩大Prometheus的数据采集能力。
所有的Exporter程序都需要按照Prometheus的规范返回监控的样本数据。
1.3.1 Exporter运行方式
独立运行
以待会后面会使用的node_exporter为例,由于操作系统本身并不直接支持Prometheus,因此,只能通过一个独立运行的程序,从操作系统提供的相关接口将系统的状态参数转换为可供Prometheus读取的监控指标。
除了操作系统外,如Mysql、kafka、Redis等介质,都是通过这种方式实现的。这类Exporter承担了一个中间代理的角色。
应用集成
由于Prometheus项目的火热,目前有部分开源产品直接在代码层面使用Prometheus的Client Library,提供了在监控上的直接支持,如kubernetes、ETCD等产品。
这类产品自身提供对应的metrics接口,Prometheus可通过接口直接获取相关的系统指标数据。这种方式打破了监控的界限,应用程序本身做为一个Exporter提供功能。
1.3.2 常用的Exporter
下面表格是一些较常使用到的Exporter,内容覆盖了数据库、主机、HTTP、云平台等多个层面。
类型 |
监控介质 |
Exporter |
数据库 |
Mysql |
MySQL server exporter |
Elasticsearch |
Elasticsearch exporter |
|
Mongodb |
MongoDB exporter |
|
Redis |
Redis exporter |
|
PostgreSQL |
PostgreSQL exporter |
|
硬件/操作系统 |
主机/Linux |
Node exporter |
GPU |
NVIDIA GPU exporter |
|
Windows |
Windows exporter |
|
IPMI |
IPMI exporter |
|
网络设备 |
SNMP exporter |
|
消息队列 |
RabbitMQ |
RabbitMQ exporter |
Kafka |
Kafka exporter |
|
RocketMQ |
RocketMQ exporter |
|
HTTP |
Apache |
Apache exporter |
HAProxy |
HAProxy exporter |
|
Nginx |
Nginx exporter |
|
云平台 |
阿里云 |
Alibaba Cloudmonitor exporter |
AWS |
AWS CloudWatch exporter |
|
Azure |
Azure Monitor exporter |
|
华为云 |
Huawei Cloudeye exporter |
|
腾讯云 |
TencentCloud monitor exporter |
|
其他 |
探针检测 |
Blackbox exporter |
容器 |
cArdviso |
|
SSH |
SSH exporter |
除以上这些外,还有很多其他用途的Exporter,有兴趣的朋友可以自行查看官网:https://prometheus.io/docs/instrumenting/exporters/。文章来源:https://www.toymoban.com/news/detail-644703.html
1.4 Prometheus命令参数详解
Prometheus启动参数配置及释义文章来源地址https://www.toymoban.com/news/detail-644703.html
到了这里,关于二进制部署Prometheus + Grafana监控集群,及各exporter安装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!