全链路监控
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求 往往需要涉及到多个服务。这些服务可能不同编程语言开发,不同 团队开发,可能部署很多副本。因此,就需要一些可以帮助理解系 统行为、用于分析性能问题的工具,以便发生故障的时候,能够快 速定位和解决问题。全链路监控组件就在这样的问题背景下产生了。
全链路性能监控 从整体维度到局部维度展示各项指标,将跨应用的 所有调用链性能信息集中展现,可方便度量整体和局部性能,并且 方便找到故障产生的源头,生产上可极大缩短故障排除时间。
全链路监控解决什么问题
• 请求链路追踪:通过分析服务调用关系,绘制运行时拓扑信息,可视化展示
• 调用情况衡量:各个调用环节的性能分析,例如吞吐量、响应时间、错误次数
• 容器规划参考:扩容/缩容、服务降级、流量控制
• 运行情况反馈:告警,通过调用链结合业务日志快速定位错误信息
全链路监控选择依据
全链路监控系统有很多,应从这几方面选择:
• 探针的性能消耗
APM组件服务的影响应该做到足够小,数据分析要快,性能占用小。
• 代码的侵入性 即也作为业务组件,应当尽可能少入侵或者无入侵其他业务系统, 对于使用方透明,减少开发人员的负担。
• 监控维度 分析的维度尽可能多。
• 可扩展性 一个优秀的调用跟踪系统必须支持分布式部署,具备良好的可扩展 性。能够支持的组件越多当然越好。
主流系统:zipkin、skywalking、pinpoint
Pinpoint 介绍
Pinpoint是一个APM(应用程序性能管理)工具,适用于用Java/PHP编写的大型分布式系统。
特性:
服务器地图(ServerMap)通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点 会 展示这个模块的详情,比如它当前的状态和请求数量。
实时活动线程图 (Realtime Active Thread Chart) :实时监控应用内部的活动线程。
请求/响应分布图( Request/Response Scatter Chart ) :长期可视化请求数量和应答模式来定位潜在问题。 通过在图表上拉拽可以选择请求查看 更多的详细信息。
调用栈( CallStack ):在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点。
检查器( Inspector ) :查看应用上的其他详细信息,比如CPU使用率,内存/垃圾回收,TPS,和JVM参数。
Pinpoint 部署
https://github.com/naver/pinpoint
https://github.com/naver/pinpoint-docker
安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce -y curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io systemctl start docker systemctl enable docker 安装Docker-compose # sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose # docker-compose --version docker-compose version 1.23.1, build b02f1306 安装pinpoint git clone https://github.com/naver/pinpoint-docker.git cd pinpoint-docker docker-compose pull && docker-compose up -d # docker ps -a |awk '{print $2}' ID pinpointdocker/pinpoint-quickstart pinpointdocker/pinpoint-agent:1.8.5 pinpointdocker/pinpoint-web:1.8.5 pinpointdocker/pinpoint-collector:1.8.5 flink:1.3.1 flink:1.3.1 zookeeper:3.4 zookeeper:3.4 pinpointdocker/pinpoint-hbase:1.8.5 zookeeper:3.4 pinpointdocker/pinpoint-mysql:1.8.5
-
Pinpoint 主要由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 和 Web UI
-
Agent组件:用于收集应用端监控数据,无侵入式,只需要在启动命令中加入部分参数即可
-
Collector组件:数据收集模块,接收Agent发送过来的监控数据,并存储到HBase
-
WebUI:监控展示模块,展示系统调用关系、调用详情、应用状态等,并支持报警等功能
-
Quickstart:官方提供了一个测试用的应用
-
Pinpoint-Mysql是使用“报警”功能所必需的。它的服务器在端口13306上运行,并包含用于注册要发送的用户,组和警报的数据结构。如果不需要可以不安装
浏览器访问PinPoint WEB
我们启动pinpoint-quickstart演示实例,过一会数据采集完成,可以在浏览器看到数据。
Pinpoint Agent部署
Tomcat: # catalina.sh CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar" CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID" CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME" Jar: java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=$AGENT_ID -Dpinpoint.applicationName=$APPLICATION_NAME xxx.jar