需求背景
根据我们的业务背景,需要监控3个纬度。
- Iaas层:即腾讯云的基础设施CVM
- Paas层:即使用的腾讯云Paas服务,各种中间件
- Saas层:即我们本身的服务指标监控。
腾讯云监控,可以覆盖1,2场景, 我们只需根据业务需求配置告警策略即可。场景3-Saas层监控可以分为服务状态监控、异常日志监控和接口监控。
由于我们使用了微服务框架TSF,服务状态监控和异常日志监控都可以通过云监控策略进行覆盖。至于接口监控,云监控无法满足需求,主要原因是我们语言框架不是TSF支持spring cloud,我们使用的是golang,微服务框架是公司内部的trpc-go,TSF对此支持不够友好,无法使用TSF的服务/接口监控能力,因此我们只能使用其他监控工具来补齐。
监控需求分析
系统使用网关(可理解为nginx)作为接入层,且我们将访问日志存储到了elasticsearch数据库,因此我们可根据接口日志进行分析,使用grafana做可视化监控和告警,es作为数据源。
监控大盘效果
下图是的访问日志监控大盘。
监控配置
目前腾讯云grafana可以免费创建,内网访问只收取内网负载均衡费用,非常划算。
- 创建grafana, 可开启腾讯云SSO登录,方便团队其他成员访问;
- 配置数据源,Configuration => Data sources => add data source,根据业务存储选择数据源,例如选择Elasticsearch,配置好IP:Port和认证方式;
- 安装插件,见腾讯云文档,我在安装goshposh-metaqueries-datasource插件时失败,后面找腾讯云助手才解决问题,安装失败的时候,需要编辑配置文件Grafana.ini,添加配置项如下:
[plugins]
allow_loading_unsigned_plugins=goshposh-metaqueries-datasource
插件按需安装,我们添加metaqueries数据插件主要是需要进行聚合计算,例如计算请求成功率,计算所有是请求A,计算所有成功请求B,使用该插件即可写表达式: B/A 来表达成功率,插件帮忙文档见:https://grafana.com/grafana/plugins/goshposh-metaqueries-datasource/
- 配置监控大盘,按照业务需求创建监控面板,可参考帮助文档:https://grafana.com/tutorials/?utm_source=grafana_gettingstarted,我们业务的监控面板包括以下几项
- 每分钟请求成功率
- 每分钟请求耗时分区统计
- 每分钟httpCode分布
- 路由请求量/min
- 路由请求平均时延/min
- 路由失败请求时延/min
- path请求量/min
- path请求平均时延/min
- path失败请求时延/min
- 接口延时排序图
- 配置告警,腾讯云grafana已经打通云监控告警模版,可以选择已经配置好的通知人模版应用到grafana,如下图:
添加后,可以在每个告警面板里面配置告警策略,选择要通知的人。
踩坑总结
- grafana 目前只能安装指定插件,但是我只能安装指定插件,不过基本上主流插件都囊括了,问题是在我安装goshposh-metaqueries-datasource 插件失败,找人工协助之后,添加插件配置后再次安装才成功。
- grafana 添加mysql数据源失败,我给grafana创建mysql查询权限的账号,配置账号的ip时,直接查看了,内网IP如下图位置:
但是添加一直失败提示:db query error: query failed - please inspect Grafana server log for details
我怀疑时grafana管理控制台的内网ip不是真实的容器IP,于是找腾讯云小助手请教是不是真实的容器IP,小助手说是的,但是最后却一直无法添加数据源,小助手找到研发最终明确了这个内网IP是CLB的IP不是真实容器IP,最后他提供真实容器IP之后,才解决问题。