Pinpoint介绍及docker安装方式
一、介绍
Pinpoint是用Java编写的大型分布式系统的APM(Application Performance Management应用程序性能管理)工具,受Dapper论文的启发,Pinpoint 通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系,2012年7月开始开发,在2015年1月作为一个开源项目启动, 是一个为大型分布式系统服务的n层架构跟踪平台。
Pinpoint的特点如下:
- 分布式事务跟踪,跟踪跨分布式应用的消息
- 自动检测应用拓扑,帮助你搞清楚应用的架构
- 水平扩展以便支持大规模服务器集群
- 提供代码级别的可见性以便轻松定位失败点和瓶颈
- 使用字节码检测技术添加无需修改代码的新功能
Pinpoint主要由四部分组成:
- Agent:用于收集应用端监控数据,无侵入式,向收集器发送跟踪数据
- Collector:收集器,处理agent端发送过来的数据,并持久化
- Web:展示系统调用关系、调用详情、应用状态等,并支持报警等功能
- HBase:持久化层
Agent的采集原理:
配置Pinpoint主要的点就是安装配置Agent,通过字节码增强技术(有的叫动态探针技术)来实现无侵入式的调用链采集。其核心实现还是基于JVM的javaAgent机制来实现,Agent附加到应用程序采样,也叫做埋点,主要实现是在agent配置文件pinpoint.config中修改配置profiler.collector.ip为collector所在服务器ip,这样才能将采集到的数据发送给collector收集器,然后就是为需要采集的应用程序埋点,在tomcat启动脚本catalina.sh中配置javaagent:pinpoint-bootstrap-$VERSION.jar的jar包,然后配置下id和应用程序名称就ok了,windows和linux系统的tomcat稍有不同,windows系统下tomcat的bin目录下是catalina.bat,是以bat结尾的dos批处理文件,linux系统下是catalina.sh,是以sh结尾的利用shell进行解释的脚本文件。配置好后启动就会按配置的agent路径加载,在启动的时候agent将在加载应用class文件之前做拦截并修改字节码,在class方法调用的前后加上链路采集逻辑,从而实现链路采集功能。所以叫字节码增强技术,非侵入式是说不需要修改应用的代码,就可以完成agent的部署。javaAgent的底层机制主要依赖JVMTI ,JVMTI全称JVM Tool Interface,是JVM暴露出来的一些供用户扩展的接口集合。JVMTI是基于事件驱动的,JVM每执行到一定的逻辑就会调用一些事件的回调接口(如果有的话),这些接口可以供开发者扩展自己的逻辑。但JVMTI都是一些接口合集,需要有接口的实现,这就用到了java的instrument,可以理解instrument是JVMTI的一种实现,为JVM提供外挂支持。instrument支持启动时加载和运行时加载两种方式,分别实现JVMTI的Agent_OnLoad和Agent_OnAttach方法;pinpoint目前采用的是启动时加载方式。
二、安装
安装分为docker方式安装和手动编译源码的方式安装,也可以通过QuickStart快速安装,QuickStart是使用的mvn 自带的tomcat插件来启动的webUI和collector。随着部署的服务增多,数据量上来之后,难免需要进行一些参数设置,这个时候麻烦就来了。因此如果最终目的是生产的话,直接按照Installation进行,由于使用docker方式进行安装较为方便以及学习运用下docker,所以我采用docker的方式进行安装。
安装步骤:
1.首先在已经安装git的条件下执行如下命令,如果没有安装git,可以使用yum方式进行安装,克隆该项目。
git clone https://github.com/naver/pinpoint-docker.git
克隆较慢,时间太长,所以我在windows环境下下载了项目然后传到了linux服务器上,由于传的是zip形式的压缩包所以通过yum安装了unzip然后对压缩包解压。
2.安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
3.将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose
4.查看是否安装成功
docker-compose –version
5.进入该目录
cd pinpoint-docker
6.拉取镜像并创建运行容器
docker-compose pull && docker-compose up -d
我是分步进行,首先先进行pull操作拉取镜像,这个过程非常慢,甚至出现了几次错误,然后就重新进行拉取,已经下载好的镜像不会重新下载。
下载好的镜像如下:

启动的容器如下:


三、使用
我自己装的Linux服务器IP为192.168.0.125,所以下文IP就写该地址。
1.浏览器访问Pinpoint的web页面: http://192.168.0.125:8079/,出现页面如下:

2.浏览器访问HBase页面:http://192.168.0.125:16010/,出现页面如下:

3.如果上面两个页面都能正常访问,那么docker方式部署Pinpoint成功。
4.flink是可选项,Pinpoint使用flink预统计数据来优化查询性能,flink作为目前最先进的流式处理框架,性能优秀,一致性保证,轻量级容错。浏览器访问flink页面:http://192.168.0.125:8081/,出现页面如下:

