Get the App
SLTechnology News&Howtos  ›  Servers  › 

Linux queries large log table information by time period and divides it by date

Shulou Source: shulou.com Published: 2022-06-02 13:48:50 10月30日 Update

# check the nohup.out log table 2019-11-18 20:00:00-2019-11-18 22:00:00 (provided there is such a format in the log), and generate exchange_update.log

Cat nohup.out | sed-n'/ 2019-11-18 20 exchange_update.log 0012-11-18 20 exchange_update.log

2020-02-31 18:21

Log query

Scenario: the access.log log is a large file that contains information about all dates. However, when you need to query the log at a certain time on a certain day, both grep and sed are time-consuming, so you need to save the log of this date before querying.

Acess.log log format:

[12/Feb/2020:15:40:46 + 0800]-- 101.20.18.75-- 57197 "POST / api?apiCode=meu_mksm:info HTTP/1.1" 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"

Access.log format settings for nginx.conf:

'[$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"'

First query by date, and save the results

Sed-n'/ 12\ / Feb\ / 2020 Feb 150.Plus / 2020Feb / 2020 Feb 160.hand acess.log > 202021215.log # plus\ is for decompilation to prevent parsers from using / symbols as compiled symbols.

Sed:

-n,-- quiet,-- silent

Suppress automatic printing of pattern space # suppresses automatic printing mode space

Query the 502 response code in 202021215.log

Cat 202021215.log | grep "^ 502 $" # find a segment with a separate word of 502

Result: NULL # because there is no such thing in the log

Grep:

^ means that the matching string is at the beginning of the line

$indicates that the matching string is at the end of the line

Precise query:

Sed-n'/ 2020-02-12 15-15-00-12-12-20-02-12 16-12-00-02-12 16-12-12-02-12 16-12-02-12 16-12-20-02-12 16-12-20-02-12

Running result: NULL

Pit points:

If it is not in the start time log, then the query result is empty, for example, the start time is not in the log at 15:00:00 on 2020-02-12.

If it is not in the end time log, the result of the query is the full log from the start time to the last

Fuzzy query:

Sed-n'/ 2020-02-12 15 purl 0.gamma ris.log # start with the first words 2020-02-12 15: 0 in the log until the end of the first 2020-02-12 16:0

Log segmentation

This section is reproduced to: https://blog.csdn.net/feinifi/article/details/78455563

Scenario: access.log logs for all dates are concentrated here, so it is not convenient to find problems, and the log needs to be separated by date.

Let the log be saved as a single file by date every day, script

#! / 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} `

Change the script to an executable file, and put the script into crontab as a scheduled task startup script.

Chmod + x nginx_logback.sh

Crontab-e

#! / bin/bash

0 * / bin/bash / root/nginx_logback.sh

Tags: Log query date time result script word file format line scene character string symbol and will compile run information precision task Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Xiaomi Microsoft Shulou Technology Apple Huawei