云计算百科
云计算领域专业知识百科平台

Linux 多台服务器日志汇总到一台

        应用服务通过nginx转发到四台应用服务器,且每台配置有8081、8082两个端口,无法确定某订单的业务发生在哪台服务器,逐台查找费时费力

        达成效果:分布在多台linux上的日志合并为一个文件

一 、准备资源文件

1、目标服务器地址,应用(源)服务器地址、

目标地址

目标服务器 合并后地址
192.168.2.1 /home/logs/Order.log
源服务器

应用服务器 端口 日志所在地址
192.168.1.1 8081、8082

/usr/service-8081/logs/Order.log

/usr/service-8082/logs/Order.log

192.168.1.2 8081、8082

/usr/service-8081/logs/Order.log

/usr/service-8082/logs/Order.log

192.168.1.3 8081、8082

/usr/service-8081/logs/Order.log

/usr/service-8082/logs/Order.log

192.168.1.4 8081、8082

/usr/service-8081/logs/Order.log

/usr/service-8082/logs/Order.log

二、Linux远程传输文件免密码

1、目标服务器192.168.2.1生成秘钥

       执行以下命令,连续按Enter,会在会在/root/.ssh目录生成id_rsa、id_rsa.pub

ssh-keygen -t rsa -P ""

效果展示

2、源服务器设置秘钥

将公钥id_rsa.pub的值拷贝到源服务器192.168.1.1的文件中./root/.ssh/authorized_keys

3、测试

3.1 连接测试

登录目标服务器192.168.2.1,做连接测试

ssh -P 22 root@192.168.1.1

如下图,即代表连接成功 

3.2 文件拷贝测试

        执行以下命令,看文件是否拷贝成功

# scp -P 端口 root@ip:源文件 目的地址
scp -P 22 root@192.168.1.1:/usr/service-8081/logs/Order.log /home/logs/Order.log

4、文件合并

        在另外3台服务器上重复操作1、2、3,然后把拷贝后的文件重命名

#重命名为 ip+端口+Order.log
mv /home/logs/Order.log "/home/logs/192.168.1 8081 Order.log"

#合并文件为1个
cat /home/logs/*.log > /home/logs/Order.log

        效果展示

三、脚本样例

        将步骤二中2、3改为有shell脚本实现,如下

#! /bin/bash

# 本地日志存放目录
DEST_BASE_DIR="/home/logs"
#定义源服务器列表
SERVERS=("192.168.1.1" "192.168.1.2" "192.168.1.3" "192.168.1.4" )

# 在目标服务器上创建目录结构: /home/logs/<server_ip><port>/<date>/
DEST_DIR="$DEST_BASE_DIR"

# 获取当前日期
#CURRENT_DATE=$(date +"%Y-%m-%d")
CURRENT_DATE=""
read -p '请确认本次【1】当天,【2】-录入日期' inputDate
echo "inputDate: $inputDate"
if [[ -z "${inputDate// }" ]];then

DEST_DIR="$DEST_BASE_DIR/$CURRENT_DATE"
mkdir $DEST_DIR
else
mkdir $DEST_DIR
fi
#删除历史日志
rm -rf $DEST_DIR/*.log

read -p '请确认本次【1】-8081,【2】-8082,【3】-全部' up

if [ $up = "1" ];then
# 遍历每个源服务器
for SERVER in "${SERVERS[@]}"; do
echo "Processing server: $SERVER"

# 从源服务器复制文件到目标服务器
scp -P 22 root@$SERVER:/usr/zebone/service-8081/logs/Order.log $DEST_DIR
echo "Files from $SERVER copied successfully"
mv $DEST_BASE_DIR/Order.log "$DEST_BASE_DIR/$SERVER 8081 Order.log"

done
cat $DEST_DIR/*.log > $DEST_DIR/Order.log

elif [ $up = "2" ];then
# 遍历每个源服务器
for SERVER in "${SERVERS[@]}"; do
echo "Processing server: $SERVER"

# 从源服务器复制文件到目标服务器
scp -P 22 root@$SERVER:/usr/zebone/service-8082/logs/Order.log $DEST_DIR
echo "Files from $SERVER copied successfully"
mv $DEST_BASE_DIR/Order.log "$DEST_BASE_DIR/$SERVER 8082 Order.log"

done
cat $DEST_DIR/*.log > $DEST_DIR/Order.log
elif [ $up = "3" ];then
# 遍历每个源服务器
for SERVER in "${SERVERS[@]}"; do
echo "Processing server: $SERVER"

# 从源服务器复制文件到目标服务器
scp -P 22 root@$SERVER:/usr/zebone/service-8080/logs/Order.log $DEST_DIR
mv $DEST_BASE_DIR/Order.log "$DEST_BASE_DIR/$SERVER 8081 Order.log"
#接口
scp -P 22 root@$SERVER:/usr/zebone/service-8081/logs/Order.log $DEST_DIR
mv $DEST_BASE_DIR/Order.log "$DEST_BASE_DIR/$SERVER 8082 Order.log"

done
cat $DEST_DIR/*.log > $DEST_DIR/Order.log

else
echo "输入内容不正确"
fi

set fileformat=unix

四、注意事项

1、数据脱敏

        本文所涉及的登录用户(root)、ip(192.168.1.1)、端口(22)、文件名已脱敏,各位需要根据自己的情况调整

2、测试连接仍然需要输入密码

        

Authorized users only. All activities may be monitored and reported.

        是SSH隧道建立成功的提示,说明公钥没有放置正确,参考步骤二 2 源服务器设置秘钥

Permission denied”、“Connection closed

        SSH隧道建立失败,需要核对配置 /etc/ssh/sshd_config

3、权限说明

.        ssh的文件权限必须设置正确

# 在源服务器上执行
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

五、参考链接

SCP配置后仍需密码的解决方案

赞(0)
未经允许不得转载:网硕互联帮助中心 » Linux 多台服务器日志汇总到一台
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!