1. 程式人生 > >docker構建部署pinpoint

docker構建部署pinpoint

前提:
1.hbase+zookeeper
2.hbase建立pp的表 表文件

./hbase shell hbase-create.hbase

3.git官網下載1.6的三個包,注意開個lantern翻牆包下載地址
4.docker基礎映象:tomcat+jdk+ubuntu映象
(我的基礎映象的tomcat7在根目錄下/tomcat7)
5.hostname : ub12

一.部署pinpoint-web

構建pinpoint-web的映象

1.目錄結構
這裡寫圖片描述

2.自定義配置檔案
進入pp-web,建立config目錄,並拷貝官方的兩個配置檔案.配置檔案

[email protected]:/home/mingchenchen/pinpoint/pinpoint-web/config# ls
hbase.properties pinpoint-web.properties

hbase.properties>hbase.client.host和hbase.client.port修改為自己的zookeeper地址
pinpoint-web.properties>修改cluster.enable=false
3.Dockerfile

FROM my-docker-repo/tomcat7:v2017
MAINTAINER chenchen.ming
#ENV JAVA_HOME /usr/local/jdk7 #ENV JRE_HOME /usr/local/jdk7/jre #ENV PATH $PATH:$JAVA_HOME/bin #base image already have env , so only need source it RUN rm -rf /tomcat7/webapps/ROOT ADD ROOT /tomcat7/webapps/ROOT ADD config/hbase.properties /tomcat7/webapps/ROOT/WEB-INF/classes/hbase.properties ADD config/pinpoint-web.properties
/tomcat7/webapps/ROOT/WEB-INF/classes/pinpoint-web.properties ADD start.sh ./start.sh RUN ["chmod", "+x", "/start.sh"] EXPOSE 8080 CMD /start.sh

4.啟動指令碼:start.sh

#!/bin/bash
source /etc/profile
/tomcat7/bin/catalina.sh start
tail -f /tomcat7/logs/catalina.out

5.映象構建指令碼:build_no_wget.sh

#!/bin/bash

if [ -z "$1" ]; then
   echo "Usage error exit"
   echo "./build.sh [tgz.url] [ver]"
exit 2
fi
if [ -z "$2" ]; then
   echo "Usage error please input docker version . exit"
   echo "./build.sh [tgz.url] [ver]"
exit 2
fi

war="$1"
ver="$2"
PKG_NAME=ROOT
PRO_NAME=pinpoint-web

mv ${war} ./${PKG_NAME}.war

mkdir ./${PKG_NAME}
unzip ./${PKG_NAME}.war -d ./${PKG_NAME}
rm ./${PKG_NAME}.war

docker build -t "my-docker-repo/mcc.${PRO_NAME}:${ver}" .
docker push my-docker-repo/mcc.${PRO_NAME}:${ver}

echo $* > /tmp/build.txt

rm -rf ./${PKG_NAME}*

6.執行命令構建映象

[email protected]:/home/mingchenchen/pinpoint/pinpoint-web# chmod +x build_no_wget.sh
[email protected]:/home/mingchenchen/pinpoint/pinpoint-web# chmod +x start.sh
[email protected]:/home/mingchenchen/pinpoint/pinpoint-web# cp ../pinpoint-web-1.6.0.war ./
[email protected]:/home/mingchenchen/pinpoint/pinpoint-web# ./build_no_wget.sh pinpoint-web-1.6.0.war v1

啟動容器

啟動即可訪問了.
(注意配置host,容器內部識別不到zookeeper返回的hbase的hostname,–add-host . ps:是兩個-顯示有問題)

docker run -d -p 28080:8080 - -add-host ub12:10.1.1.1 my-docker-repo/mcc.pinpoint-web:v1

二.部署pinpoint-collector

構建pinpoint-collector的映象

1.目錄結構
這裡寫圖片描述

2.自定義配置檔案
進入pp-collector,建立config目錄,並拷貝官方的兩個配置檔案.配置檔案

[email protected]:/home/mingchenchen/pinpoint/pinpoint-collector/config# ls
hbase.properties pinpoint-collector.properties

hbase.properties>hbase.client.host和hbase.client.port修改為自己的zookeeper地址
pinpoint-collector.properties>修改cluster.enable=false

3.Dockerfile

FROM my-docker-repo/tomcat7:v2017
MAINTAINER chenchen.ming

RUN rm -rf /tomcat7/webapps/ROOT
ADD ROOT /tomcat7/webapps/ROOT
ADD config/hbase.properties /tomcat7/webapps/ROOT/WEB-INF/classes/hbase.properties
ADD config/pinpoint-collector.properties /tomcat7/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties
ADD start.sh ./start.sh
RUN ["chmod", "+x", "/start.sh"]

