程序的监控一直是程序员最头痛的事情之一,现网程序有问题怎么办?看进程看端口 top/free/df 三件套?网络抓包?看日志?所以为了满足这些初级需求很多公司都做了主机监控,进程端口监听等功能,例如主机磁盘满/只读告警,端口不监听告警。这些基础的监控说到底都是黑盒监控,并没有进入到程序内部的调用链里面,程序内部的运行情况完全是两眼一抹黑,导致是该模块本身有问题还是下游的依赖模块出了问题,完全不知道,只能看一行行看日志慢慢确认。换言之,我们需要的是一个分布式调用链追踪系统,能够清楚的描述程序的调用关系,每一跳的耗时,以及请求数量的统计,很明显,Pinpoint就是我们要找的工具。
PinpointPinpoint 是一个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,不过是单机的
Apache Download Mirrors
安装步骤参考:Zookeeper安装教程_yuan_xw的专栏-CSDN博客_zookeeper安装步骤
安装hbase
Apache Download Mirrors
注意设置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
参考:Linux tomcat安装详解_lcyaiym的专栏-CSDN博客_linux安装tomcat步骤
Apache Tomcat® - Apache Tomcat 9 Software Downloads 下载 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条采集一条。
编译安装:1 编译源码
1.1 下载源码,项目代码托管在github上,地址: https://github.com/naver/pinpoint,最新稳定版为2.0.1,使用git clone下载2.0.1版本源码至本地。
git clone -b v2.0.1 https://github.com/naver/pinpoint.git
1.2 编译源码,maven版本建议3.5.x,需要配置java环境变量。
将JAVA_HOME环境变量设置为JDK 8主目录
将JAVA_6_HOME环境变量设置为JDK 6主目录(建议使用1.6.0_45)
将JAVA_7_HOME环境变量设置为JDK 7主目录(建议使用1.7.0_80)
将JAVA_8_HOME环境变量设置为JDK 8主目录
将JAVA_9_HOME环境变量设置为JDK 9主目录
终端执行下面命令开始编译:
mvn compile package -DskipTests=true
编译顺利,爽!编译成功之后,找到下面包:
agent目录下:pinpoint-agent-2.0.1.tar.gz 探针包
collector目录下:pinpoint-collector-2.0.1.war 收集端包
web目录下:pinpoint-web-2.0.1.war web页面包
hbase目录下:hbase-create.hbase
2. 实施部署
2.1 部署单机版Hbase,pinpoint支持的Hbase版本为0.98.x、1.0.x、1.2.x,本次使用hbase-1.2.6-bin.tar.gz 版本,解压Hbase。
tar -zxvf hbase-1.2.6-bin.tar.gz
2.2 配置Hbase
cd hbase-1.2.6/conf vi hbase-site.xml
修改为以下内容,路径和zookeeper信息请根据实际配置。
hbase.zookeeper.quorum 192.168.166.122:2181 hbase.zookeeper.property.dataDir /xx/hbase-1.2.6/zookeeperdata hbase.tmp.dir /xx/hbase-1.2.6/tmpdata hbase.rootdir /xx/hbase-1.2.6/data hbase.cluster.distributed false
2.3 启动Hbase
cd hbase-1.2.6/bin sh start-hbase.sh
使用jps命令查看是否启动成功
jps 3238 HMaster
出现HMaster进程说明启动成功
2.4 初始化pinpoint使用的hbase表脚本
上传hbase-create.hbase文件到bin目录
cd hbase-1.2.6/bin ./hbase shell hbase-create.hbase
2.5 部署 pinpoint-collector-2.0.1.war 包
以tomcat为例,解压pinpoint-collector-2.0.1.war到webapps/ROOT 目录
转到release目录。
cd ROOT/WEB-INF/classes/profiles/release
修改hbase-env.properties文件:
hbase.client.host=192.168.166.122
hbase.client.port=2181
hbase.client.host=192.168.166.122 hbase.client.port=2181 # hbase default:/hbase hbase.zookeeper.znode.parent=/hbase # hbase namespace to use default:default hbase.namespace=default # ================================================================================== # hbase client thread pool option hbase.client.thread.max=64 hbase.client.threadPool.queueSize=5120 # prestartAllCoreThreads hbase.client.threadPool.prestart=true # warmup hbase connection cache hbase.client.warmup.enable=true # enable hbase async operation. default: false hbase.client.async.enable=true
修改 pinpoint-collector-env.properties文件
pinpoint.zookeeper.address=192.168.166.122:2181
启动tomcat
2.6 部署 pinpoint-web-2.0.1.war 包
以tomcat为例,解压pinpoint-web-2.0.1.war到webapps/ROOT 目录
转到release目录
cd ROOT/WEB-INF/classes/profiles/release
修改hbase-env.properties文件:
hbase.client.host=192.168.166.122
hbase.client.port=2181
hbase.client.host=192.168.166.122 hbase.client.port=2181 # hbase default:/hbase hbase.zookeeper.znode.parent=/hbase # hbase namespace to use default:default hbase.namespace=default
修改 pinpoint-web-env.properties文件
pinpoint.zookeeper.address=192.168.166.122:2181
启动tomcat
访问web页面:http://192.168.166.122:
出现如下页面,恭喜你pinpoint部署成功。
3. 程序接入pinpoint
上传pinpoint-agent-2.0.1.tar.gz 包到服务器任意目录,
解压
tar -zxvf pinpoint-agent-2.0.1.tar.gz
重命名
mv pinpoint-agent-2.0.1 agent
应用程序jvm加入启动参数
JAVA_OPTS="-javaagent:/xx/agent/pinpoint-bootstrap-2.0.1.jar -Dpinpoint.agentId=test -Dpinpoint.applicationName=test"
docker方式安装安装docker docker-compose
yum update -y
yum install docker epel-release python-pip -y
pip install --upgrade pip
pip install docker-compose
修改daemon.json
[root@i-vzdytl5t ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://579fe187.m.daocloud.io","https://pee6w651.mirror.aliyuncs.com"]}
启动docker
systemctl enable docker
systemctl start docker
下载pinpoint-docker,启动pinpoint服务
git clone https://github.com/naver/pinpoint-docker.git
cd Pinpoint-Docker
docker-compose pull && docker-compose up -d
如有问题,请修改相对路径为绝对路径
...
volumes:
- /home/pinpoint/hbase
- /home/pinpoint/zookeeper
...
镜像
root@i-vzdytl5t pinpoint-docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/zookeeper 3.4 bf5cbc9d5cac 10 days ago 146 MB docker.io/pinpointdocker/pinpoint-agent 1.7.3 d10e8ad4472e 11 days ago 18.5 MB docker.io/pinpointdocker/pinpoint-hbase 1.7.3 24ec151afe93 11 days ago 993 MB docker.io/pinpointdocker/pinpoint-web 1.7.3 cfffbb994f1b 11 days ago 659 MB docker.io/pinpointdocker/pinpoint-collector 1.7.3 998b986648a8 11 days ago 604 MB docker.io/pinpointdocker/pinpoint-quickstart latest 125fa49a4a38 2 weeks ago 566 MB docker.io/flink 1.3.1 c08ccd5bb7a6 10 months ago 480 MB
启动完成后所起的容器
[root@i-vzdytl5t pinpoint-docker]# docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 770e180203e9 pinpointdocker/pinpoint-quickstart "catalina.sh run" 3 hours ago Up 3 hours 0.0.0.0:8000->8080/tcp pinpoint-quickstart 968c689aad3d pinpointdocker/pinpoint-agent:1.7.3 "/usr/local/bin/co..." 3 hours ago Up 3 hours pinpoint-agent 19fac27003e3 pinpointdocker/pinpoint-web:1.7.3 "/usr/local/bin/st..." 3 hours ago Up 3 hours 0.0.0.0:9997->9997/tcp, 0.0.0.0:8079->8080/tcp pinpoint-web 08f7242e3612 pinpointdocker/pinpoint-collector:1.7.3 "/usr/local/bin/st..." 3 hours ago Up 3 hours 8080/tcp, 0.0.0.0:9994-9996->9994-9996/tcp, 0.0.0.0:9995-9996->9995-9996/udp pinpoint-collector 23262f75eec0 pinpointdocker/pinpoint-hbase:1.7.3 "/bin/sh -c '${BAS..." 3 hours ago Up 3 hours 0.0.0.0:16010->16010/tcp, 0.0.0.0:16030->16030/tcp, 0.0.0.0:60000->60000/tcp, 0.0.0.0:60020->60020/tcp, 0.0.0.0:2180->2181/tcp pinpoint-hbase f0525f78484e flink:1.3.1 "/docker-entrypoin..." 4 hours ago Up 4 hours 6123/tcp, 0.0.0.0:6121-6122->6121-6122/tcp, 0.0.0.0:19994->19994/tcp, 8081/tcp pinpoint-flink-taskmanager ec7959d91bab zookeeper:3.4 "/docker-entrypoin..." 4 hours ago Up 4 hours 2181/tcp, 2888/tcp, 3888/tcp pinpoint-docker_zoo3_1 67fe5108a1f8 zookeeper:3.4 "/docker-entrypoin..." 4 hours ago Up 4 hours 2181/tcp, 2888/tcp, 3888/tcp pinpoint-docker_zoo2_1 ff751bd4ce44 zookeeper:3.4 "/docker-entrypoin..." 4 hours ago Up 4 hours 2181/tcp, 2888/tcp, 3888/tcp pinpoint-docker_zoo1_1 34ae285a9246 flink:1.3.1 "/docker-entrypoin..." 4 hours ago Up 4 hours 6123/tcp, 0.0.0.0:8081->8081/tcp pinpoint-flink-jobmanager
访问nodeIP:8079
http://127.0.0.1:8079/
hbase页面
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)