1、静态配置
- 通过在prometheus.yaml文件下添加job_name字段及相应内容实现
vim /path/to/prometheus.yaml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: "static_node_exporter" # 监控一台主机
static_configs:
- targets:
- 10.1.1.13:9100
labels:
"app": "node_exporter"
"job": "node"
- job_name: xxx # 监控另一台主机
2、基于文件的服务发现
- 将被监控主机的信息写入json文件或yaml文件中,prometheus读取文件获得主机信息
创建服务发现文件
mkdir -p /usr/local/prometheus/files_sd/targets
vim nodes.yaml
- targets:
- 192.168.13.140:9100
- 192.168.13.120:9100
labels:
app: node-exporter
job: node
vim nodes.json
[{
"targets": [
"192.168.13.140:9100",
"192.168.13.141:9100",
],
"labels": {
"datacenter": "beijing"
}
}]
配置prometheus读取文件
vim prometheus.yml
scrape_configs:
- job_name: 'prometheus'
file_sd_configs:
- files: # 自定义的和Prometheus程序同级目录的targets目录
- targets/prometheus-server.yaml # 指定服务发现的文件
refresh_interval: 5m
- job_name: 'node'
file_sd_configs:
- files:
- targets/nodes.yaml # 可以使用json或yaml格式
refresh_interval: 5m
检查配置文件
promtool check config /apps/prometheus/prometheus.yml
重启prometheus
3、基于DNS的服务发现
- 对DNS域名进行定期扫描,发现待监控的主机
- DNS服务器由/etc/resolv.conf文件指定
- 该机制依赖于A、AAAA、SRV记录
基于DNS的服务发现
- job_name: webapp
dns_sd_configs:
- name: [ 'prometheus.example.com' ]
type: A
port: 91
默认情况下, Prometheus的DNS服务发现假定你会查询SRV或服务记录。
服务记录是一种在DNS配置中定义服务的方法,服务通常由运行服务的一个或多个目标主机和端口组合组成。
DNS SRV条目的格式如下所示:
_service._proto.name. TTL class SRV priority weight port target
_service 服务名称,前缀 _ 是为了防止与DNS 标签(域名)冲突
proto 服务使用的通讯协议 通常是 tcp udp
name 此记录有效域名
TTL 标准DNS class 字段,通常为IN
priority 记录优先级,数值越小,优先级越高。 [0-65535]
weight 记录权重,数值越大,权重越高。[0-65535]
port 服务使用端口
target 使用服务的主机地址名称
示例SRV记录
_prometheus._tcp.example.com. 300 IN SRV 10 1 9100 webapp1.
_prometheus._tcp.example.com. 300 IN SRV 10 1 9100 webapp2.
4、基于consul的服务发现
前提
- 已部署 Consul agent 或 server
- Prometheus 可以访问 Consul API(默认 8500 端口)
- 每个被监控节点注册到 Consul,并有健康检查
配置peometheus
scrape_configs:
- job_name: "consul_services"
consul_sd_configs:
- server: "127.0.0.1:8500" # Consul agent 地址
datacenter: "dc1" # 数据中心名称
tag_separator: "," # 标签分隔符
scheme: "http" # API scheme
refresh_interval: 30s # 刷新间隔
relabel_configs:
- source_labels: [__meta_consul_service]
target_label: job
- source_labels: [__meta_consul_node]
target_label: instance
- source_labels: [__meta_consul_tags]
separator: ","
target_label: tags
配置Consul
- 在每个节点的 Consul agent 中注册服务(JSON 文件 /etc/consul.d/node-exporter.json)
{
"service": {
"name": "node-exporter",
"tags": ["linux", "monitoring"],
"port": 9100,
"check": {
"id": "node-exporter-check",
"tcp": "127.0.0.1:9100",
"interval": "10s",
"timeout": "1s"
}
}
}
验证 Prometheus 配置
promtool check config /path/to/prometheus.yml
# 确保没有报错,然后重启 Prometheus:
systemctl restart prometheus