Skip to content

Exporter

Exporter

Blackbox exporter

The blackbox exporter allows blackbox probing of endpoints over HTTP, HTTPS, DNS, TCP, ICMP and gRPC.

blackbox-exporter的配置文件使用默认的即可(/usr/local/blackbox_exporter/blackbox.yml),文件里定义了进行目标检测时要使用的模块和模块参数。至于要检测哪些目标是定义在Prometheus 的Job配置中。

# Blackbox Exporter modules 配置文件
# 保存为 blackbox.yml,重启 blackbox_exporter 后生效
modules:

  # TCP 连接探测,适合检测任意 TCP 服务端口是否可达(无 HTTP 握手)
  tcp_connect_8000:
    prober: tcp
    timeout: 5s
    # tcp 探测可以配置发送/期望回复,但对常规端口检测通常不需要
    tcp:
      # 可选:如果服务会在连接后立即返回特定数据,可以配置 query/response
      # query: ""
      # response: ""

  # HTTP 探测(检查 2xx 响应 / 基本 HTTP 可用性),用于 web 服务的详细检查
  http_8000:
    prober: http
    timeout: 5s
    http:
      # 请求方法
      method: GET
      # 期望的有效状态码范围,若服务返回 200 则认为成功
      valid_status_codes: [200]
      # 如果希望接受 2xx/3xx/4xx 可根据需要调整,例如 [200,301]
      # valid_status_codes: [200,301]
      # 不跟随重定向(根据需要可改为 true)
      no_follow_redirects: false
      # 优先使用 IPv4(内部网络通常使用 IPv4)
      preferred_ip_protocol: "ip4"
      # 若服务使用 TLS 且内部证书不受信任,可以内网使用跳过校验
      tls_config:
        insecure_skip_verify: true
      # 可选自定义请求头
      headers:
        # Example:
        # Host: example.local
        # User-Agent: blackbox-probe
scrape_configs:

  - job_name: 'blackbox-192.168.3.51-8000-tcp'
    metrics_path: /probe
    params:
      module: [tcp_connect_8000]        # 使用 blackbox.yml 中的模块名
    static_configs:
      - targets: ['192.168.3.51:8000']  # 被探测目标 (target)
    relabel_configs:
      # 将 __address__(目标)传给 /probe 的参数 target
      - source_labels: [__address__]
        target_label: __param_target
      # 使用 target 值作为 instance 标签(可在 grafana/告警中显示)
      - source_labels: [__param_target]
        target_label: instance
      # 把实际的 scrape 地址改为 blackbox exporter 的地址
      - target_label: __address__
        replacement: 127.0.0.1:9115   # <-- 把这改为 blackbox_exporter 的地址:端口

postgres_exporter

export DATA_SOURCE_NAME=postgresql://postgres:Pgsql%402024@localhost:5432/postgres?sslmode=disable

scrape_configs:
  - job_name: postgres_exporter
    static_configs:
      - targets: ["localhost:9187"]

--extend.query-path=queries.yaml

table_size:
  query: |
    SELECT
      schemaname,
      relname AS table_name,
      pg_total_relation_size(relid) AS bytes
    FROM pg_stat_user_tables;
  metrics:
    - schemaname:
        usage: "LABEL"
    - table_name:
        usage: "LABEL"
    - bytes:
        usage: "GAUGE"
${__field.labels.table_name}

热加载配置 curl -X POST http://localhost:9090/-/reload 默认没有启用,需要在启动时指定 prometheus --config.file=/path/to/prometheus.yml --web.enable-lifecycle prometheus --web.enable-lifecycle

Status → Targets

Node Exporter

version: '3.8'

services:
  node_exporter:
    image: quay.io/prometheus/node-exporter:v1.10.2
    container_name: node_exporter
    command:
      - '--path.rootfs=/host'
    network_mode: host
    pid: host
    restart: unless-stopped
    volumes:
      - '/:/host:ro,rslave'
node-exporter:
  image: 192.168.3.12:5005/prometheus/node-exporter:v1.10.2
  container_name: node-exporter
  restart: unless-stopped

  volumes:
    - /proc:/host/proc:ro
    - /sys:/host/sys:ro
    - /:/rootfs:ro
    # 👇 新增:textfile 目录
    - /var/lib/node_exporter/textfile:/textfile:ro

  command:
    - '--path.procfs=/host/proc'
    - '--path.sysfs=/host/sys'
    - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
    # 👇 新增:开启 textfile collector
    - '--collector.textfile.directory=/textfile'

