获取前一天Tomcat的异常日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

获取前一天Tomcat的异常日志

前几天收到主管的要求,说让我把各团队负责的Tomcat前一天的异常日志信息通过邮件发送给各团队主管。那么,后来就写出了这个脚本。

思路大概是先把团队tomcat的log检索异常信息进行重定向到文件中,然后判断该文件是否有信息,如果没有,则移除;如果有,则压缩进行打包发送,发送之后进行检索下一个团队的log file。

里面的err_log.txt文件所包含的是 server_ip、host_name、以及item_name,例如长下面这样:

172.16.1.16 S-C4 tradeservice-alive1
172.16.1.17 S-C5 tradeservice-alive1
172.16.1.25 S-C15 tradeservice-alive1
172.16.1.31 S-C21 tradeservice-alive1

下面是脚本

#!/bin/bash

date=$(date "+%h %d")
day=$(date +%Y-%m-%d)

#日志文件存放目录
#tar打包后存放目录
#发送邮件后移除到old目录
log_dir="/tmp/tomcat_error/tomcat_error_log"
tar_dir="/tmp/tomcat_error/tomcat_error_tar"
old_dir="/tmp/tomcat_error/tomcat_error_old"

#grep在检索的时候所过滤掉的信息,将变量带入下面每个团队的grep中
grep_content="(WARN|null|org.apache.catalina.connector.|Mozilla|DEBUG level|isSuccess)"

