Prometheus入门指南
声明
本文是个人对Getting started | Prometheus的翻译、整理和小部分扩展,翻译内容基于Prometheus版本: 2.43
本篇翻译的目的是为了帮助更多的读者了解Prometheus官方文档中的内容,同时为中文用户提供更便利地阅读体验
Prometheus的国际化工作在发文截止前(2023-04-24 11:22:20)还处于讨论阶段,所以我没有向官方提交PR,详情请看https://github.com/prometheus/docs/issues/2151。
如有任何版权问题或翻译错误,请您通过电子邮件联系我:956465331@qq.com或:ufovsmba@gmail.com。
概述
什么是Prometheus
Prometheus(普罗米修斯)是有个开源监控系统和告警开发工具最开始建立在SoundCloud.。它最开始创建于2012年,很多公司和组织已经开始使用Prometheus,而且项目拥有非常活跃的开发者和使用者社区。它现在是独立开源的项目和不依赖任何公司维护。为了强调和澄清项目的治理结构,Prometheus在2016年参加了 Cloud Native Computing Foundation,在Kubernetes之后成为第二个托管项目。
Prometheus收集它自己的metrics(指标)作为时间序列数据存储,即metrics信息和timestamp(时间戳)一起储存,以及称为labels(标签)的可选的键值对。
有关Prometheus的更详细概述,请参阅媒体部分链接的资源。
快速开始
这个指南是一个“Hello World”风格的教程用于展示如何安装,配置和使用一个简单的Prometheus实例。你将在本地下载和运行Prometheus,配置它去scrape(抓取)它自己和一个简单应用程序的数据,然后用查询,规则和图表来使用收集到的时间序列数据
scrape是Prometheus里面从目标服务器(如应用程序、消息代理等)收集指标数据的操作
下载Prometheus
下载地址:Download the latest release
Linux系统可以运行下列指令解压并进入Prometheus文件夹:
1 | tar xvfz prometheus-*.tar.gz |
window用户建议直接可视化操作
在启动Prometheus前,让我们先对它进行配置
配置Prometheus监控自身
Prometheus通过scrap(抓取)Http endpoints的方式从targets(目标)上收集metrics(指标)。因为Prometheus用同样的方式暴露它自己的数据,所以它也可以scrap和监控它自己的健康。尽管仅收集关于自身数据的Prometheus服务器并不是非常有用,但它是一个很好的起始示例。
保存下面的Prometheus基本配置到prometheus.yml
文件中
1 | global: |
有关配置选项的完整规范,请参阅官方配置文档
启动Prometheus
为了使用你刚刚的配置的配置文件来启动Prometheus,我们需要先进入包含Prometheus二进制文件的目录,然后运行下面的指令
1 | # Start Prometheus. |
Prometheus应该成功启动。你应该在localhost:9090浏览关于他本身状态的页面。给它几秒去从它自己的Http metrics endpoint中收集他自己的数据
使用表达式浏览器(Expression Browser)
让我们来探索一下Prometheus收集到的关于它自己的数据。为了是使用Prometheus内置的表达式浏览器,导航到http://localhost:9090/graph中,选择”Table“视图
从localhost:9090/metrics中可以看出,Prometheus 导出的关于其自身的一个命名为prometheus_target_interval_length_seconds
(抓取目标之间的实际时间间隔)的metric。请在表达式控制台中输入以下内容,然后单击“Execute”
1 | prometheus_target_interval_length_seconds |
这应该会返回一些不同时间序列(以及各自的最新记录值),每一个metric都叫prometheus_target_interval_length_seconds
,但是有着不同的标签(label)。这些标签指定不同的延迟百分位数和target组的时间间隔
如果我们只对第99个百分位数延迟感兴趣,我们可以使用下面的这个查询:
1 | prometheus_target_interval_length_seconds{quantile="0.99"} |
为了统计返回的时间序列的数量,你可以写:
1 | count(prometheus_target_interval_length_seconds) |
有关表达式语言的更多信息,请参阅表达式语言文档
使用图表界面
为了绘制表达式图表,导航到 http://localhost:9090/graph然后选择"Graph"选项卡
例如,输入下面的表达式去绘制Prometheus中自我抓取的每一秒的创建块的速率的图表
1 | rate(prometheus_tsdb_head_chunks_created_total[1m]) |
你可以尝试使用图表的范围参数和其他的设定
建立一些示例目标
让我们添加一些用于Prometheus抓取的额外的目标。
接下来,Node Exporter被用于作为示例目标,下载地址:Download | Prometheus
1 | tar -xzvf node_exporter-*.*.tar.gz |
现在你应该可以通过这些地址访问到这三个示例程序: http://localhost:8080/metrics, http://localhost:8081/metrics, 和 http://localhost:8082/metrics.
Window系统虽然不被Node Exporter支持,但使用Window exporter可以达到类似的效果
更多关于Node Exporter的信息,请参阅Node Exporter说明
配置Prometheus监控示例目标
现在我们将配置Prometheus去爬取这些新的目标。让我们把这三个endpoints分组到一个名为node
的job下面。我们将想象第1第2个endpoints是生产目标,但是第三个代表一个金丝雀实例。为了在Prometheus中构建模型,我们可以在一个job里面添加几个的endpoints的分组,给不同的目标组别添加额外的标签(label)。在这里例子中,我们可以添加group="production"
标签在第一组目标,添加group="canary"
在第二组。
为了实现这一点,在你的prometheus.yml
文件中添加下面的job定义到scrape_configs
部分,然后重启Prometheus实例:
1 | scrape_configs: |
打开表达式浏览器,确认Prometheus现在是否有关于这些示例endpoint的时间序列信息,例如node_cpu_seconds_total
。
配置规则将抓取的数据聚合到新的时间序列中
尽管在我们的示例中并不有问题,但即席计算(ad-hoc)实时,聚合了上千条时间序列的查询会变慢。为了更高的效率,Prometheus可以通过配置recording rules(记录规则)来提前记录表达式到一个持久化的时间序列里面。假设我们感兴趣于记录在窗口每5分钟内测量的所有cpu的每一个实例每秒的cpu时间速率(node_cpu_seconds_total
) 的平均值(但是提保留job
, instance
和mode
维度)。我们可以这样写:
1 | avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m])) |
让我们尝试绘制这个表达式的图表
为了记录这个新表达式的产生的时间序列到一个名为job_instance_mode:node_cpu_seconds:avg_rate5m
的新metric中,我们创建一个文件带有下面的记录规则,然后另存为prometheus.rules.yml
:
1 | groups: |
为了使Prometheus接收这个新规则,添加一个rule_files
声明在你的 prometheus.yml
中。现在整个配置文件一个看起来像这样:
1 | global: |
用新配置重启Prometheus,然后通过表达式浏览器查询或绘制图表来验证metric名为job_instance_mode:node_cpu_seconds:avg_rate5m
的新时间序列是否可用。