栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

多服务器的日志收集

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多服务器的日志收集

多服务器的日志收集

多服务器的日志收集是为了解决日志文件不集中的问题,现实中由于服务器的性能限制,线上许多项目部署在不同服务器中,产生的日志都在各个项目部署服务器中,运维人员进行维护时,只能逐一访问服务器,检查日志文件进行维护,过程繁杂耗时。多服务器的日志收集的实现主要包括日志切分、文件下载、服务器配置、定时下载四个步骤。

日志切分是指,原始tomact 的日志输出在单个catalina.out文件中。如果不进行切分存储,则会造成catalina.out文件庞大,难以进行日志跟踪。常用的日志切分方式有,按时间切分、按文件大小切分等,

这里采用以天为单位进行日志切分。

文件下载是指,通过运行sh脚本,实现对某个服务器上指定位置的文件进行下载。文件下载的主要工具需要用到lftp插件,进行远程sftp操作。

服务器配置, 主要是用于对每台服务器上不同文件路径的文件下载,进行配置。

定时下载是指,通过crontab工具,实现每天凌晨拉取昨日文件,每隔5分钟拉取实时日志的功能。实现日志文件的集中存放查看,减少追踪日志时,需要到具体某一个服务器的某个tomcat的日志目录中查询日志的繁琐操作。

多服务器的日志收集项目结构如下图所示

  • bin目录主要存放脚本文件,用于执行任务。
  • download.sh用于下载某一天的日志

  • config.sh用于配置多服务器的属性、目标下载目录等。

  • logs目录主要存放各个服务器及其tomcat的日志文件。

日志切分

日志切分主要有三种方式,1.sh定时脚本切分、2.第三方工具(log4j、cronolog)

1.sh定时脚本切分:通过自己写的脚本对日志进行切分。优点:灵活、自定义程度高。缺点:需要手动维护,定时任务配置要求严格,会产生日志文件丢失。

2.log4j:优点:单独的配置文件,不用修改catalina.sh,自定义程度较高。缺点: 2022年1月爆出log4j存在高危漏洞.

3.cronolog:优点:安全。缺点:自定义程度低,需要修改catalina.sh,在修改过程中可能因为tomcat版本不同出现差异。

参考资料:

https://blog.csdn.net/yuki5233/article/details/82257889?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-2-82257889-blog-122333342.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-2-82257889-blog-122333342.pc_relevant_paycolumn_v3&utm_relevant_index=5

该系统采用cronolog方式进行切分,下载安装cronolog工具的脚本如下:

#!/bin/bash

cd ~

pwd

wget https://files.cnblogs.com/files/crazyzero/cronolog-1.6.2.tar.gz

tar xf cronolog-1.6.2.tar.gz 

cd cronolog-1.6.2 

./configure 

make & make install

echo "cronolog is installed, its command location is as fallow"

which cronolog 

文件下载地址:https://files.cnblogs.com/files/crazyzero/cronolog-1.6.2.tar.gz 暂时比官网快,后期若出现下载慢,或不存在资源可自行进行更换。

下载完成后会出现以下提示:/usr/local/sbin/cronolog及代表工具安装成功。

文件的压缩包在首次登录的文件路径, 可执行以下命令进行查看

[root@VM-20-5-centos ~]# cd ~
[root@VM-20-5-centos ~]# ll
total 188
-rw-r--r-- 1 root root      6 May 18 14:50 a.txt
drwxrwxrwx 6  201  201   4096 May 17 17:58 cronolog-1.6.2
-rw-r--r-- 1 root root 133591 Aug 25  2017 cronolog-1.6.2.tar.gz

会出现该问文件夹cronolog-1.6.2和压缩包cronolog-1.6.2.tar.gz

catalina.sh文件修改:

org.apache.catalina.startup.Bootstrap “$@” start     
>> “$CATALINA_BASE”/logs/catalina.out 2>&1 & 
#将上面两行内容替换为以下内容:
org.apache.catalina.startup.Bootstrap "$@" start  2>&1    
| /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &  

#然后再注释掉:
touch "$CATALINA_BASE"/logs/catalina.out
#其实touch catalina.out(创建这个文件)的语句,注不注掉都无所谓,反正修改成功了里面不会有东西的。

重启tomcat后在logs文件夹下就会出现当日的日志catalina.2022-xx-xx.out

文件下载

文件下载需要lftp插件,命令如下:

[root@VM-20-5-centos ~]# yum -y install lftp
[root@VM-20-5-centos ~]# which lftp
/usr/bin/lftp


出现 /usr/bin/lftp表示安装成功

文件下载脚本为down.sh,其内容如下

#!/bin/bash

#文件下载
#初始化

#日期
currentDay=$(date "+%Y-%m-%d %H:%M:%S")

#DOWN_DIR=/root/tomcat-tms-8866/logs
DOWN_DIR=$4
#下载的文件名
DOWN_FILE="catalina.${downloadDay}.out"
DOWN_FULL_FILENAME=${DOWN_DIR}/${DOWN_FILE}

