服务上线后咱们每每须要对服务进行监控,以便能及早发现问题并作针对性的优化,监控又可分为多种形式,好比日志监控,调用链监控,指标监控等等。而经过指标监控能清晰的观察出服务指标的变化趋势,了解服务的运行状态,对于保证服务稳定起着很是重要的做用mysql
prometheus是一个开源的系统监控和告警工具,支持强大的查询语言PromQL容许用户实时选择和汇聚时间序列数据,时间序列数据是服务端经过HTTP协议主动拉取得到,也能够经过中间网关来推送时间序列数据,能够经过静态配置文件或服务发现来获取监控目标git
Prometheus 的总体架构以及生态系统组件以下图所示:github
Prometheus Server直接从监控目标中或者间接经过推送网关来拉取监控指标,它在本地存储全部抓取到样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列或生成告警。能够经过 Grafana 或者其余工具来实现监控数据的可视化redis
go-zero 框架中集成了基于prometheus的服务指标监控,下面咱们经过go-zero官方的示例shorturl来演示是如何对服务指标进行收集监控的:sql
Prometheus: Host: 127.0.0.1 Port: 9091 Path: /metrics
- job_name: 'file_ds' file_sd_configs: - files: - targets.json
[ { "targets": ["127.0.0.1:9091"], "labels": { "job": "shorturl-api", "app": "shorturl-api", "env": "test", "instance": "127.0.0.1:8888" } } ]
prometheus --config.file=prometheus.yml
经过以上几个步骤咱们完成了prometheus对shorturl服务的指标监控收集的配置工做,为了演示简单咱们进行了手动的配置,在实际的生产环境中通常采用定时更新配置文件或者服务发现的方式来配置监控目标,篇幅有限这里不展开讲解,感兴趣的同窗请自行查看相关文档json
go-zero中目前在http的中间件和rpc的拦截器中添加了对请求指标的监控。api
主要从请求耗时和请求错误两个维度,请求耗时采用了Histogram指标类型定义了多个Buckets方便进行分位统计,请求错误采用了Counter类型,并在http metric中添加了path标签rpc metric中添加了method标签以便进行细分监控。浏览器
接下来演示如何查看监控指标:架构
首先在命令行屡次执行以下命令app
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是一款可视化工具,功能强大,支持多种数据来源Prometheus、Elasticsearch、Graphite等,安装比较简单请参考官方文档,grafana默认端口3000,安装好后再浏览器输入http://localhost:3000/,默认帐号和密码都为admin
下面演示如何基于以上指标进行可视化界面的绘制:
以上演示了go-zero中基于prometheus+grafana服务指标监控的简单流程,生产环境中能够根据实际的场景作不一样维度的监控分析。如今go-zero的监控指标主要仍是针对http和rpc,这对于服务的总体监控显然仍是不足的,好比容器资源的监控,依赖的mysql、redis等资源的监控,以及自定义的指标监控等等,go-zero在这方面后续还会持续优化。但愿这篇文章可以给您带来帮助