Linux按时间段查询大日志表信息及按日期分割-创新互联
#查nohup.out日志表2019-11-18 20:00:00 - 2019-11-18 22:00:00这两小时的记录(前提是日志里有这样的格式时间),并生成exchange_update.log
目前成都创新互联已为1000多家的企业提供了网站建设、域名、网站空间、网站运营、企业网站设计、叶县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。cat nohup.out | sed -n '/2019-11-18 20:00:00/,/2019-11-18 22:00:00/ p' > exchange_update.log
-------------------------------------------------------------------------------
2020-02-31 18:21
-------------------------------------------------------------------------------
日志查询
场景:access.log日志是一个大文件,含有所有日期的信息。但需要查询某天某时的日志时,直接grep和sed都很耗时,所以需要先将该段日期的日志保存再查询。
acess.log日志格式:
[12/Feb/2020:15:40:46 +0800] -- 101.20.18.75 -- 57197 "POST /api?apiCode=meu_mksm:info HTTP/1.1" 200 "0.011" -- "0.011" -- "gdn.cn 154.121.10.206 9443 localhost" - "https://gdn.cn:9443/view/xtgl/mksm_view.html?apiCode=meu_mksm:info&code=M9502"
nginx.conf的access.log格式设置:
'[$time_local] -- $remote_addr -- $remote_port "$request_method $request_uri $server_protocol" $status "$upstream_response_time" -- "$request_time" -- "$host $server_addr $server_port $server_name" - "$http_referer"';
先按日期查询,并将结果保存
sed -n '/12\/Feb\/2020:15:0./,/12\/Feb\/2020:16:0./p' acess.log > 202021215.log #加\是为了反编译,避免解析器将/符号当做编译符号
sed:
-n, --quiet, --silent
suppress automatic printing of pattern space # 抑制自动打印模式空间
查询202021215.log中502响应码
cat 202021215.log | grep "^502$" #查找有单独502字样的段
运行结果:NULL #因为日志里本来就没有
grep:
^ 指匹配字符串在行首
$ 指匹配字符串在行尾
精确查询:
sed -n '/2020-02-12 15:00:00/,/2020-02-12 16:00:00/p' ris.log
运行结果:NULL
坑点:
如果开始时间日志里面是没有的,那么查询结果为空,比如开始时间2020-02-12 15:00:00日志里没有
如果结束时间日志里面是没有的,查询的结果就是开始时间到最后的全部日志
模糊查询:
sed -n '/2020-02-12 15:0./,/2020-02-12 16:0./p' ris.log #从日志里有2020-02-12 15点0第一个字样的开始查,直到有第一个2020-02-12 16:0字样的结束
日志分割
此部分转载至:https://blog.csdn.net/feinifi/article/details/78455563
场景:access.log所有日期的日志都集中在这里,查找问题不方便,需要将该日志按日期分割出来。
让日志每天按日期保存成单个文件,脚本
#!/bin/bash
YESTERDAY=$(date -d "yesterday" +"%Y-%m-%d")
LOGPATH=/usr/local/openresty/nginx/logs/
PID=${LOGPATH}nginx.pid
mv ${LOGPATH}access.log ${LOGPATH}access-${YESTERDAY}.log
mv ${LOGPATH}error.log ${LOGPATH}error-${YESTERDAY}.log
kill -USR1 `cat ${PID}`
变更脚本为可执行文件,并将脚本作为定时任务启动脚本,放入crontab中。
chmod +x nginx_logback.sh
crontab -e
#!/bin/bash
0 0 * * * /bin/bash /root/nginx_logback.sh
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:Linux按时间段查询大日志表信息及按日期分割-创新互联
标题来源:http://pwwzsj.com/article/dddpee.html