#SAVE_DIR=/root/shell/logs
SAVE_DIR=$5
SAVE_FILE_TAR="${DOWN_FILE}.tar"
SAVE_FULL_FILENAME=${SAVE_DIR}/${DOWN_FILE}
SAVE_FULL_FILENAME_TAR=${SAVE_DIR}/${SAVE_FILE_TAR}

DOWN_LOG=$SAVE_DIR/download_file.log
DOWN_LOG_ALL=${BASE_PATH}/bin/download.log

TASK_NAME=$6
#打印
echo -e "33[42m ------------------------------------ In download sh, start task: ${TASK_NAME}, pid: $$ , time: $currentDay------------------------------------33[0m"
echo -e "--> remote full name : 33[37m ${DOWN_FULL_FILENAME} 33[0m "
echo -e "--> local save file : 33[31m ${SAVE_FULL_FILENAME_TAR} 33[0m"

#删除已下载的文件
if [ -e ${SAVE_FULL_FILENAME_TAR} ];then
   rm -f ${SAVE_FULL_FILENAME_TAR} 
   echo -e "--> the local duplicate file:33[31m ${SAVE_FULL_FILENAME_TAR} 33[0m existed, delete finish"
else 
   echo -e "--> no file: 33[31m ${SAVE_FULL_FILENAME_TAR} 33[0m duplicate "
fi

if [ -e ${SAVE_FULL_FILENAME} ];then
   rm -f ${SAVE_FULL_FILENAME} 
   echo -e "--> the local duplicate file:33[31m ${SAVE_FULL_FILENAME} 33[0m existed, delete finish"
else 
   echo -e "--> no file: 33[31m ${SAVE_FULL_FILENAME} 33[0m duplicate "
fi
#判断保存的文件夹是否存在
if [ -d ${SAVE_DIR} ];then
   echo -e "--> the save folder: 33[34m ${SAVE_DIR} 33[0m existed "
else
   mkdir -p ${SAVE_DIR}
   echo -e "--> the save folder: 33[34m ${SAVE_DIR} 33[0m not exist, now has created "
fi

#SFTP配置信息
#用户名
USER=$1
#echo ${USER}
#密码
PASSWORD=$2
#echo ${PASSWORD}
#IP
IP=$3
echo "--> the remote IP : ${IP}"
#端口
PORT=22
#下载文件 (关键部分)
#rm -f ${DOWN_FULL_FILENAME}
lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT} < task success"
   echo "==##> ${TASK_NAME} download $currentDay's files from romote FTP server successful." >>$DOWN_LOG
   echo "==##> ${TASK_NAME} download $currentDay's files from romote FTP server successful. IP: ${IP}, DIR: ${SAVE_DIR}. " >>$DOWN_LOG_ALL
   cd ${SAVE_DIR}
   tar -cf ${SAVE_FILE_TAR} ${DOWN_FILE}
   rm -f ${DOWN_FILE}
else
   echo "==!!> task fail"
   echo "==!!> ${TASK_NAME} dwonload files failed, pls check." >>$DOWN_LOG
   echo "==!!> ${TASK_NAME} download $currentDay's files from romote FTP server failed. IP: ${IP}, DIR: ${SAVE_DIR}. " >>$DOWN_LOG_ALL
fi
echo -e "33[42m ------------------------------------ Out download sh, goodbye! ------------------------------------33[0m"

down.sh文件的入参主要有如下6个:

  • 目标服务器登录名

  • 目标服务器密码

  • 目标服务器地址

  • 目标服务器文件夹

  • 本地存储文件夹

  • 任务名

该脚本的执行方式为如下,参数传入以空格分隔:

sh ./download.sh root 123456 192.168.0.1 /tomcat/logs /local/logs s1_1

执行该脚本会打印如下信息:

服务器配置

该脚本使用到map结构,需要 bash 4.1.2 版本以上支持

服务器配置文件命名为 config.sh,文件内容如下:

#!/bin/bash

#多服务器 配置
user=loguser
passwd='**********************'

export BASE_PATH=$(cd "$(dirname "$0")";cd ../;pwd)

SAVE_DIR_ROOT=${BASE_PATH}/logs
echo ${BASE_PATH}
input_day=$1
export downloadDay=`eval echo '$'"(date -d"${input_day}" "+%Y-%m-%d")"`

#注释是否开启;开启:note='echo'  |  关闭:note=#
#note='echo'
note='#'

S1_IP=43.254.3.125
declare -A s1_1=(["IP"]=${S1_IP} ["down_dir"]="/root/tomcat-tms-8866/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S1_IP}/tomcat-tms-8866")
declare -A s1_2=(["IP"]=${S1_IP} ["down_dir"]="/root/tomcat-tms-8860/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S1_IP}/tomcat-tms-8860")

