Prometheus+Grafana 監控平臺實踐-搭建&常用服務監控&告警

来源:https://www.cnblogs.com/morang/archive/2023/12/07/devops-prometheus-grafana-install-use-db-site-monitor.html
-Advertisement-
Play Games

本篇將分享Prometheus+Grafana的監控平臺搭建,並監控之前文章所搭建的主機&服務,分享日常使用的一些使用經驗本篇將配置常用服務的監控與面板配置:包括 MySQL,MongoDB,CLickHouse,Redis,RabbitMQ,Linux,Windows,Nginx,站點訪問監控,已... ...


前言

Prometheus 是一個開放性的監控解決方案,通過各種 Exporter 採集當前主機/服務的數據,和 Grafana 相結合可以實現強大的監控和可視化功能

本篇將分享使用 docker compose 構建 Prometheus+Grafana,並監控之前文章所搭建的主機&服務,分享日常使用的一些使用經驗
文章較長,已安裝可略過,推薦先看第三節 常用服務的 Prometheus+Grafana 配置

特點

  • 成熟穩定且強大
  • 豐富的插件,大部分情況都能滿足
  • 輕量級部署,資源占用少

使用情況

  • 主要用來作為監控面板使用
  • 使用 Grafana 監控:linux ,windows,redis,clickhouse,mongodb,mysql, RabbitMQ,站點情況
  • 使用 Grafana 設置告警當服務出現無法訪問時通知到企業微信群
  • Grafana 版本問題,可能存在面板失效,需要做一些調整

使用 docker compose 安裝 Prometheus

配置文件說明

  • prometheus 版本:v2.47.2

  • 指定運行參數:

    • 啟動配置文件路徑:'--config.file=/etc/prometheus/prometheus.yml'
    • 數據存儲目錄:'--storage.tsdb.path=/prometheus'
    • 數據保留時間:'--storage.tsdb.retention.time=30d'
    • 允許使用 curl -X POST ``http://localhost:9090/-/reload 重載其配置:'--web.enable-lifecycle'
    • 指定 web 控制台配置,添加了賬號密碼:'--web.config.file=/etc/prometheus/web-config.yml'
  • 開放埠:9090

  • 指定網路:devopsnetwork (docker network create devopsnetwork

  • 掛載配置文件及數據目錄,需要對數據目錄進行創建及賦予許可權:mkdir prometheus_data && chown 65534 ./prometheus_data 關於持久化許可權的討論

  • 用到了三個配置文件:compose.yml prometheus.yml web-config.yml

  • docker compose 文件:compose.yml

version: '3.1'
services:
  prometheus:
    restart: always
    container_name: prometheus
    image: prom/prometheus:v2.47.2
    command:
      # 配置文件
      - '--config.file=/etc/prometheus/prometheus.yml'
      # 指定web面板賬號密碼訪問
      - '--web.config.file=/etc/prometheus/web-config.yml'
      # 數據目錄
      - '--storage.tsdb.path=/prometheus'
      # 數據保留時間
      - '--storage.tsdb.retention.time=30d'
      # 運行使用 curl -X POST http://localhost:9090/-/reload  重載其配置
      - '--web.enable-lifecycle'
    volumes:
      # 需要許可權 mkdir prometheus_data && chown 65534 ./prometheus_data
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus_data:/prometheus
      - ./web-config.yml:/etc/prometheus/web-config.yml
    ports:
      - 9090:9090
    networks:
      - devopsnetwork
      
networks:
  devopsnetwork:
    external: true
  • prometheus 配置文件示例:prometheus.yml,

    • 指定了 prometheus ,並設置了訪問密碼 root devops666
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
   - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
    # 啟用了賬號密碼 web-config.yml basic_auth_users 需要配置
    basic_auth:
      username: root
      password: devops666
  • web 控制台配置:web-config.yml

    • 指定賬號密碼 root devops666
basic_auth_users:
  root: $2a$10$c6OOt9f6LuhiabPyW0nkNOprb1ndQ/HHSfqjB/exe7yh5FaYUqvBy
  • 啟動:docker compose up -d

Prometheus 指定賬號密碼訪問

  • 設置 https 或基礎密碼驗證文檔
  • 要啟用 web 面板賬號密碼訪問,指定 web 訪問配置文件 '--web.config.file=/etc/prometheus/web-config.yml'
  • 映射 web-config.yml 指定賬號密碼 root devops666 ,Prometheus 密碼需要使用 htpasswd 生成 bcrypt 密碼 線上生成工具
basic_auth_users:
  root: $2a$10$kmkC.lHR3Kwl19DE9l1KRerMDinEejEbNmJigrJZYAGkgzbVBUpa2
  • 如果需要使用 Prometheus 監聽 Prometheus ,並且 Prometheus 啟用了身份驗證,需要在配置出增加 basic_auth 配置節
scrape_configs:
   - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
    # 啟用了賬號密碼 web-config.yml basic_auth_users 需要配置
    basic_auth:
      username: root
      password: devops666
  • 掉坑裡去了,如果一開始 basic_auth 沒有配置對,重載配置是無效的,需要重啟

重載配置

修改了配置文件後,可以使用 api 介面重載配置,如果啟用了賬號密碼可以使用 -u 參數指定(basic_auth 修改重載配置無效),沒有就不需要加 -u 參數

curl -X POST http://localhost:9090/-/reload
或
curl -X POST -u root:devops666 http://localhost:9090/-/reload

添加 nginx 配置

還不會在區域網申請 ssl 及配置的可以參考之前的文章 前後端都用得上的 Nginx 日常使用經驗

server {

    listen 80;
    listen       443 ssl;
    server_name prometheus.devops.test.com;  # 自行修改成你的功能變數名稱

    ssl_certificate      /certs/prometheus.devops.test.com/server.crt;
    ssl_certificate_key  /certs/prometheus.devops.test.com/server.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
            proxy_pass http://prometheus:9090;
            proxy_http_version 1.1;
            proxy_buffering off;
            proxy_request_buffering off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }
}

