← 返回 Day 84 正文

Day 84 · 图解

Day 084 — 监控告警系统 图解

1. 系统架构图

┌─────────────────────────────────────────────────────────────────┐
│                    监控告警系统架构                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                    数据采集层                            │   │
│   │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌────────┐ │   │
│   │  │   CPU    │  │   内存   │  │   磁盘   │  │  网络  │ │   │
│   │  │ Collector│  │ Collector│  │ Collector│  │Collect.│ │   │
│   │  └────┬─────┘  └────┬─────┘  └────┬─────┘  └───┬────┘ │   │
│   └───────┼──────────────┼──────────────┼────────────┼───────┘   │
│           │              │              │            │           │
│           ▼              ▼              ▼            ▼           │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                    数据存储层                            │   │
│   │  ┌─────────────────────────────────────────────────┐   │   │
│   │  │              SQLite / 时序数据库                  │   │   │
│   │  │  ┌─────────┐  ┌─────────┐  ┌─────────┐        │   │   │
│   │  │  │metrics  │  │alerts   │  │config   │        │   │   │
│   │  │  │table    │  │table    │  │table    │        │   │   │
│   │  │  └─────────┘  └─────────┘  └─────────┘        │   │   │
│   │  └─────────────────────────────────────────────────┘   │   │
│   └─────────────────────────────────────────────────────────┘   │
│           │                                                    │
│           ▼                                                    │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                    分析引擎层                            │   │
│   │  ┌──────────┐  ┌──────────┐  ┌──────────┐            │   │
│   │  │  规则    │  │  趋势    │  │  组合    │            │   │
│   │  │  引擎    │  │  检测    │  │  规则    │            │   │
│   │  └────┬─────┘  └────┬─────┘  └────┬─────┘            │   │
│   └───────┼──────────────┼──────────────┼─────────────────────┘   │
│           │              │              │                        │
│           ▼              ▼              ▼                        │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                    告警输出层                            │   │
│   │  ┌──────────┐  ┌──────────┐  ┌──────────┐            │   │
│   │  │  控制台  │  │   钉钉   │  │   邮件   │            │   │
│   │  │  输出    │  │  Webhook │  │  通知    │            │   │
│   │  └──────────┘  └──────────┘  └──────────┘            │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2. 告警流程图

┌─────────────┐
│  开始监控   │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  采集指标   │◄──────────────────────┐
└──────┬──────┘                       │
       │                              │
       ▼                              │
┌─────────────┐                       │
│  存储数据   │                       │
└──────┬──────┘                       │
       │                              │
       ▼                              │
┌─────────────┐    否                 │
│  检查规则   │───────────────────────┤
└──────┬──────┘                       │
       │ 是                           │
       ▼                              │
┌─────────────┐    是                 │
│  去重检查   │───┐                   │
└──────┬──────┘   │                   │
       │ 否       │                   │
       ▼          ▼                   │
┌─────────────┐  ┌─────────────┐      │
│  生成告警   │  │  跳过告警   │      │
└──────┬──────┘  └──────┬──────┘      │
       │                │             │
       ▼                │             │
┌─────────────┐         │             │
│  发送通知   │         │             │
└──────┬──────┘         │             │
       │                │             │
       └────────────────┴─────────────┘
                    等待间隔

3. 指标采集流程