EXPOSE 8080
EXPOSE 9994
EXPOSE 9995
EXPOSE 9996
CMD /start.sh

4.啟動指令碼:start.sh

#!/bin/bash
source /etc/profile
/tomcat7/bin/catalina.sh start
tail -f /tomcat7/logs/catalina.out

5.映象構建指令碼:build_no_wget.sh

#!/bin/bash

if [ -z "$1" ]; then
   echo "Usage error exit"
   echo "./build.sh [tgz.url] [ver]"
exit 2
fi
if [ -z "$2" ]; then
   echo "Usage error please input docker version . exit"
   echo "./build.sh [tgz.url] [ver]"
exit 2
fi

war="$1"
ver="$2"
PKG_NAME=ROOT
PRO_NAME=pinpoint-collector

mv ${war} ./${PKG_NAME}.war

mkdir ./${PKG_NAME}
unzip ./${PKG_NAME}.war -d ./${PKG_NAME}
rm ./${PKG_NAME}.war

docker build -t "my-docker-repo/mcc.${PRO_NAME}:${ver}" .
docker push my-docker-repo/mcc.${PRO_NAME}:${ver}

echo $* > /tmp/build.txt

rm -rf ./${PKG_NAME}*

6.執行命令構建映象

[email protected]:/home/mingchenchen/pinpoint/pinpoint-collector# chmod +x build_no_wget.sh
[email protected]:/home/mingchenchen/pinpoint/pinpoint-collector# chmod +x start.sh
[email protected]:/home/mingchenchen/pinpoint/pinpoint-collector# cp ../pinpoint-collector-1.6.0.war ./
[email protected]:/home/mingchenchen/pinpoint/pinpoint-collector# ./build_no_wget.sh pinpoint-collector-1.6.0.war v1

啟動容器

啟動即可訪問了.
(注意配置host,容器內部識別不到zookeeper返回的hbase的hostname,–add-host)

docker run -d -p 28081:8080 -p 29994:9994 -p 29995:9995 -p 29996:9996 - -add-host ub12:10.1.1.1 my-docker-repo/mcc.pinpoint-collector:v1 (見末尾的踩坑記錄2017-01-14)

docker run -d -p 28081:8080/tcp -p 29994:9994/tcp -p 29995:9995/udp -p 29996:9996/udp - -add-host ub12:10.1.1.1 my-docker-repo/mcc.pinpoint-collector:v1

部署pinpoint-agent

構建demo.war + ppagent的映象

1.準備demo.war
寫個簡單的web工程,匯出war
我的demo工程原始碼

2.目錄結構
這裡寫圖片描述

3.自定義pinpoint配置檔案
進入pp-agent,建立config目錄,並拷貝官方的配置檔案.配置檔案

[email protected]:/home/mingchenchen/pinpoint/pinpoint-agent/config# ls
pinpoint.config

修改9994、9995、9996埠,在前面加上2(和collector對應)

4.配置tomcat增加javaagent引數
為了修改tomcat的catalina.sh增加javaagent引數pinpoint安裝
在config目錄建立setenv.sh,並修改許可權chmod +x setenv.sh

#!/bin/bash
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.6.0.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=ppagent20170112"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=mcctestapp"

ps:不能有特殊字元及最大24位

3.Dockerfile

FROM my-docker-repo/tomcat7:v2017

MAINTAINER chenchen.ming
#base image already have javahome env , so only need source it

RUN rm -rf /tomcat7/webapps/ROOT
ADD ROOT /tomcat7/webapps/ROOT
ADD AGENT /pinpoint-agent

ADD config/pinpoint.config /pinpoint-agent/pinpoint.config
ADD config/setenv.sh /tomcat7/bin/setenv.sh
ADD start.sh ./start.sh

RUN ["chmod", "+x", "/start.sh"]
RUN ["chmod", "+x", "/tomcat7/bin/setenv.sh"]
EXPOSE 8080
CMD /start.sh

4.啟動指令碼:start.sh

#!/bin/bash
source /etc/profile
/tomcat7/bin/catalina.sh start
tail -f /tomcat7/logs/catalina.out

5.映象構建指令碼:build_no_wget.sh

#!/bin/bash

if [ -z "$1" ]; then
   echo "Usage error exit"
   echo "./build.sh [war] [tgz] [ver]"
exit 2
fi
if [ -z "$2" ]; then
   echo "Usage error please input war . exit"
   echo "./build.sh [war] [tgz] [ver]"
exit 2
fi
if [ -z "$3" ]; then
   echo "Usage error exit"
   echo "./build.sh [war] [tgz] [ver]"
