微服务链路监控系统-Pinpoint
全链路监控
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求 往往需要涉及到多个服务。这些服务可能不同编程语言开发,不同 团队开发,可能部署很多副本。因此,就需要一些可以帮助理解系 统行为、用于分析性能问题的工具,以便发生故障的时候,能够快 速定位和解决问题。全链路监控组件就在这样的问题背景下产生了。 全链路性能监控 从整体维度到局部维度展示各项指标,将跨应用的 所有调用链性能信息集中展现,可方便度量整体和局部性能,并且 方便找到故障产生的源头,生产上可极大缩短故障排除时间。
全链路监控解决什么问题
• 请求链路追踪:通过分析服务调用关系,绘制运行时拓扑信息,可视化展示 • 调用情况衡量:各个调用环节的性能分析,例如吞吐量、响应时间、错误次数 • 容器规划参考:扩容/缩容、服务降级、流量控制 • 运行情况反馈:告警,通过调用链结合业务日志快速定位错误信息
全链路监控选择依据
全链路监控系统有很多,应从这几方面选择:
• 探针的性能消耗
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
- P1903 【模板】分块/带修改莫队(数颜色)
- 前端如何获取http状态码400的返回值
- 不确定行数的多行文本垂直水平居中的css
- Vue slot简单理解
- css实现图片横向排列滚动
- windows下nvm安装node之后npm命令找不到问题解决办法
- 元素加了position:absolute则该元素的text-align:center居中失效的解决办法
- Chrome设置断点的各种姿势
- React-native踩坑小记
- 带修改莫队算法
- P2590 [ZJOI2008]树的统计
- #103. 子串查找
- P2051 [AHOI2009]中国象棋
- P2216 [HAOI2007]理想的正方形(二维RMQ)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法