flowchart TD A[开始采集] --> B{选择采集类型} B --> C[CPU 采集] B --> D[内存采集] B --> E[磁盘采集] B --> F[网络采集] C --> C1[cpu_percent] C --> C2[cpu_count] C --> C3[cpu_freq] D --> D1[virtual_memory] D --> D2[swap_memory] E --> E1[disk_usage] E --> E2[disk_io_counters] F --> F1[net_io_counters] F --> F2[net_connections] C1 --> G[合并结果] C2 --> G C3 --> G D1 --> G D2 --> G E1 --> G E2 --> G F1 --> G F2 --> G G --> H[返回指标字典]
flowchart TD
    A[开始采集] --> B{选择采集类型}
    
    B --> C[CPU 采集]
    B --> D[内存采集]
    B --> E[磁盘采集]
    B --> F[网络采集]
    
    C --> C1[cpu_percent]
    C --> C2[cpu_count]
    C --> C3[cpu_freq]
    
    D --> D1[virtual_memory]
    D --> D2[swap_memory]
    
    E --> E1[disk_usage]
    E --> E2[disk_io_counters]
    
    F --> F1[net_io_counters]
    F --> F2[net_connections]
    
    C1 --> G[合并结果]
    C2 --> G
    C3 --> G
    D1 --> G
    D2 --> G
    E1 --> G
    E2 --> G
    F1 --> G
    F2 --> G
    
    G --> H[返回指标字典]

4. 告警规则状态机

                    ┌─────────────┐
                    │   空闲      │
                    │  (Idle)     │
                    └──────┬──────┘
                           │
                           │ 指标超过阈值
                           ▼
                    ┌─────────────┐
                    │   触发      │
                    │  (Triggered)│
                    └──────┬──────┘
                           │
           ┌───────────────┼───────────────┐
           │               │               │
           ▼               ▼               ▼
    ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
    │   去重      │ │  聚合      │ │  升级      │
    │  (Dedup)    │ │ (Aggregate)│ │ (Escalate) │
    └──────┬──────┘ └──────┬──────┘ └──────┬──────┘
           │               │               │
           └───────────────┼───────────────┘
                           │
                           ▼
                    ┌─────────────┐
                    │   通知      │
                    │  (Notify)   │
                    └──────┬──────┘
                           │
                           ▼
                    ┌─────────────┐
                    │   记录      │
                    │  (Log)      │
                    └──────┬──────┘
                           │
                           │ 恢复正常
                           ▼
                    ┌─────────────┐
                    │   恢复      │
                    │ (Resolved)  │
                    └─────────────┘

5. 数据存储模型

┌─────────────────────────────────────────────────────────────┐
│                      metrics 表                             │
├─────────┬─────────────┬─────────────────────┬───────────────┤
│   id    │  timestamp  │       data          │  created_at   │
├─────────┼─────────────┼─────────────────────┼───────────────┤
│   1     │ 2024-01-01  │ {"cpu":...,"mem":...}│ 2024-01-01   │
│   2     │ 2024-01-02  │ {"cpu":...,"mem":...}│ 2024-01-02   │
└─────────┴─────────────┴─────────────────────┴───────────────┘

┌─────────────────────────────────────────────────────────────┐
│                      alerts 表                              │
├─────────┬─────────────┬────────┬──────────┬────────┬────────┤
│   id    │ rule_name   │ metric │  value   │severity│created │
├─────────┼─────────────┼────────┼──────────┼────────┼────────┤
│   1     │ CPU使用率高  │ cpu    │  95.2    │critical│ 01-01  │
│   2     │ 内存使用率高 │ mem    │  87.5    │warning │ 01-01  │
└─────────┴─────────────┴────────┴──────────┴────────┴────────┘

6. 告警级别说明

┌─────────────────────────────────────────────────────────────┐
│                    告警严重级别                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  🔵 INFO (信息)                                             │
│  ├─ 用途: 记录正常事件                                      │
│  ├─ 示例: 服务启动、配置变更                                │
│  └─ 处理: 仅记录日志                                        │
│                                                             │
│  ⚠️ WARNING (警告)                                          │
│  ├─ 用途: 提示潜在问题                                      │
│  ├─ 示例: CPU > 80%, 内存 > 85%                            │
│  └─ 处理: 关注,可能需要干预                                │
│                                                             │
│  🚨 CRITICAL (严重)                                         │
│  ├─ 用途: 紧急问题                                          │
│  ├─ 示例: CPU > 95%, 磁盘 > 95%, 服务宕机                  │
│  └─ 处理: 立即处理,可能导致服务中断                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

📝 这些图解帮助理解监控系统的整体架构和工作流程