您的位置:

Prometheus配置详解

一、基础配置

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规则模板、等等。通过使用模板,我们可以更好地组织和管理配置,提高灵活性和可维护性。