安裝成功

根據上面的配置,完成了 Prometheus 的搭建,監聽本身 Prometheus 的情況

通過https://prometheus.devops.test.com/ 使用賬號密碼 root devops666 登陸後即可

使用 docker compose 安裝 Grafana

Grafana 是一個開源的數據可視化和監控平臺,它提供了豐富的圖表和麵板,用於展示各種指標和數據。提到 Prometheus,Grafana 自然是不不能落下,基於官方和社區,可以很快的製作出監控可視化面板,助力日常運維檢測

配置文件說明

  • grafana 版本:v10.2.0
  • 指定賬號密碼: root devops666
  • 埠映射:3000
  • 掛載數據目錄 ./grafana_data, 需要賦予許可權:mkdir -p grafana_data && chown -R 472:472 ./grafana_data
  • 指定網路為 devopsnetwork(docker network create devopsnetwork
  • docker compose 文件:compose.yml ,安裝 v10.2.0 替換版本號即可
version: '3.1'
services:
    grafana:
      restart: always
      container_name: grafana
      image: grafana/grafana:10.2.0
      ports:
        - "3000:3000"
      volumes:
        - ./grafana_data:/var/lib/grafana
      environment:
        - GF_SECURITY_ADMIN_USER=root
        - GF_SECURITY_ADMIN_PASSWORD=devops666
        - GF_USERS_ALLOW_SIGN_UP=false
      networks:
        - devopsnetwork
      
networks:
  devopsnetwork:
    external: true
  • 啟動:docker compose up -d

添加 nginx 配置

server {

    listen 80;
    listen       443 ssl;
    server_name grafana.devops.test.com;  # 自行修改成你的功能變數名稱

    ssl_certificate      /certs/grafana.devops.test.com/server.crt;
    ssl_certificate_key  /certs/grafana.devops.test.com/server.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
            proxy_pass http://grafana:3000;
            proxy_http_version 1.1;
            proxy_buffering off;
            proxy_request_buffering off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }
}

安裝成功

通過https://grafana.devops.test.com/使用賬號密碼 root devops666 登陸後即可

製作監控面板步驟:

  1. 指定一個數據源,數據源採集各組件的信息,提供給 Grafana 進行顯示
  2. 可以從官方/社區/自行製作面板

添加 Prometheus 數據源

