认识
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