微服务模式:如何查看某个服务实例的代码及日志?

已邀请:

场景:开发人员经常要看当前服务的代码以及日志等。为了确认代码和补丁正确,同时分析日志等。


1、标准操作

1.1查看容器代码

/uploads/files_user1/answer/5ef2da9685a8d673586.png

登录开发者中心,在应用管理,找到相应的服务,点击对应实例右侧的“容器控制台”图标,即可打开控制台,登录即可查看代码和日志

1.2下载日志

/uploads/files_user1/answer/5ef2dafd525eb575578.png

登录开发者中心,进入应用管理,切换到“日志下载”页签,即可看到当前实例下的日志,进行下载。


背景:开发不一定会命令行、不知道怎么找,就希望通过windows页面浏览,日志目前管理查看也有瑕疵,比较乱。需要精准下载。

2、技术型解决

通过确认实例运行的所在主机,然后通过docker ps 命令,找到容器的id,然后通过docker cp将容器文件拷贝出来提供给开发。


3、优化操作

解决思路:通过输入实例名和实例所在IP,直接远程将文件拷贝并配置到共享目录,这样可以相对自动化的提供。


3.1配置jenkins,给开发/带集成人员提供操作入口

建议在安装器主机安装,参考:http://nccloud.yytimes.com/q_78.html

目前临时采用http://10.16.224.106:7070/jenkins上公用的jenkins进行。


如安装在安装器主机,则无需配置免密过程。如采用http://10.16.224.106:7070/jenkins上的jenkins,则需要配置10.16.226.131(实际jenkins子节点)主机到服务所在资源池主机的免密。


3.2在资源池主机上配置samba共享,例如共享/data目录映射为home目录,用户名密码为nctest/nctest(也可在安装器主机配置共享,完善脚本拉取文件到安装器主机,本场景为利用各资源池主机独立共享)


3.3创建远程调度脚本 /root/cp_docker_files.sh ,内容如下


#!/bin/bash
chechsshconfig=`grep "UseDNS yes" /etc/ssh/sshd_config`
if [ -n "$chechsshconfig" ]
then
echo "调整SSH配置"
sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
service sshd restart
fi

freespace=`df -h |grep /data |grep -v docker |grep -v k8s | awk -F " " '{print $4}'`
echo "当前磁盘空间剩余:$freespace ,如剩余量不足请告知环境组!"
imageid=$1
workip=$2
if [ $imageid ]
then
echo "正在寻找位于___,实例ID为$imageid的容器..."
containerid=`docker ps |grep $imageid |grep -v k8s_POD_ |awk -F " " '{print $1}'`
echo "找到实例$imageid的容器ID:"$containerid
ts=`date +"%Y-%m-%d_%H_%M"`
echo "当前获取到的时间戳:$ts"
echo "创建本地目录/data/imagehome/${imageid}_${ts}"
mkdir -p /data/imagehome/${imageid}_${ts}
echo "拷贝容器文件到本地..."
docker cp ${containerid}:/usr/local/tomcat/webapps/ROOT/WEB-INF /data/imagehome/${imageid}_${ts}/
echo "实例$imageid的镜像代码已拷贝至/data/imagehome/${imageid}_${ts}/"

echo "拷贝当前实例的日志..."
mkdir -p /data/imagehome/${imageid}_${ts}/nclogs
svcname1=${imageid%-*}
svcname=${svcname1%-*}
docker cp ${containerid}:/developerMountData/log/datalog/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$svcname/$imageid/ /data/imagehome/${imageid}_${ts}/nclogs/
echo "实例$imageid的nclogs日志已拷贝至/data/imagehome/${imageid}_${ts}/"

#hostip=`ifconfig | grep 255.255.255.0 |awk -F " " '{print $2}'`
#hostip=${hostip#*:}
hostip=$workip
echo -e '截至${ts}时点的实例$imageid的nclogs日志请访问\\\\'${hostip}'\home\\'$imageid'_'$ts'\\查看。用户名/密码:nctest/nctest'

chown -R nctest:nctest /data/imagehome/${imageid}_${ts}/

else
echo "输入无效!"
fi

3.4 配置jenkins任务

配置image_id和hostip两个手动配置的传入变量,构建动作选择“Execute shell”,具体动作为

ssh root@${hostip} "/root/cp_docker_files.sh $image_id ${hostip}"


运行效果如下

/uploads/files_user1/answer/5ef2de99abb31404344.png

之后,即可将最后的输出,发送给开发/带集成人员即可

要回复问题请先登录注册