nginx access 로 그 를 시간 에 따라 분할 합 니 다.
1953 단어 nginx 로그 분할로그로그 분할
#!/bin/bash
#file log path
log_file='/var/log/nginx/access.log'
last_hour=1
# start time
start_time=`date -d "$last_hour hour ago" +"%H:%M:%S"`
# end time
end_time=`date +"%H:%M:%S"`
#Get the host ip address
host_ip=`ip addr |grep eth0|awk 'BEGIN{FS="([[:space:]]|/)+"}NR==2{print $3}'`
# output log file
filter_ip='/opt/scripts/log/hour_ip.txt'
# app name
app_name="#"
echo "$app_name: $host_ip $end_time" > $filter_ip
tac $log_file | awk -v st="$start_time" -v et="$end_time" '{t=substr($4,RSTART+14,15);
if(t>=st && t<=et) {print $0}}' \
|awk '{if($9~/404/)a[$1" "$7" "$9]++}END{for(i in a) print i,a[i]}' \
|awk '{print $4,$1,$2}'|sort -nr|head -n 10 >> $filter_ip
num=`cat $filter_ip|wc -l`
if [ $num -ge 2 ]; then
cat $result | mail -s "$app_name: suspect_attack" [email protected]
fi
분당 필터 로그:
#/bin/bash
#
logfile='/var/log/nginx/access.log'
log_file='/opt/scripts/log/half_ip.txt'
# app name
app_name="#"
#host ip addr
host_ip=`ip addr |grep eth0|awk 'NR==2{print $2}'|awk -F/ '{print $1}'`
#time interval
last_minutes=30
#
start_time=`date -d "$last_minutes minutes ago" +"%H:%M:%S"`
#
stop_time=`date +"%H:%M:%S"`
echo "$app_name: $host_ip $stop_time" > $log_file
# ip
tac $logfile | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,RSTART+14,21);if(t>=st && t<=et) {print $0}}' \
| awk '{print $1}' | sort | uniq -c | sort -nr |egrep -v '106.14.240.239'|awk '{if($1 > 1000){print $0}}' >> $log_file
num=`cat $log_file|wc -l`
if [ $num -ge 2 ]; then
cat $log_file | mail -s "$app_name: suspect_attack" [email protected]
fi
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
fluent-bit를 이용한 로그 데이터의 IIJ IOT 서비스에 축적Fluent Bit은 Treasure Data가 개발한 리소스가 부족한 임베디드 환경에서도 작동하는 로그 전송 프로그램입니다. 이번에는 IIJ IOT 서비스를 이용하여 라즈파이의 로그 데이터를 축적하는 방법을 설명합...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.