exit 2
fi

war="$1"
tar="$2"
ver="$3"
PKG_NAME=ROOT
PP_AGENT_NAME=AGENT
PRO_NAME=pinpoint-agent-demo

mkdir ./${PKG_NAME}
mkdir ./${PP_AGENT_NAME}

mv ${war} ./${PKG_NAME}.war
mv ${tar} ./${PP_AGENT_NAME}.tar.gz

tar -xf ${PP_AGENT_NAME}.tar.gz -C ./${PP_AGENT_NAME}
rm ./${PP_AGENT_NAME}.tar.gz

unzip ./${PKG_NAME}.war -d ./${PKG_NAME}
rm ./${PKG_NAME}.war

docker build -t "my-docker-repo/mcc.${PRO_NAME}:${ver}" .
docker push my-docker-repo/mcc.${PRO_NAME}:${ver}

echo $* > /tmp/build.txt

rm -rf ./${PKG_NAME}*
rm -rf ./${PP_AGENT_NAME}*

6.執行命令構建映象

./build_no_wget.sh demo-for-ppagent.war pinpoint-agent-1.6.0.tar.gz v1

啟動容器

啟動即可訪問了.
(注意配置host,容器內部識別不到zookeeper返回的hbase的hostname,–add-host)

docker run -d -p 28082:8080 - -add-host ub12:10.1.1.1 my-docker-repo/mcc.pinpoint-agent-demo:v1

測試

至此,整個環境搭建成功!
右上角把你要看的詳情的一堆點給框住等一秒,就出來詳情介面了!坑爹的設計!

注意

1.注意看docker logs是否有錯誤
2.新推映象覆蓋舊的,舊映象容器仍然存在,只不過映象名稱不再是之前的了.需要

[email protected]:/home/mcc# docker ps -a |grep pin

[email protected]:/home/mcc# docker ps -a |grep 999
e2c7b2d4e49f 81c39856ae8f “/bin/sh -c /start.sh” 19 minutes ago Up 19 minutes 8080/tcp, 0.0.0.0:29994->9994/tcp, 0.0.0.0:29995->9995/tcp, 0.0.0.0:29996->9996/tcp small_joliot
[email protected]:/home/mcc#

檢視埠的形式檢視

問題彙總

2017-01-14:agent沒有采集到資料

訪問了web專案但是沒產生客戶端訪問記錄。非常奇怪,任何地方都沒報錯。日了狗了。。。看了很久,發現agent採集的log不會打在tomcat-demo下,而是

[email protected]:/pinpoint-agent/log# ls
pinpointagent20170112-pinpoint.log pinpointagent20170112-pinpoint.log.1

查了下agent日誌,果然報錯了

java.net.PortUnreachableException: ICMP Port Unreachable
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:697)
at com.navercorp.pinpoint.profiler.sender.UdpDataSender.sendPacket(UdpDataSender.java:134)
at com.navercorp.pinpoint.profiler.sender.AbstractDataSender$1.execute(AbstractDataSender.java:68)
at com.navercorp.pinpoint.profiler.sender.AsyncQueueingExecutor.doExecute(AsyncQueueingExecutor.java:172)
at com.navercorp.pinpoint.profiler.sender.AsyncQueueingExecutor.doExecute(AsyncQueueingExecutor.java:96)
at com.navercorp.pinpoint.profiler.sender.AsyncQueueingExecutor.run(AsyncQueueingExecutor.java:79)
at java.lang.Thread.run(Thread.java:745)

知道報錯就好辦了.下週來解決。主要還是之前以為agent的日誌也會打到tomcat下面,fuck。

2017-01-16

找了很久的問題,沒看出個所以然,所以直接上官方提問了.連結

非常給力,2分鐘就收到了回答。原來如此,埠要繫結的是udp而不是tcp,docker預設就是tcp所以報這個錯誤。。。長見識了。
途中還傻了下,4.5.6全部改成了udp,報錯9994拒絕連線,仔細回頭看了下,原來94是tcp的。。。下次看properties英文名真的不要忽略啊!!!人家都寫了94是tcp,95、96是udp的!!!
不過這問題應該是我第一個遇到的,哈哈。畢竟大多都是直接安裝而不是docker。挺高興的!
於是collector重新改一下暴露埠

docker run -d -p 28081:8080/tcp -p 29994:9994/tcp -p 29995:9995/udp -p 29996:9996/udp –add-host ub12:10.1.1.1 my-docker-repo/mcc.pinpoint-collector:v1

訪問demo,哈哈哈哈,終於!出現了!
這裡寫圖片描述