一、基础配置
1、在Prometheus的配置文件中,需要定义scrape_configs字段,用于定义需要监控的目标。比如,我们要监控Node Exporter的metrics,可以这样配置:
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
以上配置指定了一个任务(node_exporter),并定义了一个目标(localhost:9100)。这个目标需要在Node Exporter启动后才能正常监控。
2、还可以通过relabel_configs字段对原始采集的metrics进行处理,比如修改Labels,过滤数据,等等。比如,修改Labels的配置如下:
relabel_configs:
- source_labels: [__address__]
target_label: instance
replacement: my_custom_instance
以上配置指定了一个规则,将源标签__address__替换为新标签instance,将值替换为my_custom_instance。
二、服务发现
1、Prometheus支持许多服务发现方式,如Consul、Kubernetes、AWS、EC2、等等。下面是一个使用Kubernetes进行服务发现的配置示例:
scrape_configs:
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_container_port_number]
regex: '.*'
action: keep
以上配置指定了一个任务(kubernetes-pods),使用Kubernetes进行服务发现。Prometheus会自动从Kubernetes API中获取Pod信息并监控其metrics。relabel_configs中的规则用于保留所有container port的metrics。
2、Prometheus还可以通过file_sd_configs字段读取JSON文件进行服务发现。比如,我们有一个名为targets.json的JSON文件,内容如下:
[
{"targets":["localhost:9100"],"labels":{"job":"node_exporter"}},
{"targets":["localhost:8080"],"labels":{"job":"my_http_server"}}
]
我们可以通过以下配置读取该文件:
scrape_configs:
- job_name: 'file_sd'
file_sd_configs:
- files:
- 'targets.json'
以上配置指定了一个任务(file_sd),通过file_sd_configs从targets.json文件读取目标列表。
三、告警配置
1、首先需要在Prometheus的初始配置中定义告警接收方式,如邮件、Slack、PagerDuty等。比如,我们要使用email作为告警方式,可以这样配置:
alerting:
alertmanagers:
- static_configs:
- targets:
- 'localhost:9093'
route:
receiver: 'team-emails'
routes:
- match:
severity: critical
receiver: 'team-emails'
以上配置定义了一个alertmanager,以及一个receiver用于接收告警。还通过route指定了当严重程度(severity)为critical时发送给team-emails接收者。
2、在Prometheus中定义告警规则。比如,我们要监控Node Exporter的CPU使用率,当CPU使用率超过80%时触发告警,可以这样配置:
groups:
- name: example
rules:
- alert: HighCpuUsage
expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "CPU usage has exceeded 80% over the last 5 minutes."
以上配置定义了一个规则,当CPU使用率超过80%时触发告警。在告警触发后,Prometheus会将告警发送给alertmanager。在alertmanager配置中定义了team-emails接收者,因此会将告警发送给该接收者。
四、模板配置
1、Prometheus支持模板配置,用于统一管理多个任务的配置。比如,我们要对多个任务定义相同的relabel_configs规则,可以使用模板。定义模板的示例配置如下:
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
- job_name: 'my_http_server'
static_configs:
- targets: ['localhost:8080']
- name: 'my_relabel_template'
source_labels: [__address__]
target_label: instance
replacement: my_custom_instance
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
relabel_configs:
- ${my_relabel_template}
- job_name: 'my_http_server'
static_configs:
- targets: ['localhost:8080']
relabel_configs:
- ${my_relabel_template}
以上配置定义了一个名为my_relabel_template的模板,用于处理需要采集的metrics。在任务配置中,使用${my_relabel_template}引用该模板,实现了多个任务共享同一配置模板。
2、除了relabel_configs,Prometheus还支持其他模板类型,如scrape_configs模板、alerting规则模板、等等。通过使用模板,我们可以更好地组织和管理配置,提高灵活性和可维护性。