! ! ! 數據源最好是用 IP+埠,避免容器內無法解析 test.com 功能變數名稱

從 Grafana 導入儀錶板

  • 選擇數據源確認導入

  • 查看面板,可以看到面板中有許多數據已經無法正常顯示,這個在後續的一些面板中也經常會遇到,之前以為是 Grafana 不對,但我創建了一個依賴版本 4.5.0-beta1 測試發現依舊不行,應該還是是因為監控數據的問題

Grafana v10.2.0 常用操作

之前使用的 v6.7.2,當前已經是 v10.2.0 了,故還是選擇將 grafana 升級到 v10,升級需要重新創建數據目錄

設置中文

在寫完文章發現原來已經支持中文了,補上~

導入面板

  • 新建面板的入口在右上方

添加數據源

  • 測試了常用的幾個數據源: Prometheus ClickHouse Redis
  • MongoDB 需要企業版,開源版可以使用 Prometheus 監控

  • 添加了數據源後有推薦的儀錶盤可以直接啟用

添加插件

  • 之前 v6.7.2 無法線上安裝(牆),v10 可以線上安裝了,方便許多
  • 準備安裝插件時記得切換 State 到 All

常用服務的 Prometheus+Grafana 配置

常用的一些組件可以在官方下載頁中去尋找,使用 Docker 可以去 DockerHub 去找對應的鏡像即可

  • Grafana 版本:已升級到 v10.2.0
  • Prometheus 版本:v2.47.2

Linux 監控配置

docker run -d \
  -p 9100:9100 \
  -v "/:/host:ro,rslave" \
  --name node_exporter  \
  --restart always \
  quay.io/prometheus/node-exporter:v1.7.0 \
  --path.rootfs=/host

  • 運行成功並將其配置到 prometheus.yml