textfile collector

/var/lib/node_exporter/textfile/dm_license.prom

dm_license_expiry_timestamp 1777488000

启动 Node Exporter 时,如果开启了这个参数:

--collector.textfile.directory=/var/lib/node_exporter/textfile

它会做一件事:

👉 每次 Prometheus 来抓 /metrics 时:

扫描这个目录

读取所有 .prom 文件

把内容拼进 /metrics 输出

告警

groups:
- name: dm-license-alert
  rules:
  - alert: DMLicenseExpireSoon
    expr: (dm_license_expiry_timestamp - time()) / 86400 <= 90
    for: 0m
    labels:
      severity: warning
    annotations:
      summary: "达梦数据库授权即将到期"
      description: "剩余 {{ printf \"%.0f\" $value }} 天"

Note

在 Prometheus 里,它返回的是: 满足条件 → 返回 原始数值(剩余天数) 不满足 → 这个时间序列直接消失

route:
  receiver: feishu
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 24h
  repeat_interval: 24h

receivers:
- name: feishu
  webhook_configs:
  - url: "https://open.feishu.cn/open-apis/bot/v2/hook/你的token"

mysqld_exporter

# 配置mysqld_exporter
vi .my.cnf

[client] user=root password=Mysql@2023 port=3306

# 启动mysqld_exporter
监控数据量大小
./mysqld_exporter --web.telemetry-path=/metrics --collect.info_schema.innodb_tablespaces
mysql_info_schema_innodb_tablespace_file_size_bytes


https://github.com/prometheus/mysqld_exporter






模糊查询使用 ~
mysql_info_schema_innodb_tablespace_file_size_bytes{instance="192.168.3.204:9104", job="mysql-105", tablespace_name=~"cs.*"}


# prometheus 配置

  - job_name: 'mysql-105'      # 给被监控主机取个名字
    static_configs:
    - targets: ['192.168.3.204:9104']      # 这里填写被监控主机的IP和端口

process-exporter

docker

docker run -d --rm -p 9256:9256 --privileged -v /proc:/host/proc -v `pwd`:/config ncabatoff/process-exporter --procfs /host/proc -config.path /config/filename.yml
version: '3.8'

services:
  process-exporter:
    image: ncabatoff/process-exporter:latest
    container_name: process-exporter
    restart: unless-stopped
    privileged: true
    ports:
      - "9256:9256"
    volumes:
      # 映射宿主机的 /proc 到容器内的 /host/proc
      - /proc:/host/proc:ro
      # 映射当前目录到容器内的 /config (对应原命令中的 `pwd`)
      # 请确保当前目录下有一个名为 filename.yml 的配置文件
      - ./:/config
    command:
      - "--procfs=/host/proc"
      - "--config.path=/config/filename.yml"

./process-exporter --config.path process.yml

process_names:
  - name: dolphinscheduler-master
    cmdline:
      - MasterServer
  - name: dolphinscheduler-worker
    cmdline:
      - WorkerServer

name:

给这一组进程起个逻辑名字
这个名字 不会影响匹配
只会体现在 Prometheus 指标的 name label 里

cmdline:

匹配规则(最关键)
含义是:
只要某个进程的 启动命令行(cmdline)里包含 MasterServer 这个字符串
就认为它是 dolphinscheduler-master
等价于 Linux 上
ps -ef | grep MasterServer
  - job_name: process_exporter
    static_configs:
      - targets: ["localhost:9256"]
namedprocess_namegroup_num_procs{groupname="dolphinscheduler-master"}
namedprocess_namegroup_num_procs{groupname="dolphinscheduler-worker"}

告警规则

groups:
- name: dolphinscheduler服务监控
  rules:
    - alert: DolphinSchedulerMasterProcessDown
      expr: namedprocess_namegroup_num_procs{groupname="dolphinscheduler-master"} < 1
      for: 10s
      labels:
        severity: warning
    - alert: DolphinSchedulerWorkerProcessDown
      expr: namedprocess_namegroup_num_procs{groupname="dolphinscheduler-worker"} < 1
      for: 10s
      labels:
        severity: warning