prometheus-exporter

由于prometheusexporter太多了, 所以单独开了个文档

pg监控

postgres_exporter

单个数据库

setup.sh

#!/bin/bash

start_pg_exporter() {
pg_host=$1
pg_port=$2
pg_user=$3
pg_password=$4
exporter_port=$5
docker kill postgresql-exporter-${exporter_port}
docker rm postgresql-exporter-${exporter_port}
docker run -d \
--restart=always \
-p ${exporter_port}:9187 \
--name postgresql-exporter-${exporter_port} \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-e DATA_SOURCE_NAME="postgresql://${pg_user}:${pg_password}@${pg_host}:${pg_port}/postgres?sslmode=disable" \
wrouesnel/postgres_exporter
}

pgid="hdy-nmg-server-001"
pg_host="10.0.18.2"
pg_port="5432"
pg_user="postgres"
pg_password=""
exporter_port=13101
start_pg_exporter ${pg_host} ${pg_port} ${pg_user} ${pg_password} ${exporter_port}

配置增加

  # hdy-nmg-server-001
  - job_name: 'hdy-nmg-server-001'
    static_configs:
      - targets: ['127.0.0.1:13101']
        labels:
          type: postgresql
          instance: hdy-nmg-server-001

多个数据库

setup.sh

#!/bin/bash

mkdir -p config/
cat << EOF > config/postgres_exporter.yml
auth_modules:
  hdy-nmg-server-001:
    type: userpass
    userpass:
      username: postgres
      password: NoKgWU
    options:
      sslmode: disable
  aliyun-hz-server-master:
    type: userpass
    userpass:
      username: postgres
      password: 9VczV
    options:
      sslmode: disable
EOF

docker kill postgresql-exporter
docker rm postgresql-exporter
docker run -d --net=host \
--name postgresql-exporter \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
--restart=always \
-v $(pwd)/config/:/etc/postgres-exporter/ \
quay.io/prometheuscommunity/postgres-exporter \
--config.file /etc/postgres-exporter/postgres_exporter.yml \
--web.listen-address=:13101

配置增加

  - job_name: 'postgresql-exporter'
    scrape_interval: 15s
    scrape_timeout: 10s
    file_sd_configs:
      - files: ['/usr/local/prometheus/groups/postgresql/*.json','/usr/local/prometheus/groups/postgresql/*.yml']
    metrics_path: /probe
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [instance]
        target_label: __param_auth_module
      - target_label: __address__
        replacement: "10.0.18.2:13101"

groups/postgresql/postgresql.yml

- targets: [ "10.0.18.2:5432"]
  labels:
    job_name: hdy-nmg-server-001
    instance: hdy-nmg-server-001
    saltid: hdy-nmg-server-001
    comment: "hdy-nmg-server-001"

- targets: [ "47.xxx.xxx.xxx:5432"]
  labels:
    job_name: aliyun-hz-server-master
    instance: aliyun-hz-server-master
    saltid: aliyun-hz-server-master
    comment: "aliyun-hz-server-master"

grafana的监控模板为9628

mysql监控

mysql_exporter

单个数据库

setup.sh

#!/bin/bash

# hdy-nmg-server-001

port=10309

docker kill mysqld-exporte-${port}
docker rm mysqld-exporte-${port}

cat << EOF > .my.cnf
[client]
user=root
password=
EOF

docker run -d --name mysqld-exporte-${port} \
--net host \
--restart=always \
-v /etc/timezone:/etc/timezone:ro \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-v $(pwd)/.my.cnf:/config/.my.cnf \
prom/mysqld-exporter:v0.15.0 \
--web.listen-address=:${port} \
--config.my-cnf="/config/.my.cnf"

配置增加

  # hdy-nmg-server-001
  - job_name: 'mysql'
    static_configs:
      - targets: ['127.0.0.1:10309']
        labels:
          type: mysql
          instance: hdy-nmg-server-001

多个数据库

setup.sh

#!/bin/bash

# hdy-nmg-server-001

port=10309

docker kill mysqld-exporte-${port}
docker rm mysqld-exporte-${port}

cat << EOF > .my.cnf
[hdy-nmg-server-001]
user=root
password=
[aliyun-hz-server-master]
user=root
password=
EOF

docker run -d --name mysqld-exporte-${port} \
--net host \
--restart=always \
-v /etc/timezone:/etc/timezone:ro \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-v $(pwd)/.my.cnf:/config/.my.cnf \
prom/mysqld-exporter:v0.15.0 \
--web.listen-address=:${port} \
--config.my-cnf="/config/.my.cnf"

配置增加

  - job_name: 'mysql-exporter'
    scrape_interval: 15s
    scrape_timeout: 10s
    file_sd_configs:
      - files: ['/usr/local/prometheus/groups/mysql/*.json','/usr/local/prometheus/groups/mysql/*.yml']
    metrics_path: /probe
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [instance]
        target_label: __param_auth_module
      - target_label: __address__
        replacement: "10.0.18.2:10309"

groups/mysql/mysql.yml

- targets: [ "10.0.18.2:3306"]
  labels:
    job_name: hdy-nmg-server-001
    instance: hdy-nmg-server-001
    saltid: hdy-nmg-server-001
    comment: "hdy-nmg-server-001"

- targets: [ "47.xxx.xxx.xxx:3306"]
  labels:
    job_name: aliyun-hz-server-master
    instance: aliyun-hz-server-master
    saltid: aliyun-hz-server-master
    comment: "aliyun-hz-server-master"

grafana的监控模板为7362

接口监控

blackbox_exporter

setup.sh

#!/bin/bash

