《从 0 开始学微服务》学习归整(五)监控

内容纲要

监控必要性

  • 掌控各个服务的情况
  • 快速发现问题(调用错误、可优化空间等)
  • ……

监控对象

  • 用户端监控
    • 对为用户提供的功能进行监控
  • 接口监控
    • 对业务所提供的功能依赖的接口进行监控
  • 资源监控
    • 对某接口的依赖进行监控
  • 基础监控
    • 对服务本身的健康进行监控

监控指标

  • 请求量
    • 实时请求量(QPS)
    • 统计请求量(PV)
  • 响应时间
    • 把响应时间划分为多个区间
    • 找出慢请求
  • 错误率
    • 接口调用失败占总调用的比率

监控维度

  • 全局维度
    • 整体的请求量、响应时间、错误率等
  • 机房维度
    • 不同机房面临的压力可能不一样
  • 单机维度
    • 同机房的不同机器由于各种原因性能指标也有差异
  • 时间维度
    • 不同时段的请求量差异可能很大
  • 核心维度
    • 核心业务和非核心业务的请求量也不可混为一谈

监控原理

监控系统的四个环节

  1. 数据采集
    • 方式
      • 服务主动上报(在程序中加入代码收集逻辑)
      • 代理收集(程序把日志输出到本地,代理服务负责收集日志)
    • 关键点
      • 采样率(影响精度和性能,需要做好平衡)
  2. 数据传输
    • 方式
      • UDP(数据中心提供 UDP 请求地址,数据采集放请求地址发送数据)
      • Kafka(数据采集放将数据发往指定 Topic,数据中心从 Topic 取数据)
    • 关键点
      • 数据格式
        • 二进制协议(压缩率高,序列化、反序列化效率高)
        • 文本协议(可读性好)
  3. 数据处理
    • 维度
      • 接口维度聚合(得到每个接口的请求量、响应时间等)
      • 机器维度聚合(得到单机的接口请求量、响应时间等)
    • 关键点
      • 数据持久化
        • 索引数据库
        • 时序数据库
  4. 数据展示
    • 方式
      • Dashboard
        • 曲线图(体现变化趋势)
        • 饼图(体现占比分布)
        • 格子图(更精细粒度监控)
        • ……

落地

集中式日志解决方案

ELK Stack

即 ElasticSearch、Logstash、Kibana、Beats。

  • Logstahs:负责收集日志(过滤、格式化等)
  • ElasticSearch:负责数据存储、处理(分布式搜索、分析引擎)
  • Kibana:负责数据展示
  • Beats(作为扩展补充:比 Logstash 节省资源)
    • Packetbeat:收集网络流量数据
    • Topbeat:收集系统进程、CPU、内存等使用情况数据
    • Filebeat:收集日志文件数据
    • Winlogbeat:收集 Windows 事件日志数据

ELK Stack

时序数据库解决方案

Graphite

主要由 Carbon、Whisper、Graphite-Web 组成。

  • Carbon:接收被监控节点的连接,收集各个指标数据(本身不采集数据),将数据写入 carbon-cache,并最终持久化到 Whisper
  • Whisper:一个简单的时序数据库,可以按照不同的粒度存储时间序列的数据
  • Graphite-Web:用于展示数据(先从 carbon-cache 查询数据,没有则再去 Whisper 查询)

Graphite

TICK Stack

即 Telegraf、InfluxDB、Chronograf、Kapacitor。

  • Telegraf:采集数据
  • InfluxDB:存储数据
  • Chronograf:展示数据
  • Kapacitor:数据告警

TICK

Prometheus

Prometheus 是一套开源系统监控、报警框架。

  • Prometheus Server:用于拉取 metrics 信息并存储到数据库
  • Jobs、Exporters:用于暴露已有的第三方服务的 metrics 给 Prometheus Server
  • Pushgateway:用于短期 Jobs
  • Alertmanager:用于数据报警
  • Prometheus Web UI:负责数据展示(UI 可以使用 Grafana)

Prometheus

选型

名称数据收集数据传输数据处理数据展示
ELK StackBeatsBeats -> Logstash -> ElasticSearch可以对日子任意字段进行索引(适合多维度查询;存储消耗比时序数据库大)Kibana
Graphite第三方 -> Carbon正则表达式、subSeries 求和等本身不太好,支持 Grafana
TICK StackTelegrafTelegraf -> influxDBSQL 语言本身不太好,支持 Grafana
PrometheusJobs、ExportersPrometheus Server 定期从 Jobs、Exporters 拉取(侵入性小)PromeQL 语言本身不太好,支持 Grafana

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注