Golang链路追踪监控

监控系统的对比:

ELK:针对日志收集,分析,查找比较有优势

Skywalking:对vm系统比较友好支持,支持OpenTracing协议

Promethous:go原生支持,pull模式,也支持push,组件配合很完美

 

需要解决的问题:

  1. 请求API监控
  2. 链路追踪trace
  3. 服务器状态监控&硬件监控&服务监控 monitor
  4. Go程序监控Program
  5. 日志监控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

你可能感兴趣的:(编程进阶之架构设计)