docker stop blackbox_exporter
docker rm blackbox_exporter
docker run -d \
  --restart=always \
  -p 9115:9115 \
  --name blackbox_exporter \
  -v $(pwd)/config:/config \
  -v /etc/timezone:/etc/timezone:ro \
  -v /etc/localtime:/etc/localtime:ro \
  quay.io/prometheus/blackbox-exporter:latest --config.file=/config/blackbox.yml

config/blackbox.yml

modules:
  # 通用get
  http_2xx:
    prober: http
    timeout: 35s
    http:
      valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
      valid_status_codes: []  # Defaults to 2xx
      method: GET
      preferred_ip_protocol: "ip4" # defaults to "ip6"
      ip_protocol_fallback: false  # no fallback to "ip6"
  # 无参post
  http_post_2xx:
    prober: http
    timeout: 35s
    http:
      method: POST
      headers:
        Content-Type: application/json

配置增加

  - job_name: 'blackbox-exporter'
    scrape_interval: 60s
    scrape_timeout: 35s
    file_sd_configs:
      - files: ['/usr/local/prometheus/groups/blackbox/*.json','/usr/local/prometheus/groups/blackbox/*.yml']
    metrics_path: /probe
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [module]
        target_label: __param_module
      - source_labels: [address]
        target_label: address
      - target_label: __address__
        replacement: "127.0.0.1:9115"

groups/blackbox/blackbox.yml

- targets: [ "http://10.0.18.2:8008/api/video_type/list" ]
  labels:
    module: "http_2xx"
    address: "http://10.0.18.2:8008/api/video_type/list"
    instance: "wx-video"

redis监控

redis_exporter

redis_exporter.sh
redis.yml
redis_exporter-9121.json
prometheus.yml
#!/bin/bash

port=9121

docker rm -f redis-exporter-${port}
docker run -d --name redis-exporter-${port} \
--restart=always \
-v $(pwd)/config/redis_exporter-${port}.json:/data/redis_exporter-${port}.json \
-e REDIS_PASSWORD_FILE=/data/redis_exporter-${port}.json \
-p ${port}:9121 \
oliver006/redis_exporter:v1.60.0

grafana的监控模板为11835

haproxy监控

groups/haproxy/haproxy.yml

- targets: [ "192.168.1.1:8405"]
  labels:
    job_name: ha-test-1
    instance: ha-test-1
    saltid: test
    comment: 测试

配置增加

  - job_name: 'haproxy-exporter'
    scrape_interval: 15s
    scrape_timeout: 10s
    file_sd_configs:
      - files: ['/usr/local/prometheus/groups/haproxy/haproxy.json','/usr/local/prometheus/groups/haproxy/haproxy.yml']

grafana的监控模板为12693

pve监控

pve_exporter

开源地址

pve_exporter.sh
pve_exporter.yml
prometheus.yml
pve.yml
#!/bin/bash

port=9221

docker kill pve-exporter
docker rm pve-exporter

docker run -d \
--name pve-exporter \
--restart=always \
--network=host \
-v $(pwd)/groups/pve/pve.yml:/etc/prometheus/pve.yml \
buyfakett/pve_exporter

nginx监控

使用buyfakett/openresty:ubuntu_focal-vts_0.2.2镜像

prometheus.yml
pve.yml
  - job_name: 'nginx-host-exporter'
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: '/status/format/prometheus'
    file_sd_configs:
      - files: ['/usr/local/prometheus/groups/nginx-host/*.json','/usr/local/prometheus/groups/nginx-host/*.yml']

grafana的监控模板为9785

node_exporter

prometheus.yml
nodes.yml
  - job_name: 'node-exporter'
    scrape_interval: 15s
    scrape_timeout: 10s
    file_sd_configs:
      - files: ['/usr/local/prometheus/groups/node_exporter/*.json','/usr/local/prometheus/groups/node_exporter/*.yml']

grafana的监控模板为1860

windows_exporter

安装方法

prometheus.yml
windows.yml
  - job_name: 'windows-exporter'
    scrape_interval: 30s
    scrape_timeout: 10s
    file_sd_configs:
      - files: ['/usr/local/prometheus/groups/windows_exporter/*.json','/usr/local/prometheus/groups/windows_exporter/*.yml']

grafana的监控模板为20763

sql_exporter

setup.sh
config/sql_exporter.yml
config/collectors/moto_data.collector.yml
#!/bin/bash

# https://github.com/burningalchemist/sql_exporter

port=9399

docker rm -f sql_exporter

mkdir -p config/

docker run -d --net host \
--name sql_exporter \
--restart=always \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/tiemzone:/etc/timezone:ro \
-v ./config/:/etc/sql_exporter/ \
registry.cn-hangzhou.aliyuncs.com/buyfakett/sql_exporter \
-config.file /etc/sql_exporter/sql_exporter.yml \
-web.listen-address ":${port}"

配置增加

  - job_name: 'sql_exporter'
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /metrics
    static_configs:
      - targets: ['192.168.1.1:9399']

检测表是否5分钟没有新增数据(查询结果用1或0显示)

  • postgres
SELECT CASE
   WHEN EXISTS (
          SELECT 1
          FROM trip_information_29
          WHERE createtime >= NOW() - INTERVAL '5 minutes'
      ) THEN 1
   ELSE 0
END AS counter;
  • mysql
SELECT CASE
   WHEN EXISTS (
          SELECT 1
          FROM trip_information_29
          WHERE createtime >= NOW() - INTERVAL 5 MINUTE
      ) THEN 1
   ELSE 0
END AS counter;
  • clickhouse
SELECT 
    if(count(*) > 0, 1, 0) AS counter
FROM 
    log.ngxlog
WHERE 
    create_time >= now() - INTERVAL 5 MINUTE