惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Y
Y Combinator Blog
月光博客
月光博客
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
博客园 - 司徒正美
V
Visual Studio Blog
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
A
About on SuperTechFans
The Cloudflare Blog

博客园 - Hey,Coder!

微信小程序 web方案实现调音器功能 systemctl slice配置docker最大占用cpu 内存 pipenv环境变量配置 .net8验证码 数据库差异对比工具 ubuntu24 换源 ssh配置 ubuntu24 Harbor部署 ubuntu24 kvm部署 cockpit web管理界面 .net api代理 Ubuntu 24.04 DMAR IOMMU 报错修复 uniapp iOS App 上架 vs文件软链接 Docker 网络别名 .net8通用中间件处理公共返回值结构 .net环境下OpenTelemetry Body 读取注意事项 jaeger界面显示异常 .net opentelemetry collector jaeger c# opentelemetry 自定义export c# opentelemetry 自定义export c# 生成对象的初始化代码 Elasticsearch ILM 与 Data Stream 概念及实例说明文档 portainer httphelper封装 Ocelot + Consul + SignalR 粘性会话 正交软件架构 docker postgresql17 主从复制 rabbitmq总结与c#示例 docker rabbitmq quartz dashboard docker consul registrator 服务自动注册consul 微服务动态扩容
docker部署prometheus grafana pgexporter Alertmanager
Hey,Coder! · 2026-09-02 · via 博客园 - Hey,Coder!

目录结构

monitor-pg/
├── docker-compose.yml
├── prometheus/
│ ├── prometheus.yml # 采集配置 + 新增 alerting/rule_files/alertmanagers 段落
│ └── rules/
│ └── postgres_alerts.yml # 告警规则
├── alertmanager/
│ └── alertmanager.yml # 告警路由与接收器
└── (Grafana 数据卷自动创建)

docker-compose.yml

注意修改数据库账号密码DATA_SOURCE_NAME

version: '3.8'

services:
  postgres-exporter:
    image: prometheuscommunity/postgres-exporter:latest
    container_name: postgres-exporter
    environment:
      # 注意修改密码为你已有的 PostgreSQL 信息
      DATA_SOURCE_NAME: "postgresql://dev:password@192.168.0.1:5432/nocode_product?sslmode=disable"
    restart: unless-stopped

  prometheus:
    image: prom/prometheus:v3.5.5
    container_name: prometheus
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/rules:/etc/prometheus/rules   # 新增:告警规则
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
    ports:
      - "9090:9090"
    depends_on:
      - alertmanager
    restart: unless-stopped

  alertmanager:                               
    image: prom/alertmanager:latest
    container_name: alertmanager
    volumes:
      - ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
    ports:
      - "9093:9093"
    restart: unless-stopped

  grafana:
    image: grafana/grafana:12.0.0
    container_name: grafana
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: admin
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    restart: unless-stopped

volumes:
  prometheus_data:
  grafana_data:

prometheus.yml

路径存储到./prometheus/prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s   #  规则评估周期

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']   # 指向 alertmanager 服务

rule_files:
  - /etc/prometheus/rules/*.yml            # 加载告警规则

scrape_configs:
  - job_name: 'postgres'
    static_configs:
      - targets: ['postgres-exporter:9187']

告警规则

路径为prometheus/rules/postgres_alerts.yml

groups:
  - name: postgres_alerts
    rules:
      # 1. 连接数过高(超过最大连接数 80%)
      - alert: PostgresTooManyConnections
        expr: sum(pg_stat_activity_count) / pg_settings_max_connections > 0.8
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "PostgreSQL 连接数过高 (实例 {{ $labels.instance }})"
          description: "当前连接数占比 > 80% (value: {{ $value }})"

      # 2. 缓存命中率低(低于 95%)
      - alert: PostgresLowCacheHitRatio
        expr: pg_stat_database_blks_hit / (pg_stat_database_blks_hit + pg_stat_database_blks_read) < 0.95
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "缓存命中率过低 ({{ $labels.instance }})"
          description: "命中率 < 95% (value: {{ $value }})"

      # 3. exporter 抓取失败(PG 不可达)
      - alert: PostgresExporterDown
        expr: up{job="postgres"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Postgres exporter 不可用"
          description: "无法从 {{ $labels.instance }} 抓取指标,PG 可能宕机"

      # 4. 长事务(超过 5 分钟)
      - alert: PostgresLongRunningTransaction
        expr: max(pg_stat_activity_max_tx_duration) > 300
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "存在长事务 ({{ $labels.instance }})"
          description: "最长事务已持续 > 300s (value: {{ $value }})"

Alertmanager

global:
  resolve_timeout: 5m
  smtp_from: 'alert@example.com'
  smtp_smarthost: 'smtp.qq.com:465'      # 改为你的 SMTP
  smtp_auth_username: 'alert@example.com'
  smtp_auth_password: 'your_auth_code'
  smtp_require_tls: false

route:
  receiver: 'default'
  group_by: ['alertname', 'job']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h

receivers:
  - name: 'default'
    email_configs:
      - to: 'ops@example.com'             # 告警接收人