Nginx日志分析及腳本編寫


在我們日常的運維中,當Nginx服務器正常運行后,我們會經常密切關注Nginx訪問日志的相關情況,發現有異常的日志信息需要進行及時處理。

那今天我將跟大家一起來研究和分析Nginx日志,nginx默認日志路徑為:/usr/local/nginx/logs/access.log 和error.log文件。如下圖查看nginx日志:cat access.log |more

 

Nginx日志的格式一般在nginx.conf里面配置,常見的格式配置如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  main;

格式說明:

$remote_addr, $http_x_forwarded_for 記錄客戶端IP地址

$remote_user 記錄客戶端用戶名稱

$request 記錄請求的URL和HTTP協議

$status 記錄請求狀態

$body_bytes_sent 發送給客戶端的字節數,不包括響應頭的大小; 該變量與Apache模塊mod_log_config里的“%B”參數兼容。

$bytes_sent 發送給客戶端的總字節數。

$connection_requests 當前通過一個連接獲得的請求數量。

$http_referer 記錄從哪個頁面鏈接訪問過來的

$http_user_agent 記錄客戶端瀏覽器相關信息

$request_length 請求的長度(包括請求行,請求頭和請求正文)。

$request_time 請求處理時間,單位為秒,精度毫秒; 從讀入客戶端的第一個字節開始,直到把最后一個字符發送給客戶端后進行日志寫入為止。

Nginx日志分析需求:

1)                 分析截止目前為止訪問量最高的IP排行。

awk '{print $1}' /usr/local/nginx/logs/access.log|sort |uniq -c |sort -nr |head -20

2)                 分析從早上9點至中午12點總的訪問量。

 

3)                 分析上一秒的訪問請求數。

 

4)                 找到當前日志中502或者404錯誤的頁面並統計。

awk '{print $0}' /usr/local/nginx/logs/access.log|egrep "404|502"|awk '{print $1,$7,$9}'|more

通過編寫腳本實現自動分析Nginx異常訪問並加入防火牆:

1)       首先要判斷什么是惡意訪問呢?

我們可以定義為每秒請求一個URL超過20次的IP都可以封掉哦。

#!/bin/sh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM