APM钉钉告警二次开发pinpoint(附带源码)

【关注公众号“SRE运维部落”,回复 “pinpoint ”分享钉钉二次开发代码给你】

APM钉钉告警二次开发pinpoint(附带源码)_第1张图片

pinpoint简介 

Pinpoint是一款韩国NAVER公司开源的全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。用于基于java的大规模分布式系统的应用监控。

基于GoogleDapper论文进行的实现,与另一款开源的全链路分析工具Zipkin类似,但相比Zipkin提供了无侵入式、代码维度的监控等更多的特性。

感兴趣的可以加入他们的钉钉官方群219815989(非广告哈)

主要功能

服务拓扑图:

对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量

实时活跃线程图:

监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解

请求响应散点图:

以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况

请求调用栈查看:

对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。

应用状态、机器状态检查:

通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。

构组成

Pinpoint 主要由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 和Web UI。

  1. HBase (用于存储)

  2. Agent组件:用于收集应用端监控数据,无侵入式,只需要在启动命令中加入部分参数即可

  3. Collector组件:数据收集模块,接收Agent发送过来的监控数据,并存储到HBase

  4. 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.熟悉相应告警规则和参数:

APM钉钉告警二次开发pinpoint(附带源码)_第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

        其余也有针对消息内容进行开发优化,可参考代码变更即可。

产生的钉钉消息推送结果如下:

APM钉钉告警二次开发pinpoint(附带源码)_第3张图片

邮件消息推送如下:

APM钉钉告警二次开发pinpoint(附带源码)_第4张图片

(二)配置批处理属性

设置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子模块功能

你可能感兴趣的:(运维监控)