背景

程序的监控一直是程序员最头痛的事情之一,现网程序有问题怎么办?看进程看端口 top/free/df 三件套?网络抓包?看日志?所以为了满足这些初级需求很多公司都做了主机监控,进程端口监听等功能,例如主机磁盘满/只读告警,端口不监听告警。这些基础的监控说到底都是黑盒监控,并没有进入到程序内部的调用链里面,程序内部的运行情况完全是两眼一抹黑,导致是该模块本身有问题还是下游的依赖模块出了问题,完全不知道,只能看一行行看日志慢慢确认。换言之,我们需要的是一个分布式调用链追踪系统,能够清楚的描述程序的调用关系,每一跳的耗时,以及请求数量的统计,很明显,Pinpoint就是我们要找的工具。

Pinpoint

Pinpoint 是一个APM(Application performance management)工具,相对于其他APM工具(例如ZipKin)有一个强大的优势,那就是应用程序无需修改一行代码就能直接使用,例如Java程序直接使用Pinpoint提供的Java agent(jar包)就能使用。目前Pinpoint直接Java/PHP/Python三种语言,未来可能会支持更多语言,开源社区极其活跃,版本迭代比较快。

Pinpoint的优势

除了上面谈到的对用户代码无嵌入外,Pinpoint还有以下优势:

1.强大的UI

UI会自动识别程序的调用关系并且绘制图表,支持的组件多,例如Tomcat/Jetty/JBoss/Thrift/Kafka/Mysql等等。

2.调用链信息全

除了能看到调用关系及每一级耗时外,还能看到每一级的参数及SQL。

3.高性能

在JVM字节码层做处理,程序的性能损耗小于3%。

Pinpoint架构

由Pinpoint官方给出的架构图我们可以看出,Pinpoint Agent负责采集用户程序的信息 通过 网络将信息发给服务端 Pinpoint Collector,Pinpoint Collector将数据持久化到Hbase中,前端Web UI从Hbase中读取数据展示给用户。是一个标准的C/S分布式架构,选中Hbase的原因想必是为了支持海量数据。

安装实验

以下记录比较流水,由于笔者实验已经已经安装JDK1.8所以没有这块的安装说明。

安装zookeeper

理论上不用安装,hbase默认会拉起zookeeper,不过是单机的

https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

安装步骤参考:https://blog.csdn.net/yuan_xw/article/details/47148401

安装hbase

https://www.apache.org/dyn/closer.lua/hbase/1.4.13/hbase-1.4.13-bin.tar.gz

注意设置JAVA_HOME环境变量,修改/data/hbase-1.4.13/conf/hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/

cd /data/hbase-1.4.13/bin

./start-hbase.sh

创建hbase pinpoint相关表

https://github.com/naver/pinpoint/tree/master/hbase/scripts

$HBASE_HOME/bin/hbase shell hbase-create.hbase

$HBASE_HOME/bin/hbase shell hbase-create-snappy.hbase

安装tomcat

参考:https://blog.csdn.net/lcyaiym/article/details/76696192

https://tomcat.apache.org/download-90.cgi 下载 apache-tomcat-9.0.37.tar.gz

mkdir /usr/local/tomcat

