在前面的文章向大家介绍了使用Grafana生态搭建链路跟踪、日志平台,本节将会带来Mimir的介绍,以及通过部署Mimir搭建监控平台。
Mimir简介
Mimir是一个时序数据库,来对指标数据做长期存储。解决了Prometheus天然欠缺的水平扩展、多租户问题。
其实解决Prometheus的长期存储、水平扩展、多租户问题的时序数据库解决方案已经有不少了,例如Thanos、Cortex、VictoriaMetrics。而Mimir有何优势呢?
Mimir支持高基数的 metrics 压缩和查询,Thanos在处理高基数的 metrics 上不太理想。
Mimir支持多租户,也支持跨多租户间查询;VictoriaMetrics也是支持多租户的,但是VictoriaMetrics不支持跨多租户查询。
Mimir的部署简单,仅依赖存储。
在VictoriaMetrics官网中有测试用例对Prometheus、Cotex的资源占用、性能对比。VictoriaMetrics比Prometheus、Cotex、Thanos在内存占用、相同指标的空间占用上少7倍。VictoriaMetrics的数据摄取和数据查询相较于InfluxDB提升了70倍。
这些数据上说明VictoriaMetrics还是很香的,而VictoriaMetrics与Mimir的对比有待进一步验证。我们生产环境使用的就是VictoriaMetrics作为时序数据的存储。
Mimir组件
Mimir指标写入的组件与Tempo、Loki均类似,由distributor介绍指标,然后传递给Ingester与存储交互,完成持久化存储。

Mimir指标查询的过程与Tempo、Loki处理类似,query-Frontend接收到查询请求后,会拆分成若干个小的查询交给Querier并发的执行。

Mimir部署
在Mimir的代码仓库提供了Chart部署包。在Chart中如果Minio.enabled设置为false,需要配置minio.rootUser、minio.rootPassword作为账号密码,同时将mimir.config中
endpoint: {{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc:9000
全局替换为S3存储的地址(有4处)。同时,还需要手动创建Bucket: xxx-ruler、xxx-tsdb,如果默认是Minio安装,则Chart中会运行一个Job自动创建Bucket。
通过Helm命令完成部署后,等待所有的Pod为Running状态,完成部署。
Grafana Agent配置
我们仍然使用在前面章节介绍的Go Demo接入监控,使用代码集成
github.com/prometheus/client_golang/prometheus/promhttp
同时在代码Gin框架中注册handler即可完成PrometheusSDK的集成,将会通过/metrics接口暴露指标:
r.GET("/metrics", gin.WrapH(promhttp.Handler()))
在前面接入Trace示例的Grafana Agent增加以下配置:
由Grafana Agent抓取server1的指标
并将指标remote write至Mimir做持久化存储
prometheus.scrape "custom_targets" {
targets = [
{
__scheme__ = "http",
__address__ = "server1.go-optl-demo.svc.cluster.local:8080",
__metrics_path__ = "/metrics",
},
]
forward_to = [prometheus.remote_write.default.receiver]
}
prometheus.remote_write "default" {
endpoint {
url = "http://gateway.mimir-demo:8080/prometheus/api/v1/push"
}
}
Grafana 配置Mimir数据源查看监控指标
在Grafana的数据源管理页面选择新增Prometheus类型数据源,配置mimir的查询地址:

完成配置后即可通过该数据源查询采集的监控指标:

到这里我们我们完成了Grafana生态的Agent、Tempo、Loki、Mimir部署,能够在Grafana一个平台上整合Trace、Logs、Metrics的查看。
Metrics和Trace

Metrics和Logs

Logs和Trace

我们也可以根据需要将这些视图添加至一个dashboard,实现在一个大盘中同时查看一个服务或者一组服务的的Trace、Logs、Metrics:

往期回顾
Grafana全家桶(四)链路跟踪Demo-Go代码集成opentelemetry SDK
Grafana全家桶(三)使用Grafana Agent与Tempo实现链路追踪完整demo
Grafana全家桶(二)链路跟踪Grafana Tempo的介绍和部署




