Tool我爱编程APM监控

APM监控工具之Pinpoint初探

2018-04-18  本文已影响1553人  Lacia

写在前面

为了更好的阅读体验,请转到http://laciagin.me/2018/04/10/APM%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7%E4%B9%8BPinpoint/

APM监控工具之Pinpoint初探

简介

安装及部署

安装pinpoint需要:

0、JAVA环境

1、Hbase

2、pinpoint-collector、pinpoint-web、pinpoint-agent

3、mysql

就现有环境来说,从安装Hbase开始操作

安装Hbase

1、下载Hbase

2、解压tar包

3、修改配置文件

hbase-env.sh

#使用Hbase自带的zookeeper,如使用外置zookeeper需置为false
export HBASE_MANAGES_ZK=true
#配置JAVA环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_121

hbase-site.xml

#添加以下配置
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>

4、启动Hbase

./start-hbase.sh

5、初始化Hbase表

这个步骤需要pinpoint源码中的hbase-create.hbase脚本。

下载源码后,在Hbase的bin目录下运行:

./hbase shell /home/liang/pinpoint/pp-src/hbase/scripts/hbase-create.hbase

理想的情况是运行成功,可以在hbase shell中通过status 'detailed'查看已建立的表的情况。

配置pinpoint-collector

将pinpoint-collector解压后放入web容器中,本次实验中使用的是tomcat。

进入配置文件目录/home/liang/pinpoint/collector-pinpoint/webapps/pinpoint-collector-1.7.2-SNAPSHOT/WEB-INF/classes,修改hbase.properties文件:

#Hbase所在的主机名
hbase.client.host=k8s-slave3
hbase.client.port=2181

修改tomcat启动端口,以免发生端口冲突事件。

启动tomcat。

配置pinpoint-web

将pinpoint-web解压后放入web容器中,本次实验中使用的是tomcat。

进入配置文件目录/home/liang/pinpoint/web-pinpoint/webapps/pinpoint-web-1.7.2-SNAPSHOT/WEB-INF/classes,修改hbase.properties文件:

#Hbase所在的主机名
hbase.client.host=k8s-slave3
hbase.client.port=2181

修改tomcat启动端口,以免发生端口冲突事件。

启动tomcat。

部署pinpoint-agent

将pinpoint-agent copy至需要监控的程序所在服务器中,修改程序的启动脚本。

  1. Tomcat的情况,在catalina.sh中添加以下几行:

    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/liuhy/pinpoint/pinpoint-bootstrap-1.7.2-SNAPSHOT.jar"
    CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=0000001"
    CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=10.10.30.63_emp"    
    
  2. Springboot启动,在启动脚本中添加:

    -javaagent:/home/liuhy/pinpoint/pinpoint-bootstrap-1.7.2-SNAPSHOT.jar 
    -Dpinpoint.agentId=0000002 
    -Dpinpoint.applicationName=10.10.30.63_mdm
    

    Dpinpoint.agentId为该程序在pinpoint中的编号,唯一且不可重复,一个agentId对应一个JVM。

    Dpinpoint.applicationName相同应用的applicationName相同,agentId不同。如mdm有多个实例,则多个实例的applicationName都是mdm,但agentId需不同。

修改pinpoint-agent中的pinpoint.config配置文件:

  5 ###########################################################
  6 # Collector server                                        # 
  7 ###########################################################
  8 #设置collector所在服务器的ip,本次实验中collector的ip为10.10.30.64
  9 profiler.collector.ip=10.10.30.64

修改启动脚本后重启服务,即可在pinpoint-web中看到该服务的当前状态和性能指标,如下图:

[图片上传失败...(image-35dd2a-1524043174545)]

在多个服务中部署pinpoint:

[图片上传失败...(image-cad3e-1524043174545)]

查看系统资源使用情况

查看单个agent的实时情况

打开Inspector,选择要查看的应用的agentId,即可查看该应用的JVM参数及所在服务器资源使用情况:

[图片上传失败...(image-22b636-1524043174545)]

P.S: Application Inspector需要进一步搭建、配置Flink环境,待考。

定位系统异常

在本次实验中,EMM portal报出一个异常,通过框选异常区域可以查看该时间段所有的请求及详细信息,由此可快速定位问题。

[图片上传失败...(image-5a2e04-1524043174545)]

[图片上传失败...(image-4c58c3-1524043174545)]

告警监控

在Pinpoint中可以设定告警规则,实时对程序进行监控,如触发告警则发送邮件。

该功能需要实现额外逻辑,待考。

About Alarm:http://naver.github.io/pinpoint/alarm.html

[图片上传失败...(image-e62d5-1524043174545)]

Pinpoint With Docker

Pinpoint-collector和Pinpoint-web均可做成docker镜像

