基于prometheus的微服务指标监控

服务上线后咱们往往须要对服务进行监控,以便能及早发现问题并做针对性的优化,监控又可分为多种形式,比方日志监控,调用链监控,指标监控等等。而通过指标监控能清晰的察看出服务指标的变化趋势,理解服务的运行状态,对于保障服务稳固起着十分重要的作用

prometheus是一个开源的系统监控和告警工具,反对弱小的查询语言PromQL容许用户实时抉择和汇聚工夫序列数据,工夫序列数据是服务端通过HTTP协定被动拉取取得,也能够通过两头网关来推送工夫序列数据,能够通过动态配置文件或服务发现来获取监控指标

Prometheus 的架构

Prometheus 的整体架构以及生态系统组件如下图所示:

Prometheus Server间接从监控指标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到样本数据,并对此数据执行一系列规定,以汇总和记录现有数据的新工夫序列或生成告警。能够通过 Grafana 或者其余工具来实现监控数据的可视化

go-zero基于prometheus的服务指标监控

go-zero 框架中集成了基于prometheus的服务指标监控,上面咱们通过go-zero官网的示例shorturl来演示是如何对服务指标进行收集监控的:

  • 第一步须要先装置Prometheus,装置步骤请参考官网文档
  • go-zero默认不开启prometheus监控,开启形式很简略,只须要在shorturl-api.yaml文件中减少配置如下,其中Host为Prometheus Server地址为必填配置,Port端口不填默认9091,Path为用来拉取指标的门路默认为/metrics
Prometheus:  Host: 127.0.0.1  Port: 9091  Path: /metrics
  • 编辑prometheus的配置文件prometheus.yml,增加如下配置,并创立targets.json
- job_name: 'file_ds'    file_sd_configs:    - files:      - targets.json
  • 编辑targets.json文件,其中targets为shorturl配置的指标地址,并增加了几个默认的标签
[    {        "targets": ["127.0.0.1:9091"],        "labels": {            "job": "shorturl-api",            "app": "shorturl-api",            "env": "test",            "instance": "127.0.0.1:8888"        }    }]
  • 启动prometheus服务,默认侦听在9090端口
prometheus --config.file=prometheus.yml
  • 在浏览器输出http://127.0.0.1:9090/,而后点击Status -> Targets即可看到状态为Up的Job,并且Lables栏能够看到咱们配置的默认的标签

通过以上几个步骤咱们实现了prometheus对shorturl服务的指标监控收集的配置工作,为了演示简略咱们进行了手动的配置,在理论的生产环境中个别采纳定时更新配置文件或者服务发现的形式来配置监控指标,篇幅无限这里不开展解说,感兴趣的同学请自行查看相干文档

go-zero监控的指标类型

go-zero中目前在http的中间件和rpc的拦截器中增加了对申请指标的监控。

次要从申请耗时和申请谬误两个维度,申请耗时采纳了Histogram指标类型定义了多个Buckets不便进行分位统计,申请谬误采纳了Counter类型,并在http metric中增加了path标签rpc metric中增加了method标签以便进行细分监控。

接下来演示如何查看监控指标:

首先在命令行屡次执行如下命令

curl -i "http://localhost:8888/shorten?url=http://www.xiaoheiban.cn"

关上Prometheus切换到Graph界面,在输入框中输出{path="/shorten"}指令,即可查看监控指标,如下图

咱们通过PromQL语法查问过滤path为/shorten的指标,后果中显示了指标名以及指标数值,其中http_server_requests_code_total指标中code值为http的状态码,200表明申请胜利,http_server_requests_duration_ms_bucket中对不同bucket后果别离进行了统计,还能够看到所有的指标中都增加了咱们配置的默认指标

Console界面次要展现了查问的指标后果,Graph界面为咱们提供了简略的图形化的展现界面,在理论的生产环境中咱们个别应用Grafana做图形化的展现

grafana可视化界面

grafana是一款可视化工具,功能强大,反对多种数据起源Prometheus、Elasticsearch、Graphite等,装置比较简单请参考官网文档,grafana默认端口3000,装置好后再浏览器输出http://localhost:3000/,默认账号和明码都为admin

上面演示如何基于以上指标进行可视化界面的绘制:

  • 点击左侧边栏Configuration->Data Source->Add data source进行数据源增加,其中HTTP的URL为数据源的地址

  • 点击左侧边栏增加dashboard,而后增加Variables不便针对不同的标签进行过滤筛选比方增加app变量用来过滤不同的服务

  • 进入dashboard点击右上角Add panel增加面板,以path维度统计接口的qps

  • 最终的成果如下所示,能够通过服务名称过滤不同的服务,面板展现了path为/shorten的qps变化趋势

总结

以上演示了go-zero中基于prometheus+grafana服务指标监控的简略流程,生产环境中能够依据理论的场景做不同维度的监控剖析。当初go-zero的监控指标次要还是针对http和rpc,这对于服务的整体监控显然还是有余的,比方容器资源的监控,依赖的mysql、redis等资源的监控,以及自定义的指标监控等等,go-zero在这方面后续还会继续优化。心愿这篇文章可能给您带来帮忙

我的项目地址:
https://github.com/tal-tech/go-zero