Prometheus 配置和示例

发布时间: 更新时间: 总字数:874 阅读时间:2m 作者: IP上海 分享 网址

Prometheus 配置文件 prometheus.yml 说明和示例

Global 配置

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # 日志文件
  query_log_file: "abc.log"
  # 告警中将会产生对应的tag
  external_labels:
    env: test

alerting:
  alertmanagers:
  basic_auth:
  bearer_token:
  bearer_token_file:


scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'prometheus'
    # basic_auth 认证
    basic_auth:
      username: ""
      password: ""
    basic_auth_file: ""
    bearer_token: "<secret>"
    # service discovery configurations
    dns_sd_configs:
      - ...
    openstack_sd_configs:
    kubernetes_sd_configs:
    file_sd_configs:
    # 静态资源发现
    static_configs:
    - targets: ['localhost:9090']
    # 自动添加 labels
    labels:
    # 修改 labels
    relabel_configs:
    # 每次抓取的数量
    sample_limit:

规则和告警

rules 配置

规则分类:

  • 告警规则(alert rule) 产生告警

  • 记录规则(recording rule) 生成新的时间序列(可基于此序列生成告警),避免实时查询性能慢问题

  • prometheus.yml 中配置 rule

$ cat /usr/local/prometheus/prometheus.yml
...
rule_files: # <file glob>
  - "rules/*.yml"
...
  • 规则配置 cat rules/target.yml
groups:
  - name: targetdown
    rules:
      - alert: target is down
        expr: up == 0
        for: 30s
        labels:
          level: warning
        annotations:
          summary: "节点故障"
          description: "节点故障"

检查规则

promtool check rules rules/target.yml

重载配置

systemctl reload prometheus.service

模拟服务故障

systemctl stop node-exporter.service
  • http://100.80.0.128:9090/alerts 查看告警信息

alerts 级别说明

  • Inactive 告警恢复后,状态变为 inactive
  • Pending 在 for 指定的时间范围内,还没有发出告警
  • Firing 发生中的报警

alertmanager 配置

alertmanager 安装

  • prometheus.yml 中配置 alerting
$ cat /usr/local/prometheus/prometheus.yml
...
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 100.80.0.128:9093
...

重载配置

systemctl reload prometheus.service

可以在 http://100.80.0.128:9090/status 中查看 Alertmanagers 的 Endpoint

模拟服务故障

systemctl stop node-exporter.service

可以在 Alertmanagers 中查看告警和静默 http://100.80.0.128:9093/#/alerts

生成新的记录

  • rules/node.yml
groups:
  - name: node
    rules:
      # CPU 个数
      - record: node_cpu_total
        expr: count(node_cpu_seconds_total{mode="system"}) by (instance)
      # CPU 使用率
      - record: node_cpu_avg
        expr: avg(1-irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance,job)
      # Memory 使用率
      - record: node_memory_precent
        expr: (1- node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)

  - name: node_alert
    rules:
      - alert: "CPU使用率大于0.1%"
        expr: node_cpu_avg > 0.001
        for: 3m
        labels:
          level: warning
        annotations:
          summary: "节点{{ $labels.instance }}CPU使用率{{ $value }}大于0.1%"
          description: "CPU使用率大于0.1%"

选中 Show annotations 可以查看到具体信息

服务发现

  • Pormetheus 服务发现支持静态文件、Consul、DNS、Kubernetes、部分公有用等
  • 动态服务发现主要解决大型系统中资源变化频繁问题

基于文件的服务发现

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
    # labels:
    #   app: prometheus
    #   job: xxx

file_sd_configs

自动从 yaml/json 文件加载数据,这些文件也可以开发程序从 CMDB 自动拉取数据生成:

scrape_configs:
  - job_name: "node2"
    file_sd_configs:
      - files:
        - sd/file/node/*.yml
        # refresh_interval: 2m # 每隔2分钟重新加载,默认为5m
  • sd/file/node/name.yml
- targets:
  - 100.80.0.128:9100
  • 检测
promtool check config prometheus.yml

基于 DNS 的服务发现

针对 DNS 域名进行检查以发现服务,依赖于 A、AAAA、SRV 记录

Kubernetes 服务发现

原生支持对 Kubernetes 的各种资源自动发现,如 Node、Pod、Service、Endpoint、Ingress(在 prometheus 中以 role 定义)等,也支持以 daemonSet 方式部署 node-explorter 采集节点信息。

Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数