使用pinpoint进行SpringCloud服务链监控

前言

在使用微服务架构时,客户的一个请求可能会经过多个微服务、模块、中间件,那么如何确定客户端的一次操作背后调用了哪些微服务、模块、中间件,调用的先后顺序是怎样的,每个服务的性能如何?随着业务系统日趋复杂,系统中需要调用链的监控来解决这个问题。

Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具。一个分布式跟踪系统,基于google Dapper实现,用于基于java的大规模分布式系统,通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。pinpoint 有3个主要组件组成:Collector、Web、Agent,采用HBase进行存储。 Collector和Web都是WAR包,Agent采用一个JAVA应用程序加载。

安装部署

这里采用docker的方式部署pinpoint。相关的Dockerfile及docker-compose.yml参见https://gitee.com/tinylk/docker-pinpoint 。

构建docker镜像

  • 进入 pinpoint-web目录 执行docker build -t tinylk/pinpoint-web:1.8.2 . 命令构建镜像
  • 进入 pinpoint-hbase目录 执行 docker build -t tinylk/pinpoint-hbase:1.8.2 . 命令构建镜像
  • 进入 pinpoint-collector目录 执行 docker build -t tinylk/pinpoint-collector:1.8.2 . 命令构建镜像
  • 进入 pinpoint-mysql docker build -t tinylk/pinpoint-mysql:1.8.2 . 命令构建镜像
  • 进行构建时会下载hbase与pinpoint的war包,如果需要加快速度可以实现下载好hbase与pinpoint放在本地web服务器上,然后修改Dockerfile中PINPOINT_REPOSITORY与HBASE_REPOSITORY的地址从本地服务器下载。pinpoint的下载地址为:https://github.com/naver/pinpoint/releases,hbase的下载地址为:http://archive.apache.org/dist/hbase,下载的版本请保持与Dockerfile中一致。
  • pinpoint如果需要使用报警功能需要使用mysql,pinpoint-mysql中的建表sql文件来自于:https://github.com/naver/pinpoint/blob/master/doc/alarm.md。
  • pinpoint的报警时发送邮件功能需要自己实现代码,pinpoint-web中的mail.zip为发送邮件功能实现。文件来自于https://github.com/naver/pinpoint-docker/tree/master/pinpoint-web/build

运行容器

运行docker-compose命令启动pinpoint。启动后使用浏览器打开http://localhost:58080地址访问pinpoint界面。

docker-compose up -d
  • docker-compose.yml中pinpoint-web里面email相关配置请修改为自己的邮箱配置。

使用Pinpoint Agent收集调用信息

部署好pinpoint服务端后,就可以通过pinpoint agent来收集java应用信息。Pinpoint Agent采用javaagent无侵入的方式实现了应用调用信息的收集,原应用程序无需做任何改动。只需要在启动时增加javaagent参数。启动时参数如下:

Java -javaagent:/opt/pinpoint-agent-1.8.2/pinpoint-bootstrap-1.8.2.jar -Dpinpoint.agentId=demo1 -Dpinpoint.applicationName=demo –jar demo.jar

说明:

  1. javaagent 参数必须在 jar参数之前;
  2. pinpoint.agentId 应用实例的唯一标识(可以采用主机名+应用名);
  3. pinpoint.applicationName 相同的名称表示相同服务的一组应用实例;
  4. 启动前需要修改pinpoint.config 文件中的相应配置:
profiler.collector.ip (collector的ip地址 xxx.xxx.xxx.xxx)
profiler.collector.tcp.port (collector's collector.tcpListenPort - default: 9994)
profiler.collector.stat.port (collector's collector.udpStatListenPort - default: 9995)
profiler.collector.span.port (collector's collector.udpSpanListenPort - default: 9996)
profiler.sampling.rate=1(数据采样率,搜集数据的比率,默认为20即为1/20 5%,如想改为100%即设为1)

pinpoint的web界面

ServerMap – 可视化的方式显示服务的依赖关系及调用计数。.

ServerMap

CallStack – 每次请求的调用过程,查看故障点及瓶颈。

CallStack

Inspector - 查看应用程序的其他详细信息,如CPU使用情况,内存/垃圾收集,TPS和JVM参数。

Inspector

pinpoint的CallStack 界面需要从ServerMap界面右上角图表中用鼠标拖拽矩形框选择后进入。

报警邮件通知配置

Pinpoint-web会定期检查应用程序的状态,如果满足某些预先配置的规则时会触发警报。

Web模块中的后台批处理程序默认情况每3分钟检查一次预定义规则。 满足规则后,批处理程序将向注册到用户组的用户发送短信/电子邮件。

一.配置用户及规则

  1. 点击主界面右上角配置按钮,进入配置界面

  2. 注册用户

  3. 创建用户组

  4. 添加用户及用户组

  5. 设置报警通知规则

二.实现邮件发送代码及配置

为了使用报警功能,必须实现com.navercorp.pinpoint.web.alarm.AlarmMessageSender类的发送邮件和SMS的方法,并配置将其注册至Spring中。当警报触发时, AlarmMessageSender#sendEmail和 AlarmMessageSender#sendSms 方法将会被调用。(本部分已经在前面docker安装部署中配置好)

报警通知的详细内容介绍请参见:https://github.com/naver/pinpoint/blob/master/doc/alarm.md

参考地址

  • https://github.com/naver/pinpoint-docker
  • https://github.com/dawidmalina/docker-pinpoint
  • https://github.com/naver/pinpoint/blob/master/doc/alarm.md

你可能感兴趣的:(使用pinpoint进行SpringCloud服务链监控)