Linux 9自动化部署Pinpoint APM

在信息技术和系统管理领域,使用 application performance management(应用程序性能管理)来监控和管理应用程序的性能和可用性。apm 致力于检测和诊断复杂的应用程序性能问题,以保持预期的服务级别,将 it 指标转化为业务价值。
pinpoint 是一个开源的、主流的 apm 实现,灵感来自 google dapper,使用 java、php、python 开发。全球有数百万用户使用它分析架构以及跨分布式应用程序组件之间的互联。
本文将通过以下主题,介绍 pinpoint 的自动化部署,以及如何配置它监控应用:
pinpoint 介绍自动化部署 pinpoint访问 pinpoint web ui配置监控总结39.1 pinpoint 介绍本节主要从两方面讨论 pinpoint。
39.1.1 pinpoint 架构pinpoint 架构如下:
图39.1, pinpoint 架构图,图片来自 pinpoint 官网
从图中可以看到四个主要组件:
pinpoint collector:web 应用程序,收集应用数据hbase storage:开源的非关系数据库,存储 pinpoint 数据pinpoint web ui:pinpoint 前端pinpoint agent:将应用程序的数据发送到 pinpoint collector39.1.2 pinpoint 特性以下是 pinpoint 的相关特性,也是它为什么在众多 apm 中脱颖而出的原因:
提供云和主机监控;分布式事务跟踪,用于跨分布式应用程序跟踪;应用程序拓扑概览,跟踪所有组件之间的事务,以识别潜在的问题;轻量级,对系统性能影响较小;提供代码级可见性,轻松识别故障点和瓶颈;事务代码级可见性,响应模式和请求计数;提供字节码检测技术,使用中无需修改应用程序代码;自动检测应用程序拓扑,帮助技术人员了解应用程序配置;实时监控,实时观察活动线程;水平可扩展,支持大规模服务器组。39.2 自动化部署 pinpoint本节演示如何使用 ansible 与 docker,完成 pinpoint 的自动化部署。
文中使用的代码已提交至 github,可以在对应目录中查询。
39.2.1 要求ansible 主机可通过具有 sudo 权限的用户免密登录 pinpoint 主机。
有关 sudo 及免密的配置,可以参考之前的文章,或在 github 代码中查看。
39.2.2 克隆代码到 ansible 节点在 ansible 节点上执行以下命令,将自动化代码克隆到本地:
$ git clone https://github.com/weiwendi/automate.git进入 automate/playbook/ 目录,里面包含了很多组件的自动化部署。在本篇文章中,主要用到了 docker 和 pinpoint 两个目录。
39.2.3 安装 docker进入 docker/ 目录,修改 hosts 文件,指定 pinpoint 主机名或 ip。例如我的 pinpoint 主机 ip 为 10.211.55.69、主机名为 common.server.aiops.red,hosts 文件内容如下:
[nodes]common.server.aiops.red需要根据实际的 ip 或主机名称替换 'common.server.aiops.red'。
安装 docker:
ansible-playbook -i hosts playbook.yaml39.2.4 安装 pinpoint切换到 pinpoint 目录:
cd ../pinpoint/首先修改 hosts 文件,就像安装 docker 时那样,将 pinpoint 主机的 ip 或主机名写入该文件。
然后执行 possiblereboot.yaml 文件,它的作用是:
关闭 selinux关闭 firewalld更新软件包关闭 selinux 和更新软件包的过程,都可能会重启服务器,因此把这个文件独立出来,用于初次部署时执行。
执行 possiblereboot.yaml 文件:
ansible-playbook -i hosts possiblereboot.yaml最后,执行以下命令安装 pinpoint:
ansible-playbook -i hosts playbook.yaml该命令执行时间比较长,执行过程中可能会遇到报错。报错很可能是从 github 下载 pinpoint-docker 项目时的网络原因导致。
注意:
要想在自动化过程中避免下载 github 代码的网络超时引发的错误,可以提前手动将 pinpoint-docker 项目的代码克隆到 pinpoin 主机指定的目录下,然后注释 ../../roles/pinpoint/tasks/main.yml 文件中以下内容:
- name: clone pinpoint-docker project task ansible.builtin.git: repo: 'https://github.com/pinpoint-apm/pinpoint-docker.git' dest: {{ deploydir }} single_branch: true version: {{ version }}在 ../../roles/pinpoint/defaults/main.yml 文件中定义了两个变量:
---# defaults file for pinpoint#deploydir: /software/repos/pinpoint-dockerversion: 2.5.2deploydir:存放 pinpoint-docker 项目的目录version:pinpoint 版本39.3 访问 pinpoint web ui在浏览器中输入 pinpoint 主机 ip:8080 访问 pinpoint web ui。如果能正常打开页面,说明部署顺利完成。如果打不开页面,需要通过 docker ps -a 命令和 docker logs 等命令查看 pinpoint 容器的运行情况,以及检查网络连通性。
此时 pinpoint 并没有监控数据,需要通过 pinpoint agent,收集监控对象的数据。下一节我会通过三个示例演示如何监控 java 程序。
39.4 配置监控本节通过演示配置 pinpoint apm 监控 zookeeper、kafka 和 tomcat,来介绍 pinpoin 如何使用、以及它的易用性。
39.4.1 下载 pinpoint agent在 github pinpoint-apm 中下载对应版本的 agent。
示例中解压到了被监控组件主机的 /opt/pagent252/。
修改 /opt/pagent252/profiles/release/pinpoint.config 文件,把文件中所有 127.0.0.1 的地址,修改为 pinpoint 主机的 ip 地址。
39.4.2 监控 zookeeper修改 zookeeper 的启动文件,进入 zookeeper 主目录,编辑 bin/zkserver.sh,增加以下内容:
start) echo -n starting zookeeper ... if [ -f $zoopidfile ]; then if kill -0 `cat $zoopidfile` > /dev/null 2 >&1; then echo $command already running as process `cat $zoopidfile`. exit 1 fi fi nohup $java $zoo_datadir_autocreate -dzookeeper.log.dir=${zoo_log_dir} -dzookeeper.log.file=${zoo_log_file} -dzookeeper.root.logger=${zoo_log4j_prop} -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar # 新增内容 -dpinpoint.agentid=zk01 # 新增内容 -dpinpoint.applicationname=zk # 新增内容 -xx:+heapdumponoutofmemoryerror -xx:onoutofmemoryerror='kill -9 %p' -cp $classpath $jvmflags $zoomain $zoocfg > $_zoo_daemon_out 2 >&1 $console_output_file 2 >&1 < /dev/null &else exec $java $kafka_heap_opts $kafka_jvm_performance_opts $kafka_gc_log_opts $kafka_jmx_opts -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar -dpinpoint.agentid=kafka2 -dpinpoint.applicationname=kafka $kafka_log4j_opts -cp $classpath $kafka_opts $@fi-javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar -dpin point.agentid=kafka2 -dpinpoint.applicationname=kafka 为新增内容。
重启 kafka 服务,使配置生效。再次查看 web ui:
图39.3, 监控 kafka
39.4.4 监控 tomcat在 tomcat 节点上,准备好 pinpoint agent。
修改 tomcat bin/catalina.sh 文件,在文件开始部分增加以下内容:
#!/bin/sh# 新增内容catalina_opts=$catalina_opts -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jarcatalina_opts=$catalina_opts -dpinpoint.agentid=tomcat1catalina_opts=$catalina_opts -dpinpoint.applicationname=tomcat保存并重启 tomcat 服务,然后查看 web ui:
图39.4 监控 tomcat 内存堆栈等使用
再来看看 tomcat 调用链路拓扑及接口响应信息:
图39.5, 链路追踪与自动生成拓扑
39.5 总结pinpoint apm 是常用的链路跟踪及监控工具,本教程演示了 pinpoint apm 的自动化部署,以及如何配置 pinpoint 监控 java 程序。教程同样适用于其他基于 rpm 的 linux 发行版。

