Skywalking 应用性能监控和可观测性分析平台 简介
- 应用性能监控(Application Performance Monitor, APM)
一、系统观察性问题
- 一次调用到底穿越了几个服务?
- 在处理这次请求的时候,每个服务到底做了什么操作?
- 如果请求变慢了,瓶颈在哪里?
- 如果请求失败了,到底是哪个服务或服务中的哪个部分出了问题?
二、设计目标
- 监控系统作为二线甚至三线系统,应该利用有限的环境资源,提供尽可能大的监控价值,同时尽可能降低对于运维的要求。
- 利于二次开发和集成
- 使用上是无代码侵入的,而这种无侵入的自动埋点基于 Java 的 JavaAgent 技术。
- 为不同的技术栈提供统一的监控能力,更有利于公司在未来系统架构升级中保持监控系统的一致性。
- 不是一个单纯的追踪系统,支持轻量级分析拓扑图、应用性能指标等功能。
三、技术要求
- 命名空间,每个小组或公司掌管着不同的部分,他们不希望也不应该共享他们的度量值。
- 支持部署在物理机、虚拟机或者Kubernetes集群中,支持ZooKeeper、Consul、Nacos和etcd中的一种集群管理工具。
- JDK 需要 JDK 8 及以上版本
- 不仅有 Java Agent 探针,还需要多种语言(PHP、C#、Node.js、Go等)的探针。
- 支持的存储有Elasticsearch 6、MySQL。目前,Elasticsearch也是大多数场景所使用的的存储形式,Elasticsearch 集群可以方便地管理和水平扩展,能够适应不同条件下监控数据量不同的业务场景。
- 对远程过程调用框架支持的范围,如Apache Dubbo、gRPC和Spring Cloud等。
四、监控指标
-
服务数量、平均延迟、吞吐量、服务质量、延迟等高线和 TopN 指标等。
- 各种维度的p99/p95/p90/p75/p50
- 例如p99=200ms,代表99%的请求响应时间可以小于等于200ms。
- 请求成功率、请求错误率。
- 各种维度的p99/p95/p90/p75/p50
-
拓扑图
- 服务依赖关系
-
Trace视图,Trace是分布式追踪的典型视图。
-
数据库
- 响应时间、成功率、慢SQL。
-
Kafka、RocketMQ这些常见的队列都是高性能数据处理的重要手段。
- 可以追踪到数据是如何写入到队列中,又是如何被消费掉的。
-
对内存型数据库Redis、文档型数据库MongoDB的支持。
- 在数据库驱动内植入相关插件来检查客户端对数据库的访问,并没有侵入数据库服务端。
五、告警功能
- 当告警规则达到触发条件后,需要将告警信息发送到用户指定的 Web 服务上。
- 例如,我们可能决定采用这样的SLO:平均查询请求延迟时间应小于100ms。
- 设置SLO时要充分与用户积极沟通,设置合理的目标。用户对性能往往存在过于理想化的需求,如果没有设置目标的过程,非常容易得到一个不切实际的性能目标,甚至性能目标会与系统的设计和维护目标背道而驰。