【关注公众号“SRE运维部落”,回复 “pinpoint ”分享钉钉二次开发代码给你】
pinpoint简介
Pinpoint是一款韩国NAVER公司开源的全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。用于基于java的大规模分布式系统的应用监控。
基于GoogleDapper论文进行的实现,与另一款开源的全链路分析工具Zipkin类似,但相比Zipkin提供了无侵入式、代码维度的监控等更多的特性。
感兴趣的可以加入他们的钉钉官方群219815989(非广告哈)
主要功能
服务拓扑图:
对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量
实时活跃线程图:
监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解
请求响应散点图:
以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况
请求调用栈查看:
对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。
应用状态、机器状态检查:
通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。
架构组成
Pinpoint 主要由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 和Web UI。
HBase (用于存储)
Agent组件:用于收集应用端监控数据,无侵入式,只需要在启动命令中加入部分参数即可
Collector组件:数据收集模块,接收Agent发送过来的监控数据,并存储到HBase
WebUI:监控展示模块,展示系统调用关系、调用详情、应用状态等,并支持报警等功能
部署安装
(一)常用安装方式
1.在网上百度下载别人打好的war包进行部署使用,可调试监控,但是不可进行二次开发配置监控预警。
2.拉去官方代码
git clone https://github.com/naver/pinpoint-docker.git
git clone https://gitee.com/mirrors/Pinpoint.git
安装步骤:
1.HBase
搭建 HBase 集群 - Apache HBase
运行./hbase-start
创建 HBase Schemas- 在hbase shell上执行/scripts/hbase-create.hbase初始化数据库
2.构建Pinpoint (仅当从源代码开始构建时需要)
Clone Pinpoint - git clone $PINPOINT_GIT_REPOSITORY
设置 JAVA_6_HOME 环境变量到 JDK 6 home 目录.
设置 JAVA_7_HOME 环境变量到 JDK 7+ home 目录.
设置 JAVA_8_HOME 环境变量到 JDK 8 home 目录.
设置 JAVA_9_HOME 环境变量到 JDK 9 home 目录.
设置 JAVA_HOME 环境变量到 JDK home 目录.
注意:不是开玩笑,必须同时安装四个版本jdk,而且要设置5个javahome环境变量,而且必须是jdk不能是openjdk!!!!!!!!!!!!!!!!!!!!!!
(10.7.xxx.xx服务器已安装该环境,如需打包pinpoint可自行使用)
在pinpoint根目录运行 mvn install -Dmaven.test.skip=true
3.Pinpoint Collector
部署 pinpoint-collector-$VERSION.war 到web容器
配置 pinpoint-collector.properties, hbase.properties.
启动容器
4.Pinpoint Web
部署 pinpoint-web-$VERSION.war 到web容器
配置 pinpoint-web.properties, hbase.properties.
启动容器
5.Pinpoint Agent
解压/移动 pinpoint-agent/ 到一个方便的位置 ($AGENT_PATH).
设置 -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar JVM 参数以便将agent附加到java应用
设置 -Dpinpoint.agentId 和-Dpinpoint.applicationName 命令行参数
用上面的设置启动 java 应用
(二)安装参考文档
1.https://skyao.gitbooks.io/learning-pinpoint/content/installation/guide.html
2.https://naver.github.io/pinpoint/quickstart.html
使用规范
(一)服务地址
1.[http://10.7.xxx.xx:8085]无相关账号密码,后期可对应进行二次开发
(二)使用操作
仪表板:可针对应用节点的服务,端点,实例进行细度监控图标展示可针对数据库数据源的相关sql以及iqps等常用参数进行监控展示
拓扑图:各种图表应用实例全局展示,各种高大上
链路追踪:监控细度在接口级别
告警:可进行20多种监控数据的告警,可针对项目进行二次开发配置钉钉邮件
相关注意事项
1.traceid添加
可参考官方文档,描述很详细,无代码侵入,支持log4j,log4j2,logback https://github.com/naver/pinpoint/blob/master/doc/per-request_feature_guide.md
traceid加入项目日志可进行日志查询时链路追踪,方便定位故障。
例如:使用logback
修改配置pinpoint-agent/pinpoint.config
profiler.logback.logging.transactioninfo=true
修改项目配置logback.xml
%d{HH:mm} %-5level %logger{36}- [TxId : %X{PtxId} , SpanId : %X{PspanId}] %msg%n
2.消息通知配置
配置相关消息通知,目前已配置钉钉和邮件。
相关配置:
1.配置菜单页面
配置菜单
注册用户
创建用户组
添加用户到用户组
设置告警规则
2.熟悉相应告警规则和参数:
SLOW COUNT / 慢请求数
当应用发出的慢请求数量超过配置阈值时触发。
SLOW RATE / 慢请求比例
当应用发出的慢请求百分比超过配置阈值时触发。
ERROR COUNT / 请求失败数
当应用发出的失败请求数量超过配置阈值时触发。
ERROR RATE / 请求失败率
当应用发出的失败请求百分比超过配置阈值时触发。
TOTAL COUNT / 总数量
当应用发出的所有请求数量超过配置阈值时触发。
以上规则中,请求是当前应用发送出去的,当前应用是请求的发起者。
以下规则中,请求是发送给当前应用的,当前应用是请求的接收者。
SLOW COUNT TO CALLEE / 被调用的慢请求数量
当发送给应用的慢请求数量超过配置阈值时触发。
SLOW RATE TO CALLEE / 被调用的慢请求比例
当发送给应用的慢请求百分比超过配置阈值时触发。
ERROR COUNT TO CALLEE / 被调用的请求错误数
当发送给应用的请求失败数量超过配置阈值时触发。
ERROR RATE TO CALLEE / 被调用的请求错误率
当发送给应用的请求失败百分比超过配置阈值时触发。
TOTAL COUNT TO CALLEE / 被调用的总数量
当发送给应用的所有请求数量超过配置阈值时触发。
下面两条规则和请求无关,只涉及到应用的状态
HEAP USAGE RATE / 堆内存使用率
当应用的堆内存使用率超过配置阈值时触发。
JVM CPU USAGE RATE / JVM CPU使用率
当应用的CPU使用率超过配置阈值时触发。
3.钉钉告警的实现和配置:
(一)代码二次开发实现
可参考代码库
git clone https://gitee.com/xxx/xxxx.git(已进行二次开发存入私服)
【关注公众号“SRE运维部落”,回复 pinpoint 分享代码库地址给你】
主要是针对邮件发送实现类的修改,为方便快速实现钉钉告警,在邮件告警上添加了钉钉消息的触发方法
修改文件/pinpoint-master/pinpoint-master_最初邮件可用版/web/src/main/java/com/navercorp/pinpoint/web/alarm/SpringSmtpMailSender.java
其余也有针对消息内容进行开发优化,可参考代码变更即可。
产生的钉钉消息推送结果如下:
邮件消息推送如下:
(二)配置批处理属性
设置batch.properties文件中的batch.enable 标记为true:
batch.enable=true
这里的 batch.server.ip 配置用于当有多台pinpointweb server时防止并发批处理程序. 仅当服务器IP地址和 batch.server.ip 设置的一致时才执行批处理。(设置为 127.0.0.1 将在所有的web服务器上启动批处理)
batch.server.ip=X.X.X.X
注:这种防止并发的方式有点简陋而原始,存在单点故障的风险,主要缺陷:万一配置的这台容许批处理的web服务器down机,告警功能就失效了。
(三)配置mysql
搭建mysql服务器并在jdbc.properties文件中配置连接信息:
jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:13306/pinpoint?characterEncoding=UTF-8jdbc.username=admin jdbc.password=admin
运行
pinpoint/web/src/main/resources/sql/CreateTableStatement-mysql.sql 和 pinpoint/web/src/main/resources/sql/SpringBatchJobReositorySchema-mysql.sql 来创建初始化表.
3.pinpoint删除应用程序名称和/或代理ID
一旦注册了应用程序名称和代理ID,它们就会保留在HBase中,直到它们的TTL过期(默认为1年)。但是,一旦不再使用它们,您可以使用管理API主动删除它们。
删除应用名称- http://10.7.132.xx:8080/admin/removeApplicationName.pinpoint?applicationName=$APPLICATION_NAME&password=$PASSWORD
删除代理程序ID- http://10.7.132.xx:8080/admin/removeAgentId.pinpoint?applicationName=$APPLICATION_NAME&agentId=$AGENT_ID&password=$PASSWORD 请注意,password参数的值是您admin.password在pinpoint-web.properties中定义的属性。保留此空白将使您无需密码参数即可调用管理API。
默认密码admin
微信关注我【SRE运维部落】,下期分享如何将告警钉钉邮件分发到不同开发团队,划清责任界限。
Prometheus+Granafa构建高大上的MySQL监控平台
灰度部署or蓝绿部署?
高效开发:IntelliJIDEA的这些Debug技巧你都知道吗
声援Pandownload的同时,一定要懂法!
syncd一款高效开源的代码部署工具
高效开发:IntelliJIDEA的这些Debug技巧你都知道吗
运维必备:goreplay流量复制工具
一款SQL高效审计工具 | 解放DBA双手
实用技能:git子模块功能