「OBSERVABILITY」- 观测系统

认识

Metrics、Logging(Grafana, Loki, Grafana Agent)、Tracing

我们需要观测我们的容器云原生环境,包含 监控、日志、追踪 方面,以协助我们进行问题排查;

该笔记将记录:我们所使用的观测系统架构,以及部署观测系统的过程,以及常见问题的解决办法;

组成

Logging

for Linux Server | Grafana Alloy + Grafana Loki
https://grafana.com/docs/loki/latest/
https://grafana.com/docs/alloy/latest/

for Kubernetes Cluster | Grafana Alloy + Grafana Loki
https://grafana.com/docs/loki/latest/
https://grafana.com/docs/alloy/latest/

for TKE Supernode | Kafka + Grafana Loki
https://cloud.tencent.com/document/product/457/60701
https://grafana.com/docs/agent/latest/flow/reference/components/loki.source.kafka/

for EKS Fargate | Fluent Bit + Grafana Loki
https://docs.aws.amazon.com/eks/latest/userguide/fargate-logging.html
https://grafana.com/docs/loki/latest/send-data/fluentbit/

Metrics

for HTTPS Websites
1)通过 Shell Script 脚本,获得云商配置的所有域名,并构造配置文件。
2)然后,通过 Black Exporter file_sd_configs 读取配置文件抓取所有域名。
https://github.com/prometheus/blackbox_exporter

Tracing

WIP

kube-prometheus-stack server

// 如此,当出发 Alertmanager 告警时,将携带 cluster 标题给 Prometheus Alert 组件。
externalLabels:
cluster: <cluster_name>

kube-prometheus-stack server

禁用全部 Ingress 配置,但仅启用 Prometheus Ingress 配置。
禁用全部 Grafana 配置。
修改 externalLabels.cluster: <cluster_name> 参数,使其标识当前集群;

LGTM (Loki, Grafana, Tempo, Mimir) Stack

Loki for Logs
Grafana for Visualization
Tempo for Traces
Mimir, Prometheus, and Graphite for Metrics

Prometheus => Grafana

通过 Promtheus Remote Write 特性,将数据长久存储到 Thanos 服务,所以 Grafana 能够从 Thanos 直接查询数据;

但在实际实践中,我们发现 开源 的 Grafana Dashboard 是针对单集群的。如果针对多个集群中使用同个面板,需要调整面板;

为了减小 Grafana Dashboard 改造工作(考虑到升级,我们不希望修改面板),我们将各个 Prometheus 作为数据源添加到 Grafana 中。
而 Thanos 仅是作为长期存储,只有特殊场景下(例如统计历史趋势),我们才会针对 Thanos 来制定面板;

监控:Exporter + Prometheus + Grafana,已是广泛使用的监控解决方案,所以我们也不再进行技术调研;
日志:我们直接使用 Grafana Loki 进行日志采集,目的是为了减少组件(直接使用 Grafana 进行日志展示);
追踪:根据研发要求,我们尝试使用 Jaeger 进行追踪,我们也将尝试引入其他性能追踪组件,来观察程序运行;

日志 | Logging

部署模式 | 分布式 and 集中式

分布式:

优点:

1)环境独立,部署升级容易。

缺点:

1)使用复杂。当查看不同环境监控时,需要登陆各个环境进行查看。

2)针对不同环境需,要引入不同组件。例如 JSON Exporter、Blockbox Exporter 等等,需要针对不同环境进行组合。

3)面板更新复杂。当调整面板显示时,每个环境的观测系统都需要更新。

4)资源占用更多。检测系统的服务端和客户端都需要部署在环境中,占用资源更多。

集中式:

优点:

1)使用方便。通过 Grafana 面板,能够快速查看不同环境。

2)维护简单。针对所有环境维护不同的,仅需维护一套相同的系统。

缺点:

1)体系庞大。该监控系统需要覆盖各种场景,需要部署各种组件。

2)服务端压力大。需要处理各个环境的数据,所以服务端压力大。

3)移植性差。系统无法适用于差异较大的各种环境。

针对日志量

200G/d => 15G/h => 0.25G/m => 250M/m => 4.166666667M/s

400GiB/86400s*1000MiB/GiB=4.62962963