共计 2562 个字符,预计需要花费 7 分钟才能阅读完成。
基于 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