Prometheus02-服务发现

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读取文件获得主机信息

创建服务发现文件

  • 创建json或yaml文件,存放被监控主机信息
mkdir -p /usr/local/prometheus/files_sd/targets
  • 以下为yaml格式
vim nodes.yaml
- targets:
  - 192.168.13.140:9100
  - 192.168.13.120:9100
  labels:
    app: node-exporter
    job: node
  • 以下为json格式
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

  • 在 prometheus.yml 中添加 job
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
posted @ 2024-05-10 10:18  立勋  阅读(41)  评论(0)    收藏  举报