docker部署pinpoint,监控docker中的Springboot项目
2017-12-06 10:14
786 查看
pinpoint是一个开源的java监控项目,也是分布式监控项目中比较知名的。
网上有比较多的pinpoint部署指南,但都是基于主机部署的,这一篇主要是讲将pinpoint部署到docker中,并监控同样部署在docker的Springboot项目。
pinpoint包含4个部分,hbase,collector,web,agent。
hbase-site.xml
start-collector.sh
start-web.sh
agent先不管它,我们先把上面的3个组件部署到服务器上。
我使用的rancher来管理docker,根据上面的Dockerfile分别build能得到对应的镜像,下面来展示一下部署到rancher时的配置。
第一步,先部署hbase,只需要注意一点即可
第二步,部署collector
添加Hbase的link,并且配置一些环境变量,一样需要指定主机名
第三步,部署web
同样是设置环境变量,主机名
以上配置完即可,就可以访问到pinpoint的web界面了。
下面来看一下如何监控docker中的Springboot项目。
pinpoint采用的是无侵入的方式,对于Springboot项目是启动一个jar这种类型的来说,就是使用
这种方式,指明pinpoint-bootstrap的位置,再加上agentId和applicationName就行了。pinpoint-bootstrap.jar是在pinpoint-agent中,还需要在pinpoint-agent中指明collector的ip即可。
那么怎么让我们的Springboot项目知道pinpoint-agent在哪里呢?
常见的有两种方式,一是绑定宿主机目录,将pinpoint-agent放到宿主机中,然后在docker里访问宿主机的pinpoint-agent,这样的话,你还需要另外一个docker容器来存放agent,因为agent需要知道collector的ip地址,而宿主机是不能访问docker容器内的ip的,得用docker link的方式。
二是直接在Springboot项目里下载并配置agent,我就是采用的这种方式。
像普通的Springboot项目如果部署到docker,Dockerfile如下:
这样一个Dockerfile就可以了。如果我要同时把pinpoint-agent也配置进来,Dockerfile如下:
configure.sh如下
这个就是比普通的Springboot项目多了一个下载agent,并配置collector ip的地方。
部署这个Springboot项目时,需要添加一个环境变量COLLECTOR_IP,指明为collector的ip即可。
以上就完成了pinpoint在docker部署的全步骤,说的比较精简,需要对pinpoint的部署和docker比较了解才能看懂。
网上有比较多的pinpoint部署指南,但都是基于主机部署的,这一篇主要是讲将pinpoint部署到docker中,并监控同样部署在docker的Springboot项目。
pinpoint包含4个部分,hbase,collector,web,agent。
docker部署HBase
Dockerfile如下:# DESCRIPTION Pinpoint APM HBase (Data Storage) # TO_BUILD docker build -t pinpoint-hbase . # TO_RUN docker run -d --net=host -p 2181:2181 -p 60000:60000 -p 16010:16010 -p 60020:60020 -p 16030:16030 --name=pinpoint-hbase pinpoint-hbase FROM java:8-jdk ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ENV HBASE_VERSION=1.2.5 ENV HBASE_HOME=/opt/hbase/hbase-$HBASE_VERSION ENV PINPOINT_VERSION=1.6.2 ENV HBASE_REPOSITORY=http://apache.mirrors.pair.com/hbase ENV HBASE_SUB_REPOSITORY=http://archive.apache.org/dist/hbase RUN mkdir -p /opt/hbase \ && cd /opt/hbase \ && curl -fSL "$HBASE_REPOSITORY/$HBASE_VERSION/hbase-$HBASE_VERSION-bin.tar.gz" -o hbase.tar.gz || curl -fSL "$HBASE_SUB_REPOSITORY/$HBASE_VERSION/hbase-$HBASE_VERSION-bin.tar.gz" -o hbase.tar.gz \ && tar xfvz hbase.tar.gz \ && rm -rf hbase.tar.gz ADD hbase-site.xml /opt/hbase/hbase-$HBASE_VERSION/conf/hbase-site.xml RUN curl -SL "https://raw.githubusercontent.com/naver/pinpoint/$PINPOINT_VERSION/hbase/scripts/hbase-create.hbase" -o /opt/hbase/hbase-create.hbase \ && $HBASE_HOME/bin/start-hbase.sh \ && sleep 10 \ && $HBASE_HOME/bin/hbase shell /opt/hbase/hbase-create.hbase \ && $HBASE_HOME/bin/stop-hbase.sh VOLUME ["/home/pinpoint/hbase", "/home/pinpoint/zookeeper"] # zookeeper EXPOSE 2181 # HBase Master API port EXPOSE 60000 # HBase Master Web UI EXPOSE 16010 # Regionserver API port EXPOSE 60020 # HBase Regionserver web UI EXPOSE 16030 ENTRYPOINT /opt/hbase/hbase-$HBASE_VERSION/bin/hbase master start
hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>file:///home/pinpoint/hbase</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/pinpoint/zookeeper</value> </property> <property> <name>hbase.master.port</name> <value>60000</value> </property> <property> <name>hbase.regionserver.port</name> <value>60020</value> </property> </configuration>
docker部署collector
Dockerfile如下FROM tomcat:8-jre8 ENV PINPOINT_VERSION=1.6.2 ADD start-collector.sh /usr/local/bin/ RUN chmod a+x /usr/local/bin/start-collector.sh \ && mkdir -p /assets \ && curl -SL https://raw.githubusercontent.com/naver/pinpoint/$PINPOINT_VERSION/collector/src/main/resources/pinpoint-collector.properties -o /assets/pinpoint-collector.properties \ && curl -SL https://raw.githubusercontent.com/naver/pinpoint/$PINPOINT_VERSION/collector/src/main/resources/hbase.properties -o /assets/hbase.properties \ && curl -SL https://github.com/naver/pinpoint/releases/download/$PINPOINT_VERSION/pinpoint-collector-$PINPOINT_VERSION.war -o pinpoint-collector.war \ && rm -rf /usr/local/tomcat/webapps \ && mkdir -p /usr/local/tomcat/webapps \ && sed -i -e 's/8005/9005/' /usr/local/tomcat/conf/server.xml \ && sed -i -e 's/8080/9080/' /usr/local/tomcat/conf/server.xml \ && sed -i -e 's/8009/9009/' /usr/local/tomcat/conf/server.xml \ && sed -i -e 's/8443/9443/' /usr/local/tomcat/conf/server.xml \ && unzip pinpoint-collector.war -d /usr/local/tomcat/webapps/ROOT \ && rm -rf pinpoint-collector.war EXPOSE 9994 9995 9996 ENTRYPOINT ["/usr/local/bin/start-collector.sh"]
start-collector.sh
#!/bin/bash set -e set -x CLUSTER_ENABLE=${CLUSTER_ENABLE:-false} COLLECTOR_TCP_PORT=${COLLECTOR_TCP_PORT:-9994} COLLECTOR_UDP_STAT_LISTEN_PORT=${COLLECTOR_UDP_STAT_LISTEN_PORT:-9995} COLLECTOR_UDP_SPAN_LISTEN_PORT=${COLLECTOR_UDP_SPAN_LISTEN_PORT:-9996} HBASE_HOST=${HBASE_HOST:-localhost} HBASE_PORT=${HBASE_PORT:-2181} DISABLE_DEBUG=${DISABLE_DEBUG:-true} cp /assets/pinpoint-collector.properties /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties cp /assets/hbase.properties /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/hbase.properties sed -i "s/cluster.enable=true/cluster.enable=${CLUSTER_ENABLE}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties sed -i "s/collector.tcpListenPort=9994/collector.tcpListenPort=${COLLECTOR_TCP_PORT}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties sed -i "s/collector.udpStatListenPort=9995/collector.udpStatListenPort=${COLLECTOR_UDP_STAT_LISTEN_PORT}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties sed -i "s/collector.udpSpanListenPort=9996/collector.udpSpanListenPort=${COLLECTOR_UDP_SPAN_LISTEN_PORT}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties sed -i "s/hbase.client.host=localhost/hbase.client.host=${HBASE_HOST}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/hbase.properties sed -i "s/hbase.client.port=2181/hbase.client.port=${HBASE_PORT}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/hbase.properties if [ "$DISABLE_DEBUG" == "true" ]; then sed -i 's/level value="DEBUG"/level value="INFO"/' /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j.xml fi exec /usr/local/tomcat/bin/catalina.sh run
docker部署web
Dockerfile如下:# DESCRIPTION Pinpoint APM Web (User Interface) # TO_BUILD docker build -t pinpoint-web . # TO_RUN docker run -d -p 8080:8080 --net=host -e HBASE_HOST=<HOST_IP> -e HBASE_PORT=2181 --name=pinpoint-web pinpoint-web FROM tomcat:8-jre8 ENV PINPOINT_VERSION=1.6.2 ADD start-web.sh /usr/local/bin/ RUN chmod a+x /usr/local/bin/start-web.sh \ && mkdir -p /assets/ \ && curl -SL https://raw.githubusercontent.com/naver/pinpoint/$PINPOINT_VERSION/web/src/main/resources/pinpoint-web.properties -o /assets/pinpoint-web.properties \ && curl -SL https://raw.githubusercontent.com/naver/pinpoint/$PINPOINT_VERSION/web/src/main/resources/hbase.properties -o /assets/hbase.properties \ && curl -SL https://github.com/naver/pinpoint/releases/download/$PINPOINT_VERSION/pinpoint-web-$PINPOINT_VERSION.war -o pinpoint-web.war \ && rm -rf /usr/local/tomcat/webapps \ && mkdir -p /usr/local/tomcat/webapps \ && unzip pinpoint-web.war -d /usr/local/tomcat/webapps/ROOT \ && rm -rf pinpoint-web.war EXPOSE 8080 ENTRYPOINT ["/usr/local/bin/start-web.sh"]
start-web.sh
#!/bin/bash set -e set -x CLUSTER_ENABLE=${CLUSTER_ENABLE:-false} ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} HBASE_HOST=${HBASE_HOST:-localhost} HBASE_PORT=${HBASE_PORT:-2181} DISABLE_DEBUG=${DISABLE_DEBUG:-true} DISABLE_ANALYTICS=${DISABLE_ANALYTICS:-true} cp /assets/pinpoint-web.properties /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-web.properties cp /assets/hbase.properties /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/hbase.properties sed -i "s/cluster.enable=true/cluster.enable=${CLUSTER_ENABLE}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-web.properties sed -i "s/admin.password=admin/admin.password=${ADMIN_PASSWORD}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-web.properties sed -i "s/hbase.client.host=localhost/hbase.client.host=${HBASE_HOST}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/hbase.properties sed -i "s/hbase.client.port=2181/hbase.client.port=${HBASE_PORT}/g" /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/hbase.properties if [ "$DISABLE_DEBUG" == "true" ]; then sed -i 's/level value="DEBUG"/level value="INFO"/' /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j.xml fi if [ "$DISABLE_ANALYTICS" == "true" ]; then sed -i 's/config.sendUsage.*/config.sendUsage=false/' /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-web.properties fi exec /usr/local/tomcat/bin/catalina.sh run
agent先不管它,我们先把上面的3个组件部署到服务器上。
我使用的rancher来管理docker,根据上面的Dockerfile分别build能得到对应的镜像,下面来展示一下部署到rancher时的配置。
第一步,先部署hbase,只需要注意一点即可
第二步,部署collector
添加Hbase的link,并且配置一些环境变量,一样需要指定主机名
第三步,部署web
同样是设置环境变量,主机名
以上配置完即可,就可以访问到pinpoint的web界面了。
下面来看一下如何监控docker中的Springboot项目。
pinpoint采用的是无侵入的方式,对于Springboot项目是启动一个jar这种类型的来说,就是使用
java -javaagent:/assets/pinpoint-agent/pinpoint-bootstrap-1.6.2.jar -Dpinpoint.agentId=schedul-in-docker -Dpinpoint.applicationName=schedul -jar /app.jar
这种方式,指明pinpoint-bootstrap的位置,再加上agentId和applicationName就行了。pinpoint-bootstrap.jar是在pinpoint-agent中,还需要在pinpoint-agent中指明collector的ip即可。
那么怎么让我们的Springboot项目知道pinpoint-agent在哪里呢?
常见的有两种方式,一是绑定宿主机目录,将pinpoint-agent放到宿主机中,然后在docker里访问宿主机的pinpoint-agent,这样的话,你还需要另外一个docker容器来存放agent,因为agent需要知道collector的ip地址,而宿主机是不能访问docker容器内的ip的,得用docker link的方式。
二是直接在Springboot项目里下载并配置agent,我就是采用的这种方式。
像普通的Springboot项目如果部署到docker,Dockerfile如下:
FROM daocloud.io/brave8/maven-jdk8 ADD pom.xml /tmp/build/ ADD src /tmp/build/src #构建应用 RUN cd /tmp/build && mvn clean package \ #拷贝编译结果到指定目录 && mv target/*.jar /app.jar \ #清理编译痕迹 && cd / && rm -rf /tmp/build VOLUME /tmp EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"]
这样一个Dockerfile就可以了。如果我要同时把pinpoint-agent也配置进来,Dockerfile如下:
FROM daocloud.io/brave8/maven-jdk8 ENV PINPOINT_VERSION=1.6.2 ADD configure.sh /usr/local/bin/ ADD pom.xml /tmp/build/ ADD src /tmp/build/src #构建应用 RUN cd /tmp/build && mvn clean package \ #拷贝编译结果到指定目录 && mv target/*.jar /app.jar \ #清理编译痕迹 && cd / && rm -rf /tmp/build \ && chmod a+x /usr/local/bin/configure.sh \ && mkdir -p /assets/pinpoint-agent \ && curl -SL https://raw.githubusercontent.com/naver/pinpoint/$PINPOINT_VERSION/agent/src/main/resources-release/pinpoint.config -o /assets/pinpoint.config \ && curl -SL https://github.com/naver/pinpoint/releases/download/$PINPOINT_VERSION/pinpoint-agent-$PINPOINT_VERSION.tar.gz -o pinpoint-agent-$PINPOINT_VERSION.tar.gz \ && gunzip pinpoint-agent-$PINPOINT_VERSION.tar.gz \ && tar -xf pinpoint-agent-$PINPOINT_VERSION.tar -C /assets/pinpoint-agent \ && curl -SL https://raw.githubusercontent.com/naver/pinpoint/$PINPOINT_VERSION/agent/src/main/resources-release/lib/log4j.xml -o /assets/pinpoint-agent/lib/log4j.xml \ && sed -i 's/DEBUG/INFO/' /assets/pinpoint-agent/lib/log4j.xml \ && rm pinpoint-agent-$PINPOINT_VERSION.tar EXPOSE 8080 ENTRYPOINT ["/usr/local/bin/configure.sh"]
configure.sh如下
#!/usr/bin/env bash set -e set -x COLLECTOR_IP=${COLLECTOR_IP:-127.0.0.1} cp -f /assets/pinpoint.config /assets/pinpoint-agent/pinpoint.config sed -i "s/profiler.collector.ip=127.0.0.1/profiler.collector.ip=${COLLECTOR_IP}/g" /assets/pinpoint-agent/pinpoint.config java -javaagent:/assets/pinpoint-agent/pinpoint-bootstrap-1.6.2.jar -Dpinpoint.agentId=schedul-in-docker -Dpinpoint.applicationName=schedul -jar /app.jar
这个就是比普通的Springboot项目多了一个下载agent,并配置collector ip的地方。
部署这个Springboot项目时,需要添加一个环境变量COLLECTOR_IP,指明为collector的ip即可。
以上就完成了pinpoint在docker部署的全步骤,说的比较精简,需要对pinpoint的部署和docker比较了解才能看懂。
相关文章推荐
- Docker构建pinpoint部署的方法
- docker部署springboot(windows版本)
- pinpoint 安装部署
- docker部署spring cloud项目
- Docker下,极速体验pinpoint1.6.3
- SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
- jenkins自动化部署搭建。jenkins+docker+maven+git+springboot
- 史上最简单的SpringCloud教程 | 第十一篇: docker部署spring cloud项目
- SpringCloud: docker部署spring cloud项目
- 把pinpoint编译环境做成Docker镜像文件
- 第三十七章 springboot+docker(手动部署)
- 理解docker部署springboot-容器日志处理(四)
- docker部署springboot:使用外部tomcat部署
- Spring Boot与Docker部署实践
- 理解docker部署springboot-构建和运行(一)
- Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 开源软件云收藏
- Spring Cloud学习:08Docker部署Spring Cloud项目
- Docker部署SpringBoot项目
- 史上最简单的SpringCloud教程 | 第十一篇: docker部署spring cloud项目