容器监控
Why?How? What?
考虑因素
监控对象是什么?监控哪些指标?从哪些维度监控?
从全局,机房,机架,物理机,虚拟机,容器实例,服务本身等多个维度。
基础监控:
- CPU
- 磁盘
- 内存
- 网络
- 系统调用
- 上下文切断
- 等等
日志汇总:
- 错误告警
服务调用:
- 请求量
- 响应时间:平均,最小,最大,P90,P95,P99,区间
- 错误率
- 调用链
- 调用拓扑图
架构
- 数据采集:推,拉,关键在于控制采样率
- 数据传输: 传输方式(UDP,TCP,消息队列),传输格式(二进制,文本)
- 数据处理:分析,存储(时序数据库,索引数据库 )
- 数据展示:多维度展示(曲线图,饼状图,格子图,柱状图),告警
可选方案
基础监控:
- 采集:Telegraf,collectd,slfow,nagios,sensu,riemann,
- 传输:TCP,UDP,HTTP
- 分析:Kapacitor
- 存储:InfluxDB,timeScale
- 展示:grafana(优选),chronograf
服务追踪
Google Dapper, Naver Pinpoint, opentracing, 大众 CAT,Twitter Zipkin,阿里鹰眼,美团 MTrace
- 采集: jmx, 埋点,代理,服务接口,字节码注入
- 传输:http,消息队列(Kafaka,RabbitMQ)
- 分析:实时(storm,spark,flink),离线(hadoop)
- 存储:HBase,Cassandra,Mysql,Elasticsearch
- 展示:
日志汇总
- 采集:fluentd,logstash,rsyslog,syslog,Beats
- 传输:TCP,UDP,消息队列(kafaka,rabbitmq)
- 分析:ElasticSearch
- 存储:
- 展示:Kibana
Graphite
收集( StatsD,Carbon),存储,Graphite-Web。
- Whisper 简单的时序数据库,不适合大数据量,不支持灵活查询语句
- Graphite-Web 支持正则表达式,函数。
Prometheus
- PromQL 查询语言
TICK Stack
- InfluxDB 支持类 SQL 的查询语句
其中只有 Prometheus 是拉模式,其余都是推模式。
名称 | 功能完整度 | 成熟度 | 活跃度 | 用户数 | 定制成本 | 维护成本 | 行业 | 标准 | 备注 |
---|---|---|---|---|---|---|---|---|---|
服务追踪
优点:
- 找到系统瓶颈
- 优化链路调用:定位跨机房、区域调用导致的问题,循环调用
- 生成网络拓扑
可选方案
OpenZipkin
- 社区活跃度高
- 功能:多语言支持,指标简单
- 维护性:集成难度高,定制难度低
- 规范:没有遵循 opentracing
pinpoint
- 功能:只支持 Java,指标详尽
- 维护成本:集成简单,定制难
- 规范:没有遵循 opentracing
skywalking
Jaeger
名称 | 功能完整度 | 成熟度 | 活跃度 | 用户数 | 定制成本 | 维护成本 | 行业标准 | 备注 |
---|---|---|---|---|---|---|---|---|
PinPoint | ||||||||
OpenZipkin | ||||||||
skywalking | ||||||||
Jaeger |
参考
附录
选项考虑因素
- 功能完整度
- 成熟度
- 活跃度
- 用户数
- 定制成本
- 维度成本
- 是否实现相关行业标准