Prometheus 学习笔记
Prometheus是一个开源的系统监控和告警工具包,它由前Google工程师在2012年于SoundCloud开始研发,并于2016年加入Cloud Native Computing Foundation(CNCF)。Prometheus以其强大的多维数据模型、灵活的查询语言PromQL、不依赖分布式存储、支持通过HTTP协议拉取时间序列数据、以及通过服务发现或静态配置来发现目标服务对象等特点而受到广泛采用。
Prometheus的主要组件包括:
- Prometheus服务器:负责抓取和存储时间序列数据。
- 客户端库:用于在应用程序代码中添加监控指标。
- 推送网关:用于支持短期任务的时间序列数据推送。
- Exporter:用于各种服务(如HAProxy、StatsD、Graphite等)的监控数据导出。
- Alertmanager:用于处理告警。
- 其他支持工具:如Grafana等,用于数据可视化。
Prometheus的架构设计允许它直接从监控目标拉取监控指标,或者通过推送网关间接获取。它在本地存储所有抓取到的样本数据,并可以执行规则来聚合数据或生成告警。Prometheus适用于记录纯数字的时间序列数据,适合机器监控和高度动态的服务导向架构监控,特别是在微服务架构中,其对多维数据收集和查询的支持是一个显著优势。
Prometheus的安装和配置涉及以下步骤:
- 下载并安装Prometheus服务器及其组件。
- 配置Prometheus服务器,包括抓取间隔、告警配置、规则文件和数据源。
- 启动Prometheus服务器并确保它能够从配置的数据源抓取数据。
- 使用Grafana或其他可视化工具连接到Prometheus服务器,以展示和监控数据。
Prometheus的监控系统可以提高应用的可用性和可靠性,减少故障,进行容量规划和性能优化。它适用于多种监控场景,包括服务器资源监控、数据库监控、消息队列监控和应用监控等。通过Prometheus,运维团队可以快速定位问题,减少故障率,进行有效的容量规划和性能调优。
下载并安装Prometheus服务器及其组件
下载并安装Prometheus服务器及其组件的步骤通常如下:
-
下载Prometheus:
- 访问Prometheus的官方网站下载页面:Prometheus Downloads
- 选择适合你操作系统的版本进行下载。V哥下载的是压缩包格式(
.tar.gz
)。
-
解压下载的文件:
- 解压压缩包。比如我是在Linux上,可以使用以下命令:
tar -xvzf prometheus-*.tar.gz
- 移动二进制文件到PATH中:
- 为了能够从任何位置运行Prometheus,我们需要将Prometheus的二进制文件移动到你的系统PATH中。例如:
sudo mv prometheus-*/prometheus /usr/local/bin/
sudo mv prometheus-*/promtool /usr/local/bin/
- 配置Prometheus:
- Prometheus的配置文件通常命名为
prometheus.yml
,位于Prometheus二进制文件所在目录的config
子目录中。 - 接下来我们需要编辑这个配置文件,指定数据存储位置、抓取间隔以及要监控的目标:
- Prometheus的配置文件通常命名为
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
- 这个配置文件定义了两个监控任务:一个是监控Prometheus自身的指标(通常用于测试),另一个是监控节点指标。
- 启动Prometheus服务器:
- 在Prometheus的安装目录中,运行以下命令来启动Prometheus服务器:
./prometheus --config.file=/path/to/prometheus.yml
- 你可以通过Web浏览器访问
http://localhost:9090
来查看Prometheus的Web界面。
- 安装和配置Exporters:
- Exporter是用于抓取特定服务或应用程序指标的代理。例如,
node_exporter
用于抓取系统级别的指标。 - 根据需要下载并运行相应的Exporter。例如,对于
node_exporter
,你可以在Linux上使用以下命令启动它:
- Exporter是用于抓取特定服务或应用程序指标的代理。例如,
./node_exporter --web.listen-address=":9100"
- 确保在Prometheus配置文件中添加了Exporter的监控目标。
-
安装Alertmanager(可选):
- Alertmanager是Prometheus的告警处理组件。
- 从Prometheus的下载页面下载Alertmanager,解压并按照Prometheus的类似步骤启动它。
- 配置Alertmanager以接收Prometheus的告警并定义如何处理这些告警。
-
安装Grafana(可选):
- Grafana是一个开源的分析和监控平台,可以与Prometheus集成,用于可视化监控数据。
- 从Grafana的官方网站下载并安装Grafana。
- 在Grafana中添加Prometheus作为数据源,然后创建仪表板来展示监控数据。
请注意,这些步骤可能会根据你的操作系统和Prometheus的版本有所不同。始终参考最新的官方文档以获取最准确的安装指南。
配置Prometheus服务器
配置Prometheus服务器涉及编辑Prometheus的配置文件,通常是prometheus.yml
。以下是配置Prometheus服务器的步骤,包括抓取间隔、告警配置、规则文件和数据源。
- 配置抓取间隔:
在prometheus.yml
文件中,你可以设置全局的抓取间隔,这将应用于所有抓取任务,除非在特定任务中被覆盖。例如:
global:
scrape_interval: 15s # 全局抓取间隔设置为15秒
evaluation_interval: 15s # 规则评估间隔也设置为15秒
- 配置告警:
告警配置通常在Prometheus的配置文件中定义,但具体的告警规则是在单独的规则文件中定义的。首先,你需要在prometheus.yml
中指定告警管理器(Alertmanager)的配置:
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093 # Alertmanager的监听地址和端口
然后,创建告警规则文件(例如alert.rules
),并将其引用在prometheus.yml
中:
rule_files:
- "alert.rules"
- 定义告警规则:
在告警规则文件alert.rules
中,你可以定义具体的告警条件。例如:
groups:
- name: example
rules:
- alert: HighRequestLatency
expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
for: 10m
labels:
severity: page
annotations:
summary: High request latency
-
配置规则文件:
除了告警规则,你还可以在规则文件中定义记录规则(recording rules),这些规则用于在Prometheus中创建新的时序数据,例如计算平均值或百分位数。这些规则也会在prometheus.yml
中被引用。 -
配置数据源:
在prometheus.yml
中,你需要定义数据源,即Prometheus需要抓取的目标。这些目标可以是Exporter、服务发现机制或其他Prometheus服务器。以下是一些示例配置:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100'] # 假设node_exporter运行在9100端口
- job_name: 'app'
dns_sd_configs:
- names: ['app.service.consul']
port: 80
-
高级配置:
你还可以配置其他高级选项,如重写规则(relabel_configs)、TLS配置、代理配置等。 -
启动Prometheus:
配置完成后,重新启动Prometheus服务器以应用新的配置。如果你使用的是二进制方式安装的Prometheus,可以使用以下命令启动:
./prometheus --config.file=prometheus.yml --web.enable-admin-api --web.enable-lifecycle
--web.enable-admin-api
和--web.enable-lifecycle
是可选的,它们允许你通过HTTP API来管理Prometheus(如停止接收数据、获取当前状态等)。
- 验证配置:
启动Prometheus后,通过访问Prometheus的Web界面(通常是http://localhost:9090
)来验证配置是否正确。你可以在“Status” > “Targets”页面查看抓取目标的状态,确保所有目标都是健康的。
请记得,配置文件中的路径和端口需要根据你的实际部署环境进行调整。此外,Prometheus的配置非常灵活,你可以根据需要进行详细配置。始终参考最新的Prometheus官方文档以获取最准确的配置指导。
启动Prometheus服务器
要启动Prometheus服务器并确保它能够从配置的数据源抓取数据,你需要按照以下步骤操作:
-
准备配置文件:
确保你已经根据之前的指导创建并配置了prometheus.yml
文件,以及其他可能的配置文件,如告警规则文件alert.rules
。 -
启动Prometheus:
- 打开终端或命令行界面。
- 导航到包含Prometheus二进制文件的目录。
- 运行以下命令来启动Prometheus服务器:
./prometheus --config.file=/path/to/prometheus.yml
确保将/path/to/prometheus.yml
替换为你的配置文件的实际路径。
-
检查Prometheus状态:
- 访问Prometheus的Web UI,通常是
http://localhost:9090
。 - 转到“Status” > “Targets”页面,查看Prometheus是否成功从配置的数据源抓取数据。健康的抓取目标会显示绿色的状态指示器。
- 访问Prometheus的Web UI,通常是
-
检查日志输出:
- 查看Prometheus的日志输出,以确保没有错误信息。你可以在命令行界面查看启动Prometheus时的直接输出,或者查看Prometheus的日志文件(如果你将日志输出重定向到了文件)。
-
验证告警和规则:
- 如果你配置了告警和规则文件,转到“Alerts”页面查看是否有任何活跃的告警。
- 转到“Rules”页面查看所有规则的状态,确保它们都处于“Firing”状态。
-
检查数据抓取:
- 在Prometheus的Web UI中,你可以尝试执行一些基本的查询,如
up
,来检查Prometheus是否能够从目标获取数据。 - 你也可以使用Prometheus的表达式浏览器来测试更复杂的查询。
- 在Prometheus的Web UI中,你可以尝试执行一些基本的查询,如
-
确保长期运行:
- 为了确保Prometheus长期运行,你可能需要将其配置为后台服务或使用类似
systemd
的系统服务管理器来管理Prometheus进程。
- 为了确保Prometheus长期运行,你可能需要将其配置为后台服务或使用类似
-
配置自动重启:
- 为了确保Prometheus在崩溃或重启后自动启动,你应该设置一个监控脚本或使用系统服务管理器(如
systemd
、supervisord
等)。
- 为了确保Prometheus在崩溃或重启后自动启动,你应该设置一个监控脚本或使用系统服务管理器(如
-
安全考虑:
- 如果Prometheus服务器可以从互联网访问,确保配置适当的安全措施,如使用HTTPS、访问控制和认证。
-
监控Prometheus本身:
- 监控Prometheus服务器本身的健康状况也很重要。你可以使用
--web.enable-admin-api
标志来启用管理API,这允许你检查Prometheus的状态和性能指标。
- 监控Prometheus服务器本身的健康状况也很重要。你可以使用
如果你遇到任何问题,比如Prometheus无法从目标抓取数据,检查以下几点:
- 确保Prometheus配置文件中的抓取目标地址和端口是正确的。
- 确保目标服务已经启动并且正在监听Prometheus配置的端口。
- 检查防火墙设置,确保Prometheus服务器可以访问目标端口。
- 查看Prometheus的日志输出,寻找可能的错误信息或警告。
使用Grafana连接到Prometheus服务器
Grafana是一个流行的开源分析和监控解决方案,它支持连接到多种数据源,包括Prometheus。以下是使用Grafana连接到Prometheus并展示监控数据的步骤:
-
安装Grafana:
- 访问Grafana的官方网站下载页面,选择适合你操作系统的版本进行下载并安装。
- 或者,如果你使用的是包管理器(如APT for Ubuntu或Homebrew for macOS),可以直接通过包管理器安装Grafana。
-
启动Grafana:
- 根据你的安装方式,启动Grafana。如果你使用的是Linux,可能需要使用命令
sudo service grafana-server start
或sudo systemctl start grafana-server
。
- 根据你的安装方式,启动Grafana。如果你使用的是Linux,可能需要使用命令
-
访问Grafana:
- 在Web浏览器中访问Grafana的Web界面,默认地址通常是
http://localhost:3000
。
- 在Web浏览器中访问Grafana的Web界面,默认地址通常是
-
配置数据源:
- 在Grafana的侧边栏菜单中,点击“Configuration”(齿轮图标)> “Data Sources” > “Add data source”。
- 选择“Prometheus”作为数据源类型。
- 在配置页面,输入你的Prometheus服务器的URL,例如
http://localhost:9090
。 - 填写其他必要的配置信息,如访问凭据(如果Prometheus设置了认证)。
- 点击“Save & Test”来测试连接是否成功。
-
创建仪表盘:
- 在Grafana侧边栏菜单中,点击“Create” > “Dashboard”。
- 你可以开始创建新的仪表盘或导入现有的JSON格式的仪表盘。
-
添加面板:
- 在仪表盘编辑模式下,点击“Add query”或“Add panel”来添加一个新的面板。
- 选择你的Prometheus数据源。
- 使用PromQL(Prometheus Query Language)编写查询来获取你想要展示的数据。例如,你可以查询
up
来检查所有监控目标的状态,或者查询rate(http_requests_total[5m])
来获取过去5分钟内HTTP请求的速率。
-
设置面板选项:
- 根据需要设置面板的类型(如图表、表格、折线图等)。
- 调整面板的样式和布局,包括颜色、大小、图例等。
-
保存并查看面板:
- 完成面板设置后,点击“Save”保存你的面板。
- 退出编辑模式,查看面板展示的数据。
Grafana也支持基于Prometheus数据源的告警。你可以在面板设置中定义告警规则,并配置通知通道(如电子邮件、Slack等)。Grafana提供了丰富的功能,包括变量、模板、注释等。花时间探索这些功能,以充分利用Grafana的潜力。