全链路监控是什么
全链路监控解决什么问题
- 请求链路追踪:通过分析服务调用关系,绘制运行时拓扑信息,可视化展示
- 调用情况衡量:各个调用环节的性能分析,例如吞吐量、响应时间、错误次数
- 容器规划参考:扩容/缩容、服务降级、流量控制
- 运行情况反馈:告警,通过调用链结合业务日志快速定位错误信息
全链路监控选择依据
全链路监控系统有很多,应从这几方面选择:
- 探针的性能消耗
APM组件服务的影响应该做到足够小,数据分析要快,性能占用小。 - 代码的侵入性
即也作为业务组件,应当尽可能少入侵或者无入侵其他业务系统,
对于使用方透明,减少开发人员的负担。 监控维度
分析的维度尽可能多。 • 可扩展性
一个优秀的调用跟踪系统必须支持分布式部署,具备良好的可扩展性。能够支持的组件越多当然越好。主流系统:zipkin、skywalking、pinpoint
Pinpoint 介绍
- Pinpoint是一个APM(应用程序性能管理)工具,适用于用Java/PHP编写的大型分布式系统。
特性:
- 服务器地图(ServerMap)通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点会,展示这个模块的详情,比如它当前的状态和请求数量。
- 实时活动线程图 (Realtime Active Thread Chart): 实时监控应用内部的活动线程。
- 请求/响应分布图( Request/Response Scatter Chart ): 长期可视化请求数量和应答模式来定位潜在问题。通过在图表上拉拽可以选择请求查看 更多的详细信息
- 调用栈( CallStack :在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点。
- 检查器( Inspector ): 查看应用上的其他详细信息,比如CPU使用率,内存/垃圾回收,TPS,和JVM参数。
Docker 部署 Pinpoint
1 | git clone https://github.com/naver/pinpoint-docker.git |
1 | [root@k8s-master2 opt]# yum install git |
Pinpoint Agent 部署
探针 随着服务一起启动
1 | # Tomcat: |
1 | # Jar: |
JAR包下载地址
微服务接入Pinpoint
服务启动时指定 Pinpoint
1 | # 每个组件 都需要配置指定 |
1 | CMD java -jar |
1 | # 修改配置文件的 服务端地址 |
重新部署 查看采集情况
1 | # eureka 属于基础组件 无需每次都重新启动配置 一般都是手动部署 发布的时候不要重新部署 |
1 | [root@k8s-master1 k8s]# cat docker_build.sh |
1 | # 使用脚本重新构建项目 |
查看采集
1 | # 启动日志中是否含有 pinpoint 加载 |
监控JAVA应用 都需要监控哪些指标
- JVM相关,堆内存:年轻代,老年代(持久常用对象 不断gcc),非堆内存(持久代,1.9后没有了)
- 线程数量
- GCC(垃圾回收) ,G1,CMS
- CPU利用率
- 堆栈跟踪 哪段代码堆内存使用高,cpu使用高
- 接口状态
- 吞吐量
堆栈信息
- 有利于开发定位问题
响应时间 和 load 传入事务 (并发)
1个请求5秒
堆内存
- id对应pod
- Non-Heap Usage : 非堆内存(持久代)
- Heap Usage : 堆内存:年轻代+老年代 , 堆内存的使用率快到达了堆内存大小,那么要重新分配
- JVM/System Cpu Usage : CPU消耗
- Transactions Per Second : 每秒事务传输,相当于并发平均
- Active Thread : 活动线程
- Response Time : 请求响应时间
- Open File Descriptor : 打开文件描述符的数量