S2_IP=117.78.40.141
declare -A s2_1=(["IP"]=${S2_IP} ["down_dir"]="/home/tomcat/apache-tomcat-houduan/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S2_IP}/apache-tomcat-houduan")
declare -A s2_2=(["IP"]=${S2_IP} ["down_dir"]="/home/tomcat/apache-tomcat-city-8088/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S2_IP}/apache-tomcat-city-8088")
declare -A s2_3=(["IP"]=${S2_IP} ["down_dir"]="/home/tomcat/apache-tomcat-shabro/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S2_IP}/apache-tomcat-shabro")
declare -A s2_4=(["IP"]=${S2_IP} ["down_dir"]="/home/tomcat/apache-tomcat-shabro-check/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S2_IP}/apache-tomcat-shabro-check")
declare -A s2_5=(["IP"]=${S2_IP} ["down_dir"]="/home/tomcat/apache-tomcat-shabro-new/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S2_IP}/apache-tomcat-shabro-new")
declare -A s2_6=(["IP"]=${S2_IP} ["down_dir"]="/home/tomcat/apache-tomcat-sync/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S2_IP}/apache-tomcat-sync")
declare -A s2_7=(["IP"]=${S2_IP} ["down_dir"]="/home/tomcat/apache-tomcat-web/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S2_IP}/apache-tomcat-web")
declare -A s2_8=(["IP"]=${S2_IP} ["down_dir"]="/home/tomcat/qianduan_tomcat/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S2_IP}/qianduan_tomcat")

S3_IP=49.4.94.16
declare -A s3_1=(["IP"]=${S3_IP} ["down_dir"]="/usr/local/tomcat/front-tomcat/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S3_IP}/front-tomcat/")

S4_IP=49.4.90.194
declare -A s4_1=(["IP"]=${S4_IP} ["down_dir"]="/usr/local/tomcat/sc-tomcat-all/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S4_IP}/sc-tomcat-all/")

array=("s1_1" "s1_2" "s2_1" "s2_2" "s2_3" "s2_4" "s2_5" "s2_6" "s2_7" "s2_8" "s3_1" "s4_1")

echo "----------------------------------------- Multi Task Begin Start -----------------------------------------------------"

for map in ${array[@]};do
   eval "${note}" "----------------------------------------- Config start info  -----------------------------------------------------"
   eval "${note}" "current map : ${map}"
   IP=`eval echo '$'"{${map}["IP"]}"`
   eval "${note}" "IP: ${IP}"

   down_dir=`eval echo '$'"{${map}["down_dir"]}"`
   eval "${note}" "down_dir: ${down_dir}"

   save_dir=`eval echo '$'"{${map}["save_dir"]}"`
   eval "${note}" "save_dir: ${save_dir}"
   eval "${note}" "----------------------------------------- Config end info  -----------------------------------------------------"
   sh ${BASE_PATH}/bin/download.sh ${user} ${passwd} ${IP} ${down_dir} ${save_dir} ${map}
done
echo "----------------------------------------- Multi Task Exec Finish -----------------------------------------------------"


config.sh文件的入参为下载日期,可为 today 、yesterday 、3 day ago 等,可参照

执行脚本的命令如下:

./config.sh yesterday 

其中用于temp.log存在每条down.sh的打印信息

执行效果:

若要添加服务器配置,参考步骤如下:

1.声名一个服务器的IP
S100_IP=117.78.40.141

2.声名该服务器的map,其中包含ip、下载目录、存储目录。IP可通过 ${S100_IP} 获取,下载目录为目标服务器的日志存储目录,
存储目录为存放到本机的目录,格式可参考为 ${SAVE_DIR_ROOT}/${S100_IP}/apache-tomcat-houduan 。其真是目录为 /home/loguser/logstack/logs/服务器IP/tomcat项目目录/。
declare -A s100_1=(["IP"]=${S100_IP} ["down_dir"]="/home/tomcat/apache-tomcat-houduan/logs" ["save_dir"]="${SAVE_DIR_ROOT}/${S100_IP}/apache-tomcat-houduan")

3.在array数组追加一条map的引用名

array=("s1_1" ... "s100_1")

保存后运行 ./config.sh yesterday  即可生效。


定时下载

crontab安装:

定时下载任务需要用到crontab工具,下载安装过程如下

yum -y install vixie-cronyum -y install crontabs
which crontab

出现:/usr/bin/crontab 提示表明安装成功

在执行定时任务前,需要将脚本更改为可执行文件, 定时任务才可以运行脚本。

命令为: chmod +x config.sh

定时任务配置:

输入crontab -e 即可进入定时任务编辑界面,操作与vim类似,按i进入编辑模式。

定时任务需要配置两条任务,一条用于下载昨天的日志,另一条用于下载实时日志。

每天两点,和2.30下载昨天的日志

 */30 2 */1 * * 目录/config.sh yesterday

每天每隔5分钟下载今日日志

*/5 * * * * /home/loguser/logstack/bin/config.sh today >> /home/loguser/logstack/bin/cron_today.log

退出后,会自动开启定时任务。为了防止突然断电等突发情况导致关机重启,可将crontab设置开机自启,这里不再赘述。可参考文章:

https://blog.csdn.net/owenzhang24/article/details/122537552

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号