• 利用shell脚本快速定位日志


    我们平时查日志,在测试环境,日志文件只有几个的情况下,我们可以通过找时间接近的文件然后根据关键词定位报错位置,大不了都查一遍,这都可以忍受。但是在实际的生产环境下,服务器集群部署,每天的日志非常多非常多,每台机器都会有几十个甚至多达上百个、数百个日志文件产生。遇到问题需要查询日志时,你会发现如果一个个文件去查,你会崩溃掉。因为这是很费时的重复性工作,而且也不一定能查到。

    为了解决这种问题,大多数人会去编写shell脚本,用来检索日志文件,这样能筛掉很多无用文件,减轻查日志的工作量。服务器集群部署下,同样适用,我们可以在每台机器同样的目录下放一份脚本文件,然后通过xshell对所有远程会话执行脚本,所有连接到的机器就都能执行脚本了。

    我们快速定位问题的前提是首先定位用户的操作记录信息在哪个几个文件,然后在这个几个文件中找到报错的堆栈信息进行分析,从而找到出错的原因。

    缩小报错文件范围,是查日志提高效率的前提。

    下面这段代码是就是简单的筛选日志文件的shell脚本。如果你懂shell编程,可以在此基础上修改,添加你自己需要的功能。

    #!/bin/bash
    #日期$1 关键词$2
    date=$1;
    key_word=$2;
    
    #日志文件的基础目录
    base_path=/home/logs/application/
    #基础目录+指定的目录
    files_path="$base_path$date/"
    
    #判断指定目录下是否有文件
    f_count=$(ls $file_path|grep "^-"|wc -l)
    #文件个数为0,退出脚本
    if [ $f_count -eq 0 ]
    then
    echo "目录下没有文件"
    exit
    fi
    #否则继续执行
    #目录下的所有文件
    files=$(ls $files_path)
    #标志位 找到相关日志后,把tmp下的之前的先删除 只执行一次删除
    flag=0
    echo "start"
    for file in $files
    do
    echo "find in $file"
    #文件的全路径
    f_p="$files_path$file"
    #统计文件中Word的个数
    count=$(grep -c $key_word $f_p)
    #打印包含key_word
    cat $f_p | grep $key_word
    if [ $count -gt 0 ]
    then
    #找到后把tmp清了
    if [ $flag -eq 0 ]
    then
    rm -f tmp/*
    fi
    #标志位置为1,清除只执行一次
    flag=1
    #拷贝包含关键词的文件到tmp下
    cp $f_p tmp/$file
    fi
    done
    echo "end"

    其中base_path是日志文件的根目录,假设我们的日志都是在/home/logs/application/下,每天生成一个日期命名的文件夹放当天的的日志文件,2019-04-18,切割的多个日志文件除固定前缀以外加上索引。
    如/home/logs/application/2019-04-18/application_20190418_0.log和/home/logs/application/2019-04-18/application_20190418_1.log

    假如截止到今天查询日志时服务器产生了80个文件,我要查某个用户提的工单反馈,我们日志里都会打印用户手机号,那么我们可以这样:

    sh find.sh 2019-04-18 18300000000

    这样脚本会拷贝用户18300000000的所有操作记录的日志文件到tmp目录里(与shell脚本同目录),然后我们对tmp下的日志进行操作。

    在日志太多的情况下,日志可能会被打包压缩,我们可以改下脚本,多一步,先把压缩后的解压缩再进行查找操作。

    有的公司会有更高级的做法,例如elk日志分析平台,我们在elk上查日志更加方便,可视化的界面,可选择性更强,多查询条件等。

  • 相关阅读:
    如何禁用Xcode7下iOS9 App传输安全,并修复无法连接服务器错误
    iOS单例清除
    Git忽略规则及.gitignore规则不生效的解决办法
    javascript 在ie8中报“缺少标识符、字符串或数字“问题再现:
    树莓派 远程桌面 设置显示中文
    在IIS Express中调试时无法读取配置文件 错误
    Win7 下IIS(7.5)发布 ASP.NET MVC
    .Net中使用com组件后发生System.ArithmeticException异常的解决办法(Message=算术运算中发生溢出或下溢。)
    CodeSimth
    windows 开机启动 CassiniDev(IIS替代软件)
  • 原文地址:https://www.cnblogs.com/ibigboy/p/11139335.html
Copyright © 2020-2023  润新知