参考

Application Inspector部署

Application Inspector在我的理解看来就是如果一个application是集群的,可以通过inspector查看相同application name的应用的所有资源使用情况。

经过几天的煎熬,终于把Application Inspector弄出来了!

编译pinpoint-flink-job.jar

从编译开始就遭遇了这样那样的困难 _(:з」∠),一定要下pinpoint源码才行。

编译之前要修改pp-src中的配置文件:

然后就开始痛苦的编译!在pp-src路径下./mvnw install -Dmaven.test.skip=true

在maven setting.xml中加入repository路径之后拒绝连接的问题得以改善,但是仍然重复编译了四五次才最终success!好几天电脑都没关_(:з」∠)

[图片上传失败...(image-e1eea9-1524043174545)]

[图片上传失败...(image-57b14e-1524043174545)]

最后终于编译成功了!

[图片上传失败...(image-ec2c84-1524043174545)]

编译pinpoint必须要配置JAVA6、JAVA7和JAVA8的环境变量嗯。

从编译之后一步一步来,每个步骤也都是遇到了很多坑。

Hbase和Zookeeper

因为Flink也要用到zookeeper,所以就打算自己搭一个zookeeper,让hbase也用这个外置的zookeeper。然后就改了hbase的配置文件hbase-env.sh:

export HBASE_MANAGES_ZK=false

重启hbase时仍然报错,各种查了之后,修改hbase.site.xml如下:

<configuration>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>zookeeper.znode.parent</name>
    <value>/hbase</value>
  </property>
</configuration>

同时对zookeeper的配置文件也做了一些修改:

复制zoo_sample.cfg并命名为zoo.cfg:

dataDir=/usr/hadoop/zookeeper-3.4.6/data
# the port at which the clients will connect
clientPort=2181

然后在zookeeper根目录下创建data文件夹,cat 1>myid。这一步骤以后再补充。

然后启动hbase就可以啦ovo

Flink版本问题与部署

一开始抱着什么都用最新的的想法使用了flink-1.4,后来看pinpoint github上的问答,1.4未经过验证且存在问题,推荐使用1.3.1版本,于是下了1.3.1版本。

配置文件并没有改动很大,修改了flink-conf.yaml

# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 3

默认值是1,后来测试的时候发现slot数为1时会抱slot不够用的问题,于是改成了3。

启动后可打开http://10.10.30.64:8081查看到flink dashboard,其中10.10.30.64为flink所在服务器ip。

执行pinpoint-flink-job

在flink目录下执行已经编译好的jar包:

./flink run /home/liang/pinpoint/pp-src/flink/target/pinpoint-flink-job-1.8.0-SNAPSHOT.jar

正确启动后可以在flink dashboard中查看到这个job,运行状态为running:

[图片上传失败...(image-2259f3-1524043174545)]

修改pinpoint collector配置文件

official-guide所说,修改了几处配置文件,实际上有些出入。

修改pinpoint-collector.properties

    flink.cluster.enable=true
    flink.cluster.zookeeper.address=k8s-slave3
    flink.cluster.zookeeper.sessiontimeout=3000

重启collector后报出TcpDataSender is null问题,于是在配置文件中启用tcp receiver

修改pinpoint-collector.properties

collector.receiver.stat.tcp=true
collector.receiver.stat.tcp.ip=0.0.0.0
collector.receiver.stat.tcp.port=9995
collector.receiver.span.tcp=true
collector.receiver.span.tcp.ip=0.0.0.0
collector.receiver.span.tcp.port=9996

重启后不再报错。猜测应该可以设置成udp的,待考。

修改pinpoint web配置文件

official-guide所说,修改了几处配置文件。

修改pinpoint-web.properties

config.show.applicationStat=true

修改batch.properties

#flink server所在服务器
batch.flink.server=k8s-slave3

修改applicationContext-batch-schedule.xml,可设置各job的执行频率:

<task:scheduled-tasks scheduler="scheduler">
    ...
    <task:scheduled ref="batchJobLauncher" method="flinkCheckJob" cron="0 0/10 * * * *" />
</task:scheduled-tasks>

现在打开pinpoint web,选择一个application,点击Inspector就可查看Inspector了

图片上传总失败…我也没招了…gitpage上的图片可以看http://laciagin.me/2018/04/10/APM%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7%E4%B9%8BPinpoint/

总结

Pinpoint可以对分布式系统进行实时监控,也可以用作性能测试辅助。

在Pinpoint上还存在很多可能性,待考,待更新。

当前一个可用的pinpoint console:http://10.10.30.64:28080/pinpoint-web-1.7.2-SNAPSHOT,User Group部分还存在一些问题,推测与Mysql环境有关,待解决。

上一篇下一篇

猜你喜欢

热点阅读