zoukankan      html  css  js  c++  java
  • Pinpoint 一款强大的APM工具

    背景

    程序的监控一直是程序员最头痛的事情之一,现网程序有问题怎么办?看进程看端口 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

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

  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业02--线性表
    c博客06-结构体&文件
    c博客作业-指针
    C语言博客作业04--数组
    C语言博客作业03--函数
    图书馆
    5-互评-OO之接口-DAO模式代码阅读及应用.xls
    DS博客作业04--图
  • 原文地址:https://www.cnblogs.com/makelu/p/13618955.html
Copyright © 2011-2022 走看看