本篇将演示如何简单的搭建起整个监控平台。当前服务主要使用语言为Go,所以下面均用Go作为后端服务。

看下服务治理的大概定义:

1、服务注册与发现。

2、可观测性。

3、流量管理。

4、安全。

5、控制。

https://www.zhihu.com/question/56125281/answer/1099439237

那监控就属于服务治理中的可观测性——常见的包括监控(Metrics)、日志(Logging)、调用追踪(Trace)。而本篇则是着重讲述监控这一点。

服务在运行时,会产生很多数据指标(CPU、内存占用,QPS等),而这些数据的产生则可由服务本身记录,例如发送一个HTTP请求,就加1,与逻辑无关,却又是与数据相关的搜集代码就是埋点操作。普通服务状态下,我们使用微服务框架去封装以及分层这一步操作。

框架

对常见协议的Metrics收集,HTTP/GRPC。

目前业务上使用的是Go-Micro,不过Go-Micro没写HTTP的指标收集,这个比较简单,需要自己添加一下,使用gin自带的也可以。

Kratosgo-zero都自带了,比较省心。

服务组件

使用docker-compose将服务一次性全部启动。

地址

docker-compose.yml中加入,钉钉通知插件。

1
2
3
4
5
6
7
8
9
10
11
12
13
#钉钉插件
webhook:
image: timonwong/prometheus-webhook-dingtalk:v1.4.0
restart: "always"
ports:
- 8060:8060
container_name: "dingtalk"
volumes:
- /etc/localtime:/etc/localtime:ro
command:
- '--ding.profile=webhook1=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxx' #token指定钉钉
networks:
- monitor-net

Token从钉钉群里的自定义机器人中获取

另外注意,dingtalk组件版本为v1.4.0,v2版本后此启动方式将报错。V2版本使用

‘config.yml’ does not exist, try --help

alertmanager/config.yml修改:

1
2
3
4
5
6
7
8
route:
receiver: 'webhook'

receivers:
- name: 'webhook'
webhook_configs:
- send_resolved: true
url: 'http://dingtalk:8060/dingtalk/webhook1/send'

prometheus的配置文件中,指定了alertmanager的地址,以及报警规则的文件位置:

1
2
3
4
5
6
7
8
9
10
# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
- "alert.rules"

alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- 'alertmanager:9093'

alert.rules文件:

1
2
3
4
5
6
7
8
9
10
11
groups:
- name: targets
rules:
- alert: monitor_service_down
expr: up == 0
for: 30s
labels:
severity: critical
annotations:
summary: "监控报警 - Monitor service non-operational"
description: "Service {{ $labels.instance }} is down."

grafana需要饼图插件的话,可以下命令获取:

1
2
3
4
# https://grafana.com/grafana/plugins/grafana-piechart-panel/

$ sudo docker exec -it -u root grafana grafana-cli plug
ins install grafana-piechart-panel

结果

展示

Kratos监控

报警

报警示例

资料

prometheus服务自发现,不需要手动去修改文件,指定prometheus的监控程序。

https://prometheus.io/blog/2018/07/05/implementing-custom-sd/

https://github.com/KatePang13/prometheus_docs/blob/main/content/blog/2015-08-17-service-discovery-with-etcd.md

prometheus服务发现实现:https://github.com/fabxc/prom_sd_example

promQL的语法:https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/promql/prometheus-query-language

非常全的对prometheus各组件采集的文档:https://erdong.site/prometheus-notes/

Prometheus 生产部署案例

多层级数据指标收集


P95、P90的值都比较重要,是查看接口性能的一个重要指标。

P95,P90值的含义

计算95线