5.访问http://192.168.0.125:8000/页面的任意接口,就可以在web界面查看到访问信息。

6.首页相关介绍


Pinpoint介绍及docker安装方式的更多相关文章
- Prometheus介绍及docker安装方式
一.介绍 Prometheus是主要基于Go编写,最初在SoundCloud上构建的开源系统监视和警报工具包,它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 ...
- 调度系统Airflow1.10.4调研与介绍和docker安装
Airflow1.10.4介绍与安装 现在是9102年,8月中旬.airflow当前版本是1.10.4. 随着公司调度任务增大,原有的,基于crontab和mysql的任务调度方案已经不太合适了,需要 ...
- windows docker安装方式的比较小结
稍微小结一下使用InstallDocker 和dockertoolbox的两种方式安装的docker(名称说明可能不妥,仅代表安装方式) InstallDocker 使用的是Microsoft Hy ...
- ElasticSearch 介绍、Docker安装以及基本检索第三篇
一.简介 1.1 什么是Elasticsearch? Elasticsearch是一个分布式的开源搜索和分析引擎, 适用于所有类型的数据,包括文本.数字.地理空间.结构化和啡结构化数据.Elastic ...
- 手动安装 saltshaker-plus 版本选择特别说明(后期重点讲解Docker安装方式)
前后端都建议使用1.12版本
- 关于MYSQL数据库安装方式及相关设置简要说明
网上关于MYSQL的教程非常多,但都不是最新的,我这里只是针对最新版本的MY SQL 的安装与设置进行一个简要的说明,大部份操作都相同. 以下是按照WINDOWS 64位操作系统+MY SQL 5.6 ...
- docker安装脚本
此docker安装脚本为官方提供的,可以从网上下载,此处直接把脚本内容贴上. #!/bin/sh set -e # This script is meant for quick & easy ...
- 使用 Docker 安装 showdoc
一.简介 ShowDoc 是一个非常适合IT团队在线共享文档的工具,在线访问地址为:https://www.showDoc.cc 本来也可以直接 pull showdoc 镜像到本地,使用 docke ...
- Linux平台达梦数据库V7单实例安装方式之图形方式
一 前言 我们在学习任何一个应用时,了解它的最初步骤通常是学会如何进行安装配置,后序才去关心如何使用,学习达梦数据库也是如此,而达梦数据库的安装提供了多种方式,接下来会一一介绍每种安装方式,达梦数据库 ...
随机推荐
- Azure Container App(一)应用介绍
一,引言 容器技术正日益成为打包.部署应用程序的第一选择.Azure 提供了许多使用容器的选项.例如,我们可以使用 Azure 容器注册表来存储和管理 Docker Images.Azure Cont ...
- RepLKNet:不是大卷积不好,而是卷积不够大,31x31卷积了解一下 | CVPR 2022
论文提出引入少数超大卷积核层来有效地扩大有效感受域,拉近了CNN网络与ViT网络之间的差距,特别是下游任务中的性能.整篇论文阐述十分详细,而且也优化了实际运行的表现,值得读一读.试一试 来源:晓飞 ...
- Spring Data ElasticSearch的使用
1.什么是Spring Data Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务. S ...
- C 如何将输出的地址转化为十进制数
•需求 这两天在看内存对齐的相关问题,因此产生了一个,如何将地址转换为十进制数? 对于如下程序: void func() { int a = 10; printf("a 的地址为:%p\n& ...
- kubernetes更改coredns增加解析
kubernetes更改coredns增加解析 k8s中coredns可以为全集群提供dns解析功能, 所以如果我们要手动增加dns解析, 只需在coredns中增加dns解析对即可 1. 编辑cor ...
- Linux移植到自己的开发板(二)UBOOT和Linux
@ 目录 一.uboot跳转到Linux 二. Linux内核启动之解压阶段 三. Linux内核启动之汇编阶段 插曲:关于Kconfig和Makefile 四. Linux内核启动之C语言阶段 五. ...
- java进行远程部署与调试及原理解析
远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用. JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过 ...
- AQS分析笔记
1 介绍 AQS: AbstractQueuedSynchronizer,即队列同步器.是构建锁或者其他同步组件的基础框架.它维护了一个volatile int state(代表共享资源)和一个FIF ...
- Java 中你怎样唤醒一个阻塞的线程?
在 Java 发展史上曾经使用 suspend().resume()方法对于线程进行阻塞唤醒,但 随之出现很多问题,比较典型的还是死锁问题. 解决方案可以使用以对象为目标的阻塞,即利用 Object ...
- Redis 集群方案什么情况下会导致整个集群不可用?
有 A,B,C 三个节点的集群,在没有复制模型的情况下,如果节点 B 失败了, 那么整个集群就会以为缺少 5501-11000 这个范围的槽而不可用.