Django - 接入监控告警

让故障第一时间被感知到:接入监控告警

  • Sentry 错误监控与告警
  • 告警趋势可视化:Prometheus & Grafana 概念介绍
  • 告警趋势可视化:Prometheus & Grafana 架构
  • Prometheus & Grafana 接入
  • 配置 Grafana 大盘

Sentry 错误监控与告警

sentry监控

Sentry架构

Sentry告警

告警趋势可视化:Prometheus & Grafana 概念介绍

  • 时间序列数据库 TSDB:按时间采样的时间序列的数据库

  • 来源于 Google 的 Borgmon

  • 用做监控、报警,以及时间序列数据库

  • Prometheus 数据模型

    • metrics 名称 + [KEY/VALUE 对] 来标识一种时间序列数据
    • 键值对称为 Label
    • 采样:每一个采样包含一个时间戳和一个 64 位浮点数值
    • django_db_query_duration_seconds_sum{alias="default",vendor="sqlite"} 0.012543817108962685
  • Prometheus 数据类型

    • Counter:计数器,总是增长的整数值;请求数,订单量,错误数等
    • Gauge:可以上下波动的计量值,比如温度,内存使用量,处理中的请求
    • Summary:提供观测样本的摘要,包含样本数量,样本值的和;滑动窗口计算:请求耗时,响应数据大小
    • Histogram:把观测值放到配置好的桶中做统计,请求耗时,响应数据大小等
  • Prometheus 架构

    • Prometheus 服务:采集和存储时序数据
    • 客户端类库:用作注入应用端代码
    • Push gateway:用于采集朝生暮死的作业数据
    • 特殊用途的 Exporter Service:如 Nginx/HAProxy/StatsD 等
    • Alertmanager:处理告警

    Prometheus架构

  • Prometheus 与 Grafana 的调用关系

    Prometheus与Grafana的调用关系

  • Prometheus & Grafana 接入

    • 安装 Prometheus & Grafana

    • 启动 Prometheus & Grafana

    • 接入 Django:Prometheus 插件集成

      • 安装
        1
        pip install django-prometheu
      • 配置 settings.py
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        INSTALLED_APPS = [
        ...
        'django_prometheus',
        ...
        ]

        MIDDLEWARE = [
        'django_prometheus.middleware.PrometheusBeforeMiddleware',
        # All your other middlewares go here, including the default
        # middlewares like SessionMiddleware, CommonMiddleware,
        # CsrfViewmiddleware, SecurityMiddleware, etc.
        'django_prometheus.middleware.PrometheusAfterMiddleware',
        ]
      • 配置 urls.py
        1
        2
        3
        4
        urlpatterns = [
        ...
        url('', include('django_prometheus.urls')),
        ]
    • Promethues 配置 Django 应用的 Endpoint

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
      static_configs:
      - targets: ['127.0.0.1:80001', '127.0.0.1:8002',]

      # metrics_path defaults to '/metrics'
      # scheme defaults to 'http'.

      static_configs:
      - targets: ['localhost:9090']
    • Grafana 中配置应用的监控图

  • 配置 Grafana 大盘