获取前一天Tomcat的异常日志

简介:

获取前一天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}/

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
9月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1627 5
|
12月前
|
运维 监控 安全
Syslog 日志分析与异常检测技巧
系统日志蕴含设备运行关键信息,但分析提取颇具挑战。本文详解从命令行工具(如 Grep、Tail、Awk)到专业软件(如 EventLog Analyzer)的全流程日志分析技巧,助你高效挖掘 Syslog 价值,提升运维与安全响应能力。
693 4
|
Java 应用服务中间件 Linux
Tomcat运行日志字符错乱/项目启动时控制台日志乱码问题
总结: 通过以上几种方法,概括如下:指定编码格式、设置JVM的文件编码、修改控制台输出编码、修正JSP页面编码和设置过滤器。遵循这些步骤,你可以依次排查和解决Tomcat运行日志字符错乱及项目启动时控制台日志乱码问题。希望这些建议能对你的问题提供有效的解决方案。
2255 16
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
1708 13
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
测试技术 开发工具 git
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
为了高效地发现、定位和解决预发问题,闲鱼团队研发了一套异常日志问题自动追踪-定位-分发机制。这套机制通过自动化手段,实现了异常日志的定时扫描、精准定位和自动分发,显著降低了开发和测试的成本,提高了问题解决的效率。
685 15
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
488 2
|
应用服务中间件
Tomcat日志实现每天切割(通过Cronolog实现日志分割)
Tomcat日志,如果不做切割处理,会导致日志输出会越来越大,不方便后续的问题追踪。 所以我们对日志文件进行按天进行分割。
1182 1
Tomcat日志实现每天切割(通过Cronolog实现日志分割)
|
Shell 应用服务中间件 Linux
Tomcat 日志分割.
一、前言    随着每天业务的增长,Tomcat 的catalina.out日志 变得越来越大,占用磁盘空间不说。要查看某个时候的日志的时候,庞大的日志让你顿时无从下手,所以日志的切割的变得刻不容缓。
1596 0