监控系统的对比:
ELK:针对日志收集,分析,查找比较有优势
Skywalking:对vm系统比较友好支持,支持OpenTracing协议
Promethous:go原生支持,pull模式,也支持push,组件配合很完美
需要解决的问题:
- 请求API监控
- 链路追踪trace
- 服务器状态监控&硬件监控&服务监控 monitor
- Go程序监控Program
- 日志监控Log
衡量指标:
数据量大小波动;请求频率;请求延时;及时报警;归因查找
| API | Trace | Monitor | Program | Log |
建议使用 | Skywalking | Skywalking | Promethous | Promethous | ELK |
数据量 | 平滑 |
| 平滑 | 平滑 |
|
请求频率 | 平滑 |
| 平滑 | 平滑 |
|
请求延时 | 平滑 | 持续时间排序 | 平滑 | 平滑 |
|
及时报警 | 支持 | 支持 | 支持 | 支持 |
|
归因查找 | Monitor+Program+Trace | Log | API | Monitor+API |
|
数据源:
Prometheus
- exporters监控主机(sdk支持)node_exporter-1.0.1.linux-amd64.tar.gz
- 源码支持 github.com/prometheus/client_golang/prometheus (Counter:收集事件次数等单调递增的数据、Gauge:收集当前的状态,比如数据库连接数、Histogram:收集随机正态分布数据,比如响应延迟、Summary:收集随机正态分布数据,和 Histogram 是类似的)
Skywalking
- go2sky 收集客户端(不成熟)仅支持trace、手动挡
- 数据存储支持es、h2、mysql、influxdb
- Nginx + Lua 的探针 https://github.com/apache/skywalking-nginx-lua
重要概念:
SpanContext:
整个调用链数据采集过程中的上下文保持和传递
Span:
Tag 节点/步骤中的关键信息,例如db类型、url类型等
Log 节点/步骤中的详细记录,例如异常时的异常堆栈、请求返回信息、sql、redis key
跨度类型:Local、Exit、Entry
组件类型:GoHttpClient...
实现:
Go2sky 利用header中sw8的保存和读取实现夸链路追踪;自行封装了redis、mysql、mq等span;对应的方法分别是:RedisSpan、MysqlSpan、MQSpan
微服跨链调用:Span2Entry节点、ExitLocal退出
网关链路调用:CreateSpan创建、Exit退出
数据存储和搜索
Grafana dashboards 13105(Kubernetes )10826(Go Metrics)9276(主机基础监控(cpu,内存,磁盘,网络))
https://grafana.com/grafana/dashboards