在Kubernetes&Docker环境安装Java探针
前提条件
- 安装人员熟悉Java探针的手动安装。
- 安装人员了解Kubernetes和Docker运行原理和镜像创建过程。
- 在安装探针前,需要先确保本地浏览器时间与服务器时区、时间都一致。若有多个服务器,则要保证本地浏览器、多个服务器的时区、时间都一致。否则,可能会影响数据的准确性,例如拓扑不正确等。
背景说明
以下安装过程的介绍,是基于Tomcat服务开发的一个项目,而非单纯的Tomcat服务。
使用的镜像依赖关系: jdk8(基础镜像) -build-> jdk8-tomcat8-demo(服务镜像) -build-> tomcat-agent-demo(应用镜像)
- 以下介绍中,基础镜像所在环境系统为CentOS。其他操作系统如RedHat、Ubuntu、Debian同样可基于以下步骤作为参考。
配置脚本
Kubernetes&Docker环境下服务启动方式为:编写类似run.sh脚本,在容器启动后执行。脚本配置完成后,探针会随着容器的创建和运行而自动部署。
镜像内置的服务原始启动脚本run.sh内容如下:
#!/bin/bash
TOMCAT_SERVER_CONF="/opt/apache-tomcat/conf/server.xml"
sed -i "s#CONNECTOR#$CONNECTOR#" $TOMCAT_SERVER_CONF
sed -i "s#CONTEXT#$CONTEXT#" $TOMCAT_SERVER_CONF
sed -i "s#ACCESS_LOG#$ACCESS_LOG#" $TOMCAT_SERVER_CONF
catalina.sh run
配置示例:
注意:请勿大范围拷贝以下脚本和YAML配置文件中的内容到SSH客户端,否则会引起格式错乱问题。建议直接根据每个配置项的示意按项进行配置。
1.服务镜像jdk8-tomcat8-demo的Dockerfile加入如下代码。
RUN mkdir -p /script
ADD run.sh /script/run.sh
2.修改run.sh文件。
探针版本、探针下载地址、探针安装目录、应用名称、license_key、collector addresses等根据实际情况进行相应替换。需要注意的是,探针的安装目录不要与其他应用共享。
#!/bin/bash
#探针版本
AGENT_VERSION=${AGENT_VERSION}
#探针容器内的安装路径,可将其挂载到容器外,注意此目录严禁与其他共享使用。
TINGYUN_AGENT_PATH=/opt/tingyun_agent
#应用名称
APP_NAME=tomcat-agent-demo
#license_key
LICENSE_KEY=oiHCIGbcaZ3Il4zd
#collector.addresses
COLLECTOR_ADDRESSES=tingyun.server.com:8080
#通过设置YAML中的ENV,修改Tomcat server.xml文件
TOMCAT_SERVER_CONF="/opt/apache-tomcat/conf/server.xml"
sed -i "s#CONNECTOR#$CONNECTOR#" $TOMCAT_SERVER_CONF
sed -i "s#CONTEXT#$CONTEXT#" $TOMCAT_SERVER_CONF
sed -i "s#ACCESS_LOG#$ACCESS_LOG#" $TOMCAT_SERVER_CONF
#下载探针
function DownLoadAgent() {
if [ ! -d $TINGYUN_AGENT_PATH ];then
mkdir -p $TINGYUN_AGENT_PATH
/usr/bin/curl --connect-timeout 10 -m 60 -o $TINGYUN_AGENT_PATH/tingyun-agent-
java-${AGENT_VERSION}.zip $AGENT_DOWNLOAD_URL
unzip -d $TINGYUN_AGENT_PATH $TINGYUN_AGENT_PATH/tingyun-agent-
java-${AGENT_VERSION}.zip && rm -rf $TINGYUN_AGENT_PATH/tingyun-agent-
java-${AGENT_VERSION}.zip
else
echo "检测发现容器内探针目录已存在,尝试启动探针,如若启动失败,请检查容器内探针目录是否
完整,可以尝试将整个探针目录删除,重新安装"
fi
}
#判断是否启用探针
if [ $TINGYUN_AGENT_ENABLE == "true" ];then
DownLoadAgent
if [ $? -eq 0 ];then
export JAVA_OPTS="$JAVA_OPTS \
-Dtingyun.app_name=${APP_NAME} \
-Dtingyun.license_key=${LICENSE_KEY} \
-Dtingyun.collector.addresses=${COLLECTOR_ADDRESSES} \
-javaagent:${TINGYUN_AGENT_PATH}/tingyun/tingyun-agent-java.jar"
echo "将探针启动所需的环境变量打入JAVA_OPTS中"
echo "JAVA_OPTS 更新为:$JAVA_OPTS"
echo "启动服务及探针"
catalina.sh run
else
echo "Java Agent下载及安装失败,服务未启动,可按以下操作:1.检查错误,直至恢复后启动探针
及服务。
2.YAML中AGENT_ENABLE 值设置为false,即关闭探针,启动服务"
fi
else
echo "服务启动(未嵌探针)"
catalina.sh run
fi
3.修改应用镜像tomcat-agent-demo的YAML配置文件中的以下部分:
volumes:
#创建configmap目录,目录下放入修改后run.sh脚本(该脚本在原始脚本的基础上进行了探针
下载、安装、集成启动的一系列修改)
- name: run-config-volume
configMap:
name: tomcat-agent-demo-run-config
volumeMounts:
#新脚本的挂载位置,挂载到容器内原始启动脚本的目录下,替换原始启动脚本
- name: run-config-volume
mountPath: /script
containers:
- name: tomcat-agent-demo
image: registry.tingyun.com/common/tomcat-agent-demo:15
#服务启动
command: ['sh', '/script/run.sh']
env:
#探针安装启动开关,true表示自动安装启动探针,false或其他表示服务不内嵌探针,正常启动
- name: TINGYUN_AGENT_ENABLE
value: "true"
- name: AGENT_DOWNLOAD_URL
#悟空SaaS Java探针下载地址
value: "http://wukong1.tingyun.com/server-config/config/deploy/
download/file?version=3.4.6&type=1&token=30a6c263-
656a-437b-8f3e-9e00cad88de4"
#悟空私有化Java探针下载地址
value: "http://down.tingyun.com/3.0/agent/apm/java/tingyun-agent-
java-${AGENT_VERSION}.zip"
4.基于应用镜像,创建容器并运行,查看探针日志和报表,观察性能数据上传是否正常。