RTOS实时操作系统怎么执行多任务的?
智能开发者大会——做足生态系统的设备环节
大陆攻克车载应用障碍 推出全新互联网解决方案
协作机器人发展迅速,库卡LBR iiwa成为领军者
8种值得应用开发者关注的增强现实工具包
Linux 9自动化部署Pinpoint APM
光学工程师和结构工程师高度协同合作的光学模拟设计分析软件TracePro
君迪新车质量研究显示,新能源汽车新车质量问题数远高于燃油车
PM2.5传感器的性能性及主要应用有哪些
小米官网宣布即将发布高品质、高性价手机:小米6Plus、红米Pro2、小米MIX2、红米Note5谁将首发?
华为荣耀10明夏发布,配置没的说,外观却有点奇怪
直接甲醇燃料電池
什么是光纤跳线?什么是尾线?有何区别?
微软HoloLens 2开发版正式在美国上市:售价约23412元,总价值31773元
Imagination举行媒体分享会:未来将进一步加大中国区投入
AMD Radeon 20.11.3驱动:修复RX 6000性能过低bug
光纤通信新技术
iPhoneX还未发布时就很高调,只有这台oppor11销量排第一的国产手机却如此低调
国产热成像仪排名,热成像仪的功能与作用
OPPOR9s、vivoX9、iPhone7 Plus、lgg5女神最爱,OPPOR9s领衔最具突破性拍照手机