#小毛团队_Tomcat_Log
#查看小毛团队的tomcat个数
tomcat_line="$(cat /data/sh/xiaomao_err_list.txt | egrep -v "(^$|^#)" | wc -l)"
xiaomao_list="/data/sh/xiaomao_err_list.txt"
tram="hero"

for (( n = 1; n <= ${tomcat_line} ; n++ ))
do
#ip_addreess为tomcat所在serverip
#host_name为tomcat所在主机名
#item_name为tomcat具体名称
        ip_addres=$(sed -n ${n}p ${xiaomao_list} | awk '{print $1}')
        host_name=$(sed -n ${n}p ${xiaomao_list} | awk '{print $2}')
        item_name=$(sed -n ${n}p ${xiaomao_list} | awk '{print $3}')
        echo ${ip_addres}_${host_name}_${item_name}

#ssh通过远程过滤日志并且将日志保存在log_dir下面
        ssh root@${ip_addres} "grep -v INFO /usr/local/tomcats/${item_name}/logs/catalina.out" | egrep -v "${grep_content}" |grep -v "${date}" > ${log_dir}/${item_name}_${host_name}_error.log

#进入log_dir目录,查看日志行数
#判断日志是否为空,如果为空则表示无错误,移除。避免打包发送
        cd ${log_dir} && line=$(cat ${item_name}_${host_name}_error.log | wc -l)

        if [ ${line} -eq 0 ] ;then
                mv ${item_name}_${host_name}_error.log ${old_dir}
        fi
done

#进行打包,并且通过邮件发送给小毛团队
#发送完之后将log及tar包进行移除,避免和下个团队的log混在一起
        tar jcf ${tar_dir}/${day}_${tram}_all_error.log.tbz2 *.log
        echo "${day}_${tram}_all_error.log" | mail -s "${day}_${tram}_all_error.log" -a ${tar_dir}/${day}_${tram}_all_error.log.tbz2 xiaomao@xxx.com
        mv ${log_dir}/* ${tar_dir}/* ${old_dir}/


#九戒团队_Tomcat_Log
tomcat_line="$(cat /data/sh/jiujie_err_list.txt | egrep -v "(^$|^#)" | wc -l)"
jiujie_list="/data/sh/jiujie_err_list.txt"
tram="qingyun"

for (( n = 1; n <= ${tomcat_line} ; n++ ))
do
        ip_addres=$(sed -n ${n}p ${jiujie_list} | awk '{print $1}')
        host_name=$(sed -n ${n}p ${jiujie_list} | awk '{print $2}')
        item_name=$(sed -n ${n}p ${jiujie_list} | awk '{print $3}')
    echo ${ip_addres}_${host_name}_${item_name}

    ssh root@${ip_addres} "grep -v INFO /usr/local/tomcats/${item_name}/logs/catalina.out" | egrep -v "${grep_content}" |grep -v "${date}" > ${log_dir}/${item_name}_${host_name}_error.log
        cd ${log_dir} && line=$(cat ${item_name}_${host_name}_error.log | wc -l)
        if [ ${line} -eq 0 ] ;then
                mv ${item_name}_${host_name}_error.log ${old_dir}
        fi
done
        tar jcf ${tar_dir}/${day}_${tram}_all_error.log.tbz2 *.log
        echo "${day}_${tram}_all_error.log" | mail -s "${day}_${tram}_all_error.log" -a ${tar_dir}/${day}_${tram}_all_error.log.tbz2 jiujie@xxx.com
        mv ${log_dir}/* ${tar_dir}/* ${old_dir}/


#晨风团队_Tomcat_Log
tomcat_line="$(cat /data/sh/chenfeng_err_list.txt | egrep -v "(^$|^#)" | wc -l)"
chenfeng_list="/data/sh/chenfeng_err_list.txt"
tram="kunlun"

for (( n = 1; n <= ${tomcat_line} ; n++ ))
do
        ip_addres=$(sed -n ${n}p ${chenfeng_list} | awk '{print $1}')
        host_name=$(sed -n ${n}p ${chenfeng_list} | awk '{print $2}')
        item_name=$(sed -n ${n}p ${chenfeng_list} | awk '{print $3}')
       echo ${ip_addres}_${host_name}_${item_name}

       ssh root@${ip_addres} "grep -v INFO /usr/local/tomcats/${item_name}/logs/catalina.out" | egrep -v "${grep_content}" |grep -v "${date}" > ${log_dir}/${item_name}_${host_name}_error.log
        cd ${log_dir} && line=$(cat ${item_name}_${host_name}_error.log | wc -l)
        if [ ${line} -eq 0 ] ;then
                mv ${item_name}_${host_name}_error.log ${old_dir}
        fi
done
        tar jcf ${tar_dir}/${day}_${tram}_all_error.log.tbz2 *.log
        echo "${day}_${tram}_all_error.log" | mail -s "${day}_${tram}_all_error.log" -a ${tar_dir}/${day}_${tram}_all_error.log.tbz2 chenfeng@xxx.com
        mv ${log_dir}/* ${tar_dir}/* ${old_dir}/



#缺哥团队_Tomcat_Log
tomcat_line="$(cat /data/sh/wuque_err_list.txt | egrep -v "(^$|^#)" | wc -l)"
wuque_list="/data/sh/wuque_err_list.txt"
tram="xiaoyao"

for (( n = 1; n <= ${tomcat_line} ; n++ ))
do
        ip_addres=$(sed -n ${n}p ${wuque_list} | awk '{print $1}')
        host_name=$(sed -n ${n}p ${wuque_list} | awk '{print $2}')
        item_name=$(sed -n ${n}p ${wuque_list} | awk '{print $3}')
       echo ${ip_addres}_${host_name}_${item_name}

       ssh root@${ip_addres} "grep -v INFO /usr/local/tomcats/${item_name}/logs/catalina.out" | egrep -v "${grep_content}" |grep -v "${date}" > ${log_dir}/${item_name}_${host_name}_error.log
        cd ${log_dir} && line=$(cat ${item_name}_${host_name}_error.log | wc -l)
        if [ ${line} -eq 0 ] ;then
                mv ${item_name}_${host_name}_error.log ${old_dir}
        fi
done
        tar jcf ${tar_dir}/${day}_${tram}_all_error.log.tbz2 *.log
        echo "${day}_${tram}_all_error.log" | mail -s "${day}_${tram}_all_error.log" -a ${tar_dir}/${day}_${tram}_all_error.log.tbz2 wuque@xxx.com
        mv ${log_dir}/* ${tar_dir}/* ${old_dir}/



#忍冬团队_Tomcat_Log
tomcat_line="$(cat /data/sh/rendong_err_list.txt | egrep -v "(^$|^#)" | wc -l)"
rendong_list="/data/sh/rendong_err_list.txt"
tram="shushan"

for (( n = 1; n <= ${tomcat_line} ; n++ ))
do
        ip_addres=$(sed -n ${n}p ${rendong_list} | awk '{print $1}')
        host_name=$(sed -n ${n}p ${rendong_list} | awk '{print $2}')
        item_name=$(sed -n ${n}p ${rendong_list} | awk '{print $3}')
       echo ${ip_addres}_${host_name}_${item_name}

       ssh root@${ip_addres} "grep -v INFO /usr/local/tomcats/${item_name}/logs/catalina.out" | egrep -v "${grep_content}" |grep -v "${date}" > ${log_dir}/${item_name}_${host_name}_error.log
        cd ${log_dir} && line=$(cat ${item_name}_${host_name}_error.log | wc -l)
        if [ ${line} -eq 0 ] ;then
                mv ${item_name}_${host_name}_error.log ${old_dir}
        fi
done
        tar jcf ${tar_dir}/${day}_${tram}_all_error.log.tbz2 *.log
        echo "${day}_${tram}_all_error.log" | mail -s "${day}_${tram}_all_error.log" -a ${tar_dir}/${day}_${tram}_all_error.log.tbz2 rendong@xxx.com
        mv ${log_dir}/* ${tar_dir}/* ${old_dir}/

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
27天前
|
测试技术 开发工具 git
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
为了高效地发现、定位和解决预发问题,闲鱼团队研发了一套异常日志问题自动追踪-定位-分发机制。这套机制通过自动化手段,实现了异常日志的定时扫描、精准定位和自动分发,显著降低了开发和测试的成本,提高了问题解决的效率。
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
|
2月前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
45 2
|
3月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
3月前
|
JSON 缓存 fastjson
一行日志引发的系统异常
本文记录了一行日志引发的系统异常以及作者解决问题的思路。
|
4月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
5月前
|
安全 Java API
为什么捕获异常后不要使用e.printStackTrace()打印日志
为什么捕获异常后不要使用e.printStackTrace()打印日志
|
5月前
|
运维
系统日志使用问题之如何防止在打印参数时遇到NPE(空指针异常)
系统日志使用问题之如何防止在打印参数时遇到NPE(空指针异常)
|
4月前
|
监控 安全 Linux
在Linux中,如何查看和审计系统日志文件以检测异常活动?
在Linux中,如何查看和审计系统日志文件以检测异常活动?
|
5月前
|
监控
监控治理问题之想规范化异常抛出和日志使用以降低CDO报警噪音,如何解决
监控治理问题之想规范化异常抛出和日志使用以降低CDO报警噪音,如何解决
|
6月前
|
应用服务中间件
Tomcat日志中文乱码
Tomcat日志中文乱码