大家好,失踪人员回归了。在时隔一年多的沉沦后我再次踏上分享之路。
本系列将会向大家介绍Grafana 全系列产品。
想必大家对Grafana都不陌生,是一个开源的可视化工具,提供丰富的图表方式优雅的展示各类数据源的复杂数据。
例如Ingress-nginx的监控看板:


除了Grafana ,Grafana Labs开源了涵盖监控、告警、日志、链路跟踪等方面各种产品。本系列将会对以上产品进行介绍,带领大家围绕Grafana生态搭建可观测(监控、日志、链路跟踪)平台。
本节将会对通过Grafana生态搭建可观测平台涉及到的产品做简单的概要介绍,各产品的部署、配置、使用将会在后续章节做详细讲解。
Grafana
Grafana支持丰富的数据源,内置支持的数据源类型包括:
时序数据库:例如Prometheus、InfluxDB
日志、文档数据库:例如ElasticSearch和Grafana生态中用于日志存储的Loki
分布式追踪:常见的支持OTel协议的Jaeger、Zipkin以及Grafana生态中用于存储链路跟踪数据的Tempo
性能分析:例如Parca,一个利用ebpf功能实现的内存、cpu分析工具
关系型数据库:Mysql、SqlServer等

其他支持的数据源插件可参考:https://grafana.com/grafana/plugins/
大家熟知的Grafana支持丰富的图表,包括折线图、柱状图、统计图、表格、饼状图、地理位置、甘特图等常用展示图表。

Grafana Agent
Grafana Agent集成了监控、日志、链路的处理转发相关客户端功能,可以完成对以上数据的采集。
metrics
Grafana Agent同Vmagent一样实现了Prometheus的agent模式,支持类似service自动发现,指标relabeling等功能,最重要的可以将指标remote write至远程的时序数据库存储,例如Prometheus、VictoriaMetrics以及Grafana生态的Mimir
Logs
日志采集客户端,例如fluenbit、Promtail将采集的日志发送至GrafanaAgent,由GrafanaAgent将日志转发至日志存储后端,例如ElasticSearch、Grafana生态的Loki等
Traces
GrafanaAgent可以接收来自Jaeger、Zipkin等遵循OTel协议的链路数据,并在内部做处理后可以转发给链路后端服务进行处理(或展示),支持的后端包括Jaeger、Zipkin以及Grafana生态的Tempo。Grafana Agent对Trace的支持是通过集成了Opentelemetry-collector的核心代码实现的。

Grafana Loki
Grafana生态中日志存储的后端,其单机模式支持直接使用文件存储,而多副本模式依赖对象存储来对数据进行持久化。Grafana内置了Loki数据源类型,在配置相应的数据源后可以通过Grafana Explore页面进行日志查询。

Grafana Tempo
遵循OTel协议的Trace数据存储后端服务,Trace的数据流如下图:

Tempo包含若干组件:
Distributor:接收来自客户端的数据
Metrics generator:将Trace数据转化为Metrics存储至Prometheus
Ingester:对接存储,将数据写入存储
Compactor:将存储的数据进行压缩清理,减少block数量
Query Frontend:将前端查询拆分若干搜索空间至Querier进行查询
Querier:向存储查询数据,并返回给Query Fronted

Grafana Mimir
Grafana Mimir为Metrics数据提供长期存储,是对Prometheus生态的一个补充。Promethues虽然维护了时序数据库,但是在大量指标的存储的资源占用非常高,查询上效率都是比较低,所以不适合做大量数据的长期存储。
Mimir的读写数据流经过的组件如下:


在进行学习时,Mimir支持以上组件以一个二进制快速部署,无额外的依赖。
这一节向大家概要的介绍了Grafana生态的各个组件,大家对围绕Grafana生态建设涵盖Metrics、Logs、Trace的可观测平台需要使用的组件有着基本的了解,下一节将会详细介绍通过Grafana Agent、Grafana Tempo如何采集Metrics。




