一个计算机技术爱好者与学习者

0%

Prometheus入门篇

1. Prometheus简介

Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud. Since its inception in 2012, many companies and organizations have adopted Prometheus, and the project has a very active developer and user community. It is now a standalone open source project and maintained independently of any company. To emphasize this, and to clarify the project’s governance structure, Prometheus joined the Cloud Native Computing Foundation in 2016 as the second hosted project, after Kubernetes.

Prometheus是在SoundCloud的基础上构建的开源系统监视和警报工具。自从2012年以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus在2016年加入了Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。

参考文档:

2. Prometheus的核心概念

Prometheus的核心概念包括:

  • 时间序列数据:Prometheus将数据以时间序列的形式存储,每个时间序列由一个唯一的指标名称和一组键值对(标签)标识。时间序列数据可以通过Prometheus的查询语言进行灵活查询。
  • 抓取机制:Prometheus通过HTTP协议定期抓取被监控应用的指标数据。被监控的应用需要暴露一个HTTP端点,Prometheus会定期访问该端点获取数据。
  • 数据模型:Prometheus使用一种多维数据模型来存储时间序列数据,每个时间序列都与一组标签相关联,这使得数据查询更加灵活和强大。
  • 查询语言(PromQL):Prometheus提供了一种强大的查询语言PromQL,用户可以利用它对时间序列数据进行复杂的查询和计算。
  • 警报管理:Prometheus支持通过Alertmanager进行警报管理,用户可以根据自定义的规则设置警报,并通过多种渠道(如电子邮件、Slack等)发送通知。

3. Prometheus的核心组件

3.1. Prometheus Server

Prometheus Server是整个监控系统的核心组件。它负责定期从配置的目标中拉取(pull)监控数据,并将数据存储在本地的时间序列数据库中。Prometheus Server还提供了一种灵活的查询语言PromQL,用于查询和分析监控数据。

3.2. Exporters

Exporters是一组工具,用于将不支持直接暴露监控指标的应用程序或服务的指标数据转换为Prometheus可以抓取的格式。常见的Exporter包括Node Exporter(用于收集机器级别指标)、MySQL Exporter(用于收集MySQL数据库指标)等。

3.3. PushGateway

Prometheus采集数据是用的Pull方式,Prometheus配置文件设置的X秒就是采集数据的频率。
但是有些数据并不适合这样的方式,比如短期作业或批处理作业生成的指标数据。由于这些作业是short-lived的,如果采用Pull的模式,可能在Prometheus采集之前,作业已经执行结束,最终采集不到数据。

对这样的数据可以使用PushGateway服务,PushGateway相当于一个暂存器,用于接收由短期作业或批处理作业生成的指标数据,并允许Prometheus Server从PushGateway中拉取这些数据。

如果没有短期作业或者批处理作业,那么我们并不需要PushGateway,因此PushGateway是一个可选的组件。

3.4. Alertmanager

Alertmanager负责处理来自Prometheus Server的告警。它可以对告警进行去重、分组和路由,并通过电子邮件、Slack、PagerDuty、Webhook等方式发送通知。

因为Alertmanager支持的通知方式是有限的,所以如果想要支持微信、钉钉、飞书等更多平台,我们还需要借助Webhook实现一个消息中转服务。该消息中转服务能够把Prometheus AlertManager发出的WebHook请求,转成微信、钉钉、飞书等平台可以接收的请求。

在实际开发和生产环境场景中,我们并不需要自己来实现消息中转服务,github上有很多开源的消息中转服务,推荐 PrometheusAlert 和 prometheus-webhook-dingtalk 。

消息中转服务的安装配置方法,请参考文档:

4. Prometheus的工作原理

1、Prometheus Server根据配置文件中定义的监控目标,定期通过HTTP协议拉取(pull)监控数据。

2、对于直接支持Prometheus的监控目标,Prometheus Server可以直接从目标获取数据。对于不支持的目标,需要使用Exporter将数据转换为Prometheus可以识别的格式。

3、Prometheus Server将拉取到的监控数据存储在本地的时间序列数据库中。

4、用户可以使用PromQL查询语言对存储的监控数据进行分析和可视化。Prometheus Server内置了一个Web UI,也可以与Grafana等可视化工具集成。

5、Prometheus Server会根据定义的告警规则,持续检查监控数据,一旦满足告警条件,就会向Alertmanager发送告警。Alertmanager负责对告警进行处理和通知。

5. 安装Prometheus

1、下载Prometheus
访问Prometheus官网下载最新版本的Prometheus。

2、解压缩文件

1
tar xvfz prometheus-*.tar.gz

3、启动Prometheus
进入解压后的目录,使用以下命令启动Prometheus

1
./prometheus --config.file=prometheus.yml

4、访问Prometheus界面
打开浏览器,访问http://localhost:9090,即可进入Prometheus的Web界面。

更多安装方法,请参考文档:

6. 配置Prometheus

Prometheus的配置文件prometheus.yml用于定义抓取目标和其他设置。以下是一个基本的配置示例:

1
2
3
4
5
6
7
global:
scrape_interval: 15s # 默认抓取间隔

scrape_configs:
- job_name: 'my_app'
static_configs:
- targets: ['localhost:8080'] # 被监控应用的地址

在这个示例中,Prometheus将每15秒抓取一次位于localhost:8080的应用的指标数据。

Prometheus找到抓取目标的途径,被称为服务发现方法。上面的例子中,直接配置抓取目标地址,是服务发现方法中的静态配置法。静态配置法配置简单,但是灵活性差。
更多服务发现方法,请参考文档《Prometheus服务发现》

7. 使用PromQL查询数据

PromQL是Prometheus的查询语言,用户可以使用它对存储的时间序列数据进行查询。以下是一些基本的PromQL查询示例:

1、获取所有指标

1
{__name__=~".+"}

2、计算某个指标的平均值

1
avg(my_metric)

3、获取某个标签的指标数据

1
my_metric{job="my_app"}

更多内容参考文档:《Prometheus查询语言:PromQL》

8. 可视化数据

Prometheus可以与多种可视化工具集成,最常用的可视化工具是Grafana。通过Grafana,用户可以创建丰富的仪表板来展示Prometheus收集的数据。
Grafana的安装配置方法,参考文档《使用Docker安装配置Grafana》

9. Alertmanager和Grafana Alerting

grafana alerting也可以配置告警,它和alertmanager有什么区别?
答:它们是互为替代的关系,grafana alerting更加简单,alertmanager更加强大。

grafana alerting优点:
1)支持多个数据源。整合各种数据源发出告警,Prometheus只是数据源之一。
2)使用友好。可视化和告警放在一个地方,所见即所得,非常友好。

alertmanager优点:
1)不依赖dashboard。grafana alerting需要dashboard,alertmanager不需要dashboard,只要编写PromQL就可以了。
2)更加强大。grafana alerting只支持单个指标的简单阈值告警,而alertmanager通过PromQL支持更复杂的告警,还支持聚合、分组、删除重复等。
3)高可用。alertmanager可以非常容易实现高可用。

参考文档:

10. 后记

Prometheus 是CNCF基金会继K8S后第二个毕业项目,已经成为云原生监控领域的事实标准。
但是,Prometheus也有一些缺陷,比如数据量大的时候需要拆分集群,聚合数据很难数据去重,可用性较低等。因此出现了Thanos,能够解决Prometheus的很多问题,详情参考 Thanos官网分布式 Promethues 之 Thanos

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-prometheus-start/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~