#global:
#  xxx
#...
scrape_configs:
  - job_name: 'linux'
    # 每隔5秒從該作業中抓取目標
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.123.214:9100','192.168.123.216:9100','192.168.123.219:9100','192.168.123.222:9100']
  • 重載配置後配置生效( curl -X POST -u root:devops666 ``http://localhost:9090/-/reload

  • 可以使用前面安裝的 JumpServer 工作台-作業中心-快捷命令 直接遠程在四台 Linux 主機運行

  • v6 導入 Grafana 面板 10180

  • v10 導入面板 16098

Windows 監控配置

  • 運行成功並將其配置到 prometheus.yml
#global:
#  xxx
#...
scrape_configs:
  - job_name: 'win-node'
    # 每隔5秒從該作業中抓取目標
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.123.201:9182']
  • 重載配置後配置生效( curl -X POST -u root:devops666 ``http://localhost:9090/-/reload

  • v10 導入 Grafana 面板 12566

可以修改時間範圍查看監控情況

  • 導入 10467

Nginx 監控配置

server {
    listen       80;
    #...其他配置
    location = /stub_status {
        stub_status;
    }
}

  • 指定映射埠:9113
  • docker 運行 nginx-prometheus-exporter
docker run -d -p 9113:9113 \
--name nginx_exporter  \
--restart always \
nginx/nginx-prometheus-exporter:0.11 --nginx.scrape-uri=http://192.168.123.214:80/stub_status

  • 將其配置到 prometheus.yml
  - job_name: 'nginx'
    # 每隔5秒從該作業中抓取目標
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.123.214:9113']

重載配置後生效: curl -X POST -u root:devops666 ``http://localhost:9090/-/reload

  • 導入 Grafana 面板:12708

MySQL 監控配置

CREATE USER 'exporter'@'%' IDENTIFIED BY 'devops666' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';

可以使用之前搭建的 JumpServer 進行執行

  • 指定映射埠:9104

  • docker 運行 mysqld_exporter

    • 建議指定和 mysql 服務同一網路,使用 mysql 的服務名加埠訪問,不在同一網路的適合賬號授權訪問時需要將 localhost 修改為%,dockerhub 文檔沒有更新,以 GitHub 文檔為主
    • 主機名和埠:--mysqld.address mysql:3306 (一個網路就用服務名,或者使用 ip:port)
    • 賬號:--mysqld.username exporter
    • 密碼:-e MYSQLD_EXPORTER_PASSWORD=devops666
    • 指定網路:--network devopsnetwork(和 mysql 一個網路,可以不需要)
docker run -d \
  -p 9104:9104 \
  -e MYSQLD_EXPORTER_PASSWORD=devops666 \
  --name mysql_exporter  \
  --restart always \
  prom/mysqld-exporter:v0.15.0 \
  --mysqld.address 192.168.123.214:3306  \
  --mysqld.username exporter

  • 將其配置到 prometheus.yml
  - job_name: mysql 
    static_configs:
      - targets:
        - 192.168.123.214:3306
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        # The mysqld_exporter host:port
        replacement: 192.168.123.214:9104

重載配置後生效 curl -X POST -u root:devops666 ``http://localhost:9090/-/reload

  • 導入 Grafana 面板 11329

MongoDB 監控配置

  • Prometheus 組件:mongodb_exporter v0.20

  • Grafana 面板推薦:

    • MongoDB ID:14997 部分圖表無效
    • MongoDB 數據源插件需要企業版才能使用
  • docker 運行 mongodb_exporter 監聽單機實例

#docker stop mongodb_exporter && docker rm mongodb_exporter
docker run -d -p 9216:9216 \
--name mongodb_exporter  \
--restart always \
percona/mongodb_exporter:0.20 --compatible-mode --mongodb.uri=mongodb://root:[email protected]:27017
  • prometheus.yml 配置
  - job_name: mongodb
    static_configs:
      - targets: ['192.168.123.214:9216']
        labels:
          instance: mongodb
  • 導入面板 14997 目前只測試了單實例的監控,一些數據可以根據需要進行修改

ClickHouse 監控配置

  • Prometheus 配置:clickhouse 9363 埠、9000 埠

  • 9363:ClickHouse 的 Prometheus 預設指標埠

  • 9000:Native Protocol 埠, ClickHouse TCP 協議,用於分散式查詢的伺服器間通信

  • Grafana 面板推薦:

使用 Prometheus 數據源監控

  • prometheus.yml 配置
  - job_name: clickhouse
    static_configs:
      - targets: ['192.168.123.214:9363']
        labels:
          instance: clickhouse
  • 參考之前安裝 clickhouse 教程,增加啟用 9000 埠,併在 grafana 中安裝 clickhouse 數據源插件
version: '3'
services:
  clickhouse-server:
    container_name: db_clickhouse_20_6
    image: yandex/clickhouse-server:20.6.8.5
    restart: always
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    environment:
      - TZ=Asia/Shanghai
      - ports=8123,9363,9000
    ports:
      - 8123:8123
      - 9363:9363
      - 9000:9000
    volumes:
      - ./data:/var/lib/clickhouse
      - ./logs:/var/log/clickhouse-server
      # 指定配置文件
      - ./config:/etc/clickhouse-server

使用數據源插件監控

  • Grafana 啟用數據源 clickhouse 插件

  • 配置數據源 需要開啟 9000 埠

  • 啟用預設儀錶盤

  • 預覽效果

Redis 監控配置

redis_exporter 單機監控

  • docker 運行 oliver006/redis_exporter 指定埠 9121
  • 通過 --redis.addr --redis.password 來指定地址和密碼
#docker stop redis_exporter && docker rm redis_exporter &&
docker run -d -p 9121:9121 \
--name redis_exporter \
--restart always \
oliver006/redis_exporter:v1.55.0 \
--redis.addr redis://192.168.123.214:6379 \
--redis.password devops666
  • prometheus.yml 配置
  - job_name: redis_exporter
    static_configs:
      - targets: ['192.168.123.214:9121']
        labels:
          instance: redis-node
  • 導入面板 11835 監控單機

  • 導入面板 14091 監控單機

redis_exporter 集群監控

  • docker 運行 oliver006/redis_exporter 指定埠 9122
docker run -d -p 9122:9121 \
--name redis_exporter_targets \
--restart always \
oliver006/redis_exporter:v1.55.0 
  • prometheus.yml 配置
  - job_name: redis_exporter_targets
    static_configs:
      - targets:
        - redis://192.168.123.216:6380
        - redis://192.168.123.219:6380
        - redis://192.168.123.222:6380
        - redis://192.168.123.216:6381
        - redis://192.168.123.219:6381
        - redis://192.168.123.222:6381
    metrics_path: /scrape
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.123.214:9122
  • 使用面板 11835 監控集群節點

  • 使用面板 14091 監控集群節點

使用數據源插件監控 Redis 單機/集群

  • 安裝 Redis 數據源插件

  • 配置 Redis 單機數據源 Redis-Node

  • 配置 Redis 集群數據源 Redis-Cluster

  • 導入面板 12776 指定數據源

  • 集群監控預覽

RabbitMQ 監控配置

  • Grafana 面板推薦:

  • RabbitMQ 內置 Prometheus 支持 文檔

  • 需要使用時映射 15692:15692 埠

  • 並確保插件已啟用:docker exec -it rabbitmq_3_12 /bin/bash -c "rabbitmq-plugins enable rabbitmq_prometheus"

  • Prometheus 配置
  - job_name: rabbitmq
    static_configs:
      - targets: ['192.168.123.214:15692']
        labels:
          instance: rabbitmq

  • 導入 Grafana 面板 10991

站點監控配置

version: '3.1'
services:
  blackbox_exporter:
    restart: always
    container_name: blackbox_exporter 
    image: prom/blackbox-exporter:v0.24.0
    command:
      # 配置文件
      - '--config.file=/config/blackbox.yml'
    volumes:
      # blackbox.yml myCA.pem
      - ./config:/config
    ports:
      - 9115:9115
    networks:
      - devopsnetwork
      
networks:
  devopsnetwork:
    external: true
  • blackbox.yml 配置,添加了 http_custom_ca_devops 將區域網中的證書映射進去了
modules:
  http_2xx:
    prober: http
    http:
      preferred_ip_protocol: "ip4"
  http_post_2xx:
    prober: http
    http:
      method: POST
  tcp_connect:
    prober: tcp
  pop3s_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false
        ca_file: 
  grpc:
    prober: grpc
    grpc:
      tls: true
      preferred_ip_protocol: "ip4"
  grpc_plain:
    prober: grpc
    grpc:
      tls: false
      service: "service1"
  ssh_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^SSH-2.0-"
      - send: "SSH-2.0-blackbox-ssh-check"
  irc_banner:
    prober: tcp
    tcp:
      query_response:
      - send: "NICK prober"
      - send: "USER prober prober prober :prober"
      - expect: "PING :([^ ]+)"
        send: "PONG ${1}"
      - expect: "^:[^ ]+ 001"
  icmp:
    prober: icmp
  icmp_ttl5:
    prober: icmp
    timeout: 5s
    icmp:
      ttl: 5
  http_custom_ca_devops:
    prober: http
    http:
      method: GET
      tls_config:
        ca_file: /config/myCA.pem
  • prometheus.yml 配置
  - job_name: blackbox_devops
    metrics_path: /probe
    params:
      module: [ http_custom_ca_devops ]  # Look for a HTTP 200 response.
    dns_sd_configs:
      - names:
          - nginx.devops.test.com
          - apollo.devops.test.com
          - rabbitmq.devops.test.com
          - dns.devops.test.com
          - nexus.devops.test.com
          - jumpserver.devops.test.com
          - grafana.devops.test.com
          - prometheus.devops.test.com
        type: A
        port: 443
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
        replacement: https://192.168.123.214:443/  # Make probe URL be like https://1.2.3.4:443/
      - source_labels: [__meta_dns_name]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.123.214:9115  # The blackbox exporter's real hostname:port.
      - source_labels: [__meta_dns_name]
        target_label: __param_hostname  # Make domain name become 'Host' header for probe requests
      - source_labels: [__meta_dns_name]
        target_label: vhost  # and store it in 'vhost' label
        #匹配apollo,需要訪問/health檢查狀態
      - source_labels: [__param_hostname]
        regex: 'apollo.*'
        target_label: __param_target
        replacement: https://192.168.123.214:443/health
        #匹配prometheus 開啟了basic_auth 所以可以使用下麵這種方式進行驗證,問的gpt,還真行
      - source_labels: [__param_hostname]
        regex: 'prometheus.*'
        target_label: __param_target
        replacement: https://root:[email protected]:443
  • 重載 prometheus 配置生效

  • 導入面板 13659 監控效果

  • 導入面板 9719 監控效果

  • 導入面板 9965 監控效果

Grafana 監控告警設置

通過設置 Alert rules(預警規則) ,匹配到有指標符合規則時,就會根據 Notification policies(通知策略) 進行消息發送,發送的內容和模板在 Contact points(通知方式) 設置

下麵完成一個實際的使用場景:檢測 RabbitMQ 面板狀態,服務不可用時進行預警,通過企業微信機器人進行群通知

設置預警規則

  • 添加規則名稱:RabbitMQ 監控

  • 選擇數據源:Prometheus
  • 設置指標條件:記憶體使用位元組 erlang_mnesia_memory_usage_bytes 並指定 job 是 rabbitmq

  • 設置預警條件:記憶體值小於 1(無效)時進行通知

  • 設置檢查規則,30s 檢查一次,30s 等待期,立刻通知
  • Pending period 等待期:如果警報條件不再滿足,警報規則將會恢復到正常狀態,而不會觸發警報

  • 這個和預設的通知策略還有關係,需要結合使用,預設是 30s,5 分鐘等待期,4 小時內不重覆發送可根據需要修改

  • 設置提醒信息及服務地址

設置通知策略

可以通過修改重覆間隔,重新發送通知

設置告警模板

Grafana 使用 Go 模板語言來創建通知消息,可根據文檔自行編寫,另外一個 aws 的中文文檔可以參考

  • 結合文檔寫的一個通知模板
{{ define "DevOpsTemplate" -}}
{{- range .Alerts -}}
{{- range .Annotations.SortedPairs -}}
{{if eq .Name "summary" }}
**{{ "預警消息" }}**:{{ .Value }}
{{- end -}}
{{ end }}
{{- range .Annotations.SortedPairs -}}
{{if eq .Name "runbook_url" }}
**{{ "服務地址" }}**:{{ .Value }}
{{- end -}}
{{ end }}
**{{"預警分組"}}**:{{ .Labels.grafana_folder }}
**{{"開始時間"}}**:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"}}
**{{"預警參數"}}**:
    {{ range .Labels.SortedPairs -}}
      {{ .Name }}:{{ .Value }}
    {{ end }}
    {{- range .Annotations.SortedPairs -}}
    {{- if and (ne .Name "summary") (ne .Name "runbook_url") -}}
      {{ .Name }}:{{ .Value }}
    {{ end }}
{{ end }}
{{- end -}}
{{- end -}}

設置通知方式

支持多種通知,根據需要配置,這裡以企業微信機器人為例

需要通過告警快速定位問題,實際應用中肯定是需要將告警實例及其信息一併通知,所以還需要結合告警模板和規則進行消息的發送。使用模板語法指定前面設置的模板

設置完成後,當預警規則設置頁面出現異常提示時,就會進行提示了

踩坑記錄

  • 安裝官方文檔運行後,提示無許可權,需要賦予掛載目錄許可權:chown 65534 ./prometheus_data

  • 許可權在之前的使用中使用 777 許可權,能夠解決,但是很明顯不是最佳方案,然後好好找了下,最後發現這個問題很久就有人提出 pr,只是一直沒有被合併,大概下個版本就可以了, 關於持久化許可權的討論

  • basic_auth 修改後,重載配置是無效的,需要重新啟動後才生效

  • redis 使用 redis_exporter,監控多個如果有密碼,沒有密碼,密碼不一樣的實例需要分開運行配置

  • mongodb 的監控始終不是很完美

  • 站點監控的證書驗證和密碼驗證反反覆復嘗試了很久,以下為主要踩坑的地方

    • prometheus.yml 配置 blackbox job 的 params module 只能有一個,多個只會第一個生效
    • blackbox 配置的證書可以是 pem,無效轉換成 crt 格式,配置:ca_file: /config/myCA.pem
    • basic_auth 配置不需要再配置 job,可以直接使用特殊的 url 格式:https://root:[email protected]:443
  • Grafana 服務重啟後,nginx 代理功能變數名稱訪問一直 502,IP 可以訪問,重啟 nginx 後就可以訪問了

  • Grafana 的通知模板語法,可參考文檔

# 1.定義模板
{{ define "模板名稱" -}}
/**/
{{ end }}

# 2.迴圈預警消息
{{ range .Alerts }}
/**/
{{ end }}

# 3.列印加粗文字
**{{ "預警消息" }}**

# 4.刪除空格和換行符
{{ range .Alerts -}}
  {{ range .Labels.SortedPairs -}}
    {{ .Name }} = {{ .Value }}
  {{ end }}
{{ end }}

# 5. 迴圈附加信息
{{- range .Annotations.SortedPairs -}}
{{ end}}

# 5. if判斷
{{if eq .Name "runbook_url" }}

# 6. 時區問題,+8設置
**{{"開始時間"}}**:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"}}

相關文檔

後語

研究了差不多大半個月,從常用中間件的監控到設置預警,花費了很大的功夫,也掉了不少的頭髮。

這篇文章寫完,個人感覺 Prometheus+Grafana 這套方案算是入門了,滿足日常使用肯定是沒問題的。

走過不要錯過,歡迎留言交流。

作者:易墨
Github:yimogit
純靜態工具站點:metools
說明:歡迎拍磚,不足之處還望園友們指出;
迷茫大概是因為想的太多做的太少。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文解釋為啥會有響應式編程,為什麼它在開發者中不太受歡迎,以及引入 Java 虛擬線程後它可能最終會消失。 命令式風格編程一直深受開發者喜愛,如 if-then-else、while 迴圈、函數和代碼塊等結構使代碼易理解、調試,異常易追蹤。然而,像所有好的東西一樣,通常也有問題。這種編程風格導致線程 ...
  • IDEA的遠程開發功能,可以將本地的編譯、構建、調試、運行等工作都放在遠程伺服器上執行,而本地僅運行客戶端軟體進行常規的開發操作即可,舊版本IDEA目前不支持該功能.,本例使用的是IDEA2023.2.5版本 下麵介紹如何在IDEA中設置遠程連接伺服器開發環境並結合Cpolar內網穿透工具實現無公網 ...
  • 大家好,我是棧長。 Nacos 2.3.0 前幾天正式發佈了,新增了不少實用性的新功能,真是史上最強版本。 Nacos 2.3.0 還真是一個比較重要的大版本,因為它涉及了太多重大更新,今天棧長給大家來解讀下。 Nacos 先掃個盲: Nacos 一個用於構建雲原生應用的動態服務發現、配置管理和服務 ...
  • 前面兩篇文章主要是介紹瞭如何解決高併發情況下資源爭奪的問題。但是現實的應用場景中除了要解決資源爭奪問題,高併發的情況還需要解決更多問題,比如快速處理業務數據等, 本篇文章簡要羅列一下與之相關的更多技術細節。 1、非同步編程:使用async和await關鍵字進行非同步編程,這可以避免阻塞線程,提高程式的響 ...
  • chatgpt介面開發筆記3: 語音識別介面 1.文本轉語音 1、瞭解介面參數 介面地址: POST https://api.openai.com/v1/audio/speech 下麵是介面文檔描述內容: 參數: { "model": "tts-1", "input": "你好,我是饒坤,我是ter ...
  • 在.NET中,Microsoft.Extensions.Logging是一個靈活的日誌庫,它允許你將日誌信息記錄到各種不同的目標,包括資料庫。在這個示例中,我將詳細介紹如何使用Microsoft.Extensions.Logging將日誌保存到MySQL資料庫。我們將使用Entity Framewo ...
  • 前言 本文要說的這種開發模式,這種模式並不是只有blazor支持,js中有一樣的方案next.js nuxt.js;blazor還有很多其它內容,本文近關註漸進式開發模式。 是的,前後端是主流,不過以下情況也許前後端分離並不是最好的選擇: 小公司,人員不多,利潤不高,創業階段能省則省 個人開發者,接 ...
  • 使用Aspirate可以將Aspire程式部署到Kubernetes 集群 工具安裝 dotnet tool install -g aspirate --prerelease 註意:Aspirate 正在開發中,該軟體包將作為預覽版進行版本控制,--prelease 選項將獲得最新的預覽版。 容器註 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...