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 配置
规则分类:
$ 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
生成新的记录
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
- 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 采集节点信息。