mv apache-tomcat-9.0.37/* /usr/local/tomcat

cd /usr/local/tomcat/bin

./startup.sh

安装pinpoint collector

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下载 pinpoint-collector-2.0.4.war

启动

rm -rf /usr/local/tomcat/webapps/*

unzip pinpoint-collector-2.0.4.war -d /usr/local/tomcat/webapps/ROOT

/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/profiles/release

配置中有关zookeeper的配置都改成localhost

根据 /usr/local/tomcat/logs/catalina.out 的报错信息进行排查。

注意修改主机名,collector注册zookeeper节点用的是主机名供其他服务发现,所以要确保DNS能正确解析。

安装pinpoint web

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下载 pinpoint-web-2.0.4.war

rm -rf /usr/local/tomcat/webapps/*

unzip pinpoint-web-2.0.4.war -d /usr/local/tomcat/webapps/ROOT

把 /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/jdbc.properties 文件清空。

安装测试pinpoint agent

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下载 pinpoint-agent-2.0.4.tar.gz

mkdir /usr/local/tomcat

mv apache-tomcat-9.0.37/* /usr/local/tomcat

rm -rf /usr/local/tomcat/webapps/*

unzip test.war -d /usr/local/tomcat/webapps/ROOT

/usr/local/tomcat/bin/catalina.sh 中加入以下三项配置:

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/pinpoint/pinpoint-agent-2.0.4/pinpoint-bootstrap-2.0.4.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp20200906"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=JustTestPP"

配置说明:

agentId 表示该实例的唯一标识,是全局唯一的ID。

applicationName 表示同一服务。

例如有一个购买服务,但是有两个实例,那么就可以这样定义:

agentId=buy1

applicationName=buysercie

agentId=buy2

applicationName=buysercie

问题定位

只有开始的两条记录能被统计到,之后的记录无法统计

解决方法:

修改

/data/pinpoint/pinpoint-agent-2.0.4/pinpoint.config

/data/pinpoint/pinpoint-agent-2.0.4/profiles/release/pinpoint-env.config

/data/pinpoint/pinpoint-agent-2.0.4/profiles/local/pinpoint-env.config

中 profiler.sampling.rate 值改为1,表示每一条记录都采集。默认是20,表示每20条采集一条。

问题定位参考官方的FAQ http://naver.github.io/pinpoint/faq.html

github issue记录 https://github.com/naver/pinpoint/issues

参考

http://naver.github.io/pinpoint/installation.html 

http://naver.github.io/pinpoint/videos.html
https://www.cnblogs.com/yyhh/p/6106472.html

Pinpoint 一款强大的APM工具的更多相关文章

  1. Java程序员都应该去使用一下这款强大的国产工具类库

    这不是标题党,今天给大家推荐一个很棒的国产工具类库:Hutool.可能有很多朋友已经知道这个类库了,甚至在已经在使用了,如果你还没有使用过,那不妨去尝试一下,我们项目组目前也在用这个.这篇文章来简单介 ...

  2. T4代码生成脚本从添加注释,添加命名空间开始(一款强大的代码生成工具从看懂脚本,到随心所欲的玩弄代码,本文只是T4的冰山一角,博主将不断深入探索并完善该文章)

    精通T4脚本要从读懂脚本的关键代码片段开始  1.1. 给类添加注释-->看懂类对应的代码:<#=codeStringGenerator.EntityClassOpening(entity ...

  3. 5款强大的Java Web开发工具

    1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...

  4. Animo.js :一款管理 CSS 动画的强大的小工具

    Animo.js 是一个功能强大的小工具,用于管理 CSS 动画.它的特色功能包括像堆栈动画,创建跨浏览器的模糊,设置动画完成的回调等等.Animo 还包括惊人的 animate.css,为您提供了近 ...

  5. [推荐] kylinPET是一款功能强大的性能测试工具

    [推荐] kylinPET是一款功能强大的性能测试工具 官方网站: http://www.kylinpet.com/

  6. [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler

    [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler 1 官方网站:http://memprofiler.com/2 下载地址:http://memprofiler. ...

  7. Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。

    Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说... root@xi4ojin:~# cd ...

  8. Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统,基于Google Dapper论文

    Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统,基于Google Dapper论文 ...

  9. 3款强大的BootStrap的可视化制作工具推荐

    http://www.25xt.com/html5css3/7342.html 25学堂看到最近很多朋友在学习Bootstrap前端主题框架.顾让25学堂的小编给大家找来了3款适合Bootstrap初 ...

随机推荐

  1. Python 教你自动发微博,每日一句英语

    作者:周萝卜 最近在研究用 Python 来制作各个类别的机器人,今天先来分享一个自动发布新浪微博的机器人. 基本思路 其实要实现一个简单的自动发布微博机器人还是不难的,只需要每天按时找好要发布的素材 ...

  2. 字节跳动:[编程题]万万没想到之聪明的编辑 Java

    时间限制:1秒 空间限制:32768K 我叫王大锤,是一家出版社的编辑.我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误.但是,优秀的人总能在平凡的工作中发现真理.我发现 ...

  3. 2020-04-06:为什么HashMap不一直使用红黑树?

    红黑树的阈值是8,当链表大于等于8时链表变成了红黑树结构,大大减少了查找的时间. 当长度低于6时会由红黑树转成链表,TreeNodes占用空间是普通Nodes的两倍,所以只有当bin包含足够多的节点时 ...

  4. C#LeetCode刷题之#39-组合总和(Combination Sum)

    目录 问题 示例 分析 问题 该文章已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3663 访问. 给定一个无重复元素的数组 candi ...

  5. Vue element-ui el-table阻止行选事件

    我们经常会在某个table末尾加上操作列来放置button来处理跳转和其他的逻辑 那么当点击button的时候同样也会执行在el-table 设置的 @row-click="handleRo ...

  6. CPF 入门教程(一)

    CPF netcore跨平台UI框架 开发之前,你需要先安装VS2019.为什么要vs2019?因为VS2019才能支持netcore3.0以上,netcore3.0之后才能发布独立的程序,之前的都只 ...

  7. 粗略总结for循环与foreach()循环区别

    for循环和foreach循环其实可以算得上是从属关系的,即foreach循环是可以转化成for循环,但是for循环不一定能转换成foreach循环. 下面简单介绍一下两种循环: .for循环 代码格 ...

  8. JavaFX桌面应用-视频转码工具(支持爱奇艺qsv转mp4)

    最近由于需要将在爱奇艺下载的视频(qsv)转化了mp4,用JavaFX开发一个视频转码工具,算是JavaFX开发的第一个应用吧. 支持qsv转码mp4,理论上支持各种格式,仅测试了flv,qsv格式. ...

  9. Jmeter 常用函数(1)- 详解 __Random

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 产生一个随机数 语法格式 ${__Ra ...

  10. Jmeter 常用函数(21)- 详解 __char

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 根据给定的字符值转换成 Unicode ...