一,各组件与其作用
-
Prometheus Server:Prometheus Server 是核心组件,负责采集、存储和查询监控指标数据。它通过定期的抓取任务从配置的目标(如服务、节点等)中获取指标数据,并将其存储在本地时间序列数据库中。
-
Exporters:Exporters 是用于将非 Prometheus 格式的指标数据暴露给 Prometheus Server 的中间软件。它们可以直接与被监控的应用程序或服务进行通信,并将其指标数据转换为 Prometheus 可以理解的格式。Prometheus 社区提供了许多官方和第三方的 Exporters,用来监控各种不同类型的系统和服务。
-
Alertmanager:Alertmanager 负责处理和路由 Prometheus Server 生成的警报信息。它能够对警报进行分组、静默处理、去重、以及发送通知给相关人员或系统。Alertmanager 还支持集成各种通知渠道,如电子邮件、Slack、PagerDuty 等。
-
Pushgateway:Pushgateway 用于支持那些无法直接被 Prometheus 服务器抓取的短期工作任务(如批处理任务)。这些任务可以通过 Pushgateway 主动将指标数据推送到 Pushgateway,然后 Prometheus 服务器轮询 Pushgateway 获取这些指标数据。
-
Grafana:虽然不是 Prometheus 的官方组件,但 Grafana 是一个流行的开源数据可视化工具,经常与 Prometheus 结合使用。Grafana 可以通过查询 Prometheus 的指标数据,创建图表、仪表盘和警报规则,并展示监控数据的漂亮视觉效果。
二,prometheus各配置文件详解
1,
prometheus.yml
是 Prometheus 监控系统的配置文件,它定义了 Prometheus 的各种配置选项和监控目标
global: scrape_interval: <duration> evaluation_interval: <duration> external_labels: <label_name>: <label_value>
global
部分定义了全局配置选项。
scrape_interval
指定了采集数据的时间间隔,以持续时间格式(例如:15s、1m)表示。
evaluation_interval
指定了评估规则的时间间隔,以持续时间格式表示。
external_labels
允许添加一组键值对作为外部标签,这些标签将应用于所有指标样本数据。
scrape_configs: - job_name: <job_name> scrape_interval: <duration> static_configs: - targets: ['<target1>', '<target2>', ...]
scrape_configs
定义了要监控的目标(例如服务或节点)以及相关的配置选项。
job_name
表示当前监控任务的名称。
scrape_interval
指定了该监控任务的采集时间间隔。
static_configs
是一个列表,其中可以列出一个或多个静态配置。
targets
指定了要采集数据的目标的地址,可以是 IP 地址、主机名或其他形式的标识符
其他:
rule_files
:用于加载 Prometheus 规则文件的配置选项。
alerting
:用于定义警报规则和警报通知配置的部分。
scrape_timeout
:定义了每个监控任务的超时时间。
2,rules定义报警文件模板
模板示例:
groups: - name: node-up rules: - alert: node-up expr: up == 0 for: 10s labels: severity: warning team: node annotations: summary: "{{ $labels.instance }}"
name: node-up
: 这是警报组的名称,用于标识和区分不同的警报组。
rules
: 这是规则列表,表示属于该警报组的规则。
alert: node-up
: 这是规则的名称,用于标识和描述该规则。
expr: up == 0
: 这是规则的表达式,它定义了警报被触发的条件。在这个示例中,表达式 up == 0
表示如果指标 up
的值等于 0,即节点不可用,则触发警报。
for: 10s
: 这是规则的持续时间,表示警报必须持续多长时间才会触发。在这个示例中,警报将在连续 10 秒内满足表达式条件时触发。
labels
: 这是警报的标签,用于对警报进行分类和标识。在这个示例中,severity: warning
表示警报的严重程度为警告级别,team: node
表示负责处理该警报的团队是 "node"。
annotations
: 这是警报的注释,用于提供关于警报的额外信息。在这个示例中,summary: "{{ $labels.instance }}"
表示警报的摘要信息,其中 {{ $labels.instance }}
会被实际的标签值替换。
通过这个规则,当节点不可用时(up == 0
),持续 10 秒后将触发一条警报,且该警报的严重程度为警告级别。警报的注释中提供了关于警报的摘要信息,其中的 {{ $labels.instance }}
会根据实际的标签值进行替换。
3,Alertmanager 是 Prometheus 的一个组件,用于处理和路由警报信息。在 Alertmanager 中,使用 alertmanager.yml
配置文件来定义警报接收者和路由方式。
alertmanager.yml
的样例配置:
global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 12h routes: - match: severity: critical receiver: pagerduty - match: severity: warning receiver: email-team receivers: - name: 'email-team' email_configs: - to: 'support@example.com' from: 'alertmanager@example.com' smarthost: mail.example.com:25 auth_username: 'alertmanager' auth_password: 'password' - name: 'pagerduty' pagerduty_configs: - service_key: <service-key> inhibit_rules: - source_match: severity: 'critical' target_match_re: service: '.*' equal: ['alertname', 'dev', 'instance']
全局配置:global
部分定义了 Alertmanager 全局设置,包括运行参数、超时设置、邮件或 PagerDuty 等通知渠道的默认配置等。这些配置选项将适用于所有警报规则及路由策略。
邮件设置: receivers
部分定义了警报接收者的信息,包括接收者的名称、邮件地址、邮件主题等。可以为每个接收者指定不同的通知方式,如电子邮件、Slack 等。
路由策略:route
部分定义了警报路由策略。可以根据警报标签和值的匹配情况,选择特定的接收者或群组,或通过 webhook 将警报发送到其他系统。路由策略支持多级匹配。
其中,警报将根据其 severity
标签的值匹配不同的路由策略,发送到 pagerduty 或 邮件团队(email-team)。Alertmanager 还支持对短时间内连续触发的警报进行抑制(inhibit),以避免过多的警报信息干扰用户。
4,Node Exporter 是一个用于监控主机硬件和操作系统指标的 Prometheus Exporter。它可以在被监控的主机上运行,并提供了一组默认的监控指标,如 CPU 使用率、内存使用情况、磁盘空间、网络流量等。(非必要组件)
Node Exporter 可以通过以下步骤进行安装和配置:
-
下载 Node Exporter:可以从 Prometheus 的官方网站或 GitHub 上下载适用于你的操作系统的 Node Exporter 安装包。根据操作系统的不同,可选择 tarball 归档文件、二进制可执行文件或软件包进行安装。
-
安装和启动 Node Exporter:将下载的 Node Exporter 安装包解压缩并将其拷贝到目标主机上。然后使用提供的脚本或命令以特定的方式启动 Node Exporter。通常,Node Exporter 会监听在默认的端口 9100 上。
-
配置 Prometheus:在 Prometheus 的配置文件
prometheus.yml
中添加一个新的scrape_config
部分,以告知 Prometheus 去抓取 Node Exporter 的指标。示例如下:
scrape_configs: - job_name: 'node' static_configs: - targets: ['<node-exporter-ip>:9100']
在上面的示例中,我们创建了一个名为 "node" 的作业,并指定了 Node Exporter 的 IP 地址和端口作为抓取目标。
-
重启 Prometheus:在完成配置后,重新启动 Prometheus 以使其加载新的配置文件。
-
访问指标:现在可以通过 Prometheus 的 Web UI 或通过 PromQL 查询语言访问 Node Exporter 提供的指标。默认情况下,Prometheus Web UI 位于
http://<prometheus-ip>:9090
。
Node Exporter 提供了丰富的主机监控指标,你可以使用这些指标来了解主机的性能和健康状况。你还可以自定义和扩展 Node Exporter,以收集额外的指标,满足特定需求。