nginx日誌管理、日誌切割

日誌管理php

 

 

咱們觀察nginx的server,能夠看到以下相似信息前端

 #access_log  logs/host.access.log  main;nginx

這說明 該server, 它的訪問日誌的文件是  logs/host.access.log ,web

使用的格式main格式.shell

除了main格式,你能夠自定義其餘格式.瀏覽器

 

main格式是什麼?bash

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

    #               '$status $body_bytes_sent "$http_referer" 'ide

    #               '"$http_user_agent" "$http_x_forwarded_for"';google

(php獲取的客戶端ip等就是經過nginx傳過來的)


main格式是咱們定義好一種日誌的格式,並起個名字,便於引用.

以上面的例子, main類型的日誌,記錄的 remote_addr.... http_x_forwarded_for等選項.

 

 

1: 日誌格式 是指記錄哪些選項

默認的日誌格式: main

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

                            '$status $body_bytes_sent "$http_referer" '

                            '"$http_user_agent" "$http_x_forwarded_for"';

 

下面是log_format指令中經常使用的一些變量:

變量

含義

$bytes_sent

發送給客戶端的總字節數

$body_bytes_sent

發送給客戶端的字節數,不包括響應頭的大小

$connection

鏈接序列號

$connection_requests

當前經過鏈接發出的請求數量

$msec

日誌寫入時間,單位爲秒,精度是毫秒

$pipe

若是請求是經過http流水線發送,則其值爲"p",不然爲「."

$request_length

請求長度(包括請求行,請求頭和請求體)

$request_time

請求處理時長,單位爲秒,精度爲毫秒,從讀入客戶端的第一個字節開始,直到把最後一個字符發送張客戶端進行日誌寫入爲止

$status

響應狀態碼

$time_iso8601

標準格式的本地時間,形如「2017-05-24T18:31:27+08:00

$time_local

通用日誌格式下的本地時間,如"24/May/2017:18:31:27 +0800"

$http_referer

請求的referer地址。

$http_user_agent

客戶端瀏覽器信息。

$remote_addr

客戶端IP

$http_x_forwarded_for

當前端有代理服務器時,設置web節點記錄客戶端地址的配置,此參數生效的前提是代理服務器也要進行相關的x_forwarded_for設置。

$request

完整的原始請求行,如 "GET / HTTP/1.1"、POST等

$remote_user

客戶端用戶名稱,針對啓用了用戶認證的請求

$request_uri

完整的請求地址


如淘寶屏蔽的爬蟲(道德規範):

image.png

(若是在nginx日誌裏發現了百度、google等的爬蟲的訪問,恭喜)



如默認的main日誌格式,記錄這麼幾項

遠程IP- 遠程用戶/用戶時間 請求方法(GET/POST) 請求體body長度 referer來源信息

http-user-agent用戶代理/蜘蛛 ,被轉發的請求的原始IP

http_x_forwarded_for:在通過代理時,代理把你的原本IP加在此頭信息中,傳輸你的原始IP

 

 

 

2: 聲明一個獨特的log_format並命名

 

    log_format  mylog '$remote_addr- "$request" '

                  '$status $body_bytes_sent "$http_referer" '

                  '"$http_user_agent" "$http_x_forwarded_for"';

在下面的server/location,咱們就能夠引用 mylog(一般默認有個main)

 

在server段中,這樣來聲明

Nginx容許針對不一樣的server作不一樣的Log ,(有的web服務器不支持,lighttp)

 

access_log logs/access_8080.log mylog;   

聲明log   log位置          log格式;

 

 

實際應用: shell+定時任務+nginx信號管理,完成日誌按日期存儲

分析思路:

凌晨00:00:01,把昨天的日誌重命名,放在相應的目錄下

USR1信息號控制nginx從新生成新的日誌文件


具體腳本:

#!/bin/bash

base_path='/usr/local/nginx/logs'

log_path=$(date -d yesterday +"%Y%m")

day=$(date -d yesterday +"%d")

mkdir -p $base_path/$log_path

mv $base_path/access.log $base_path/$log_path/access_$day.log

#echo $base_path/$log_path/access_$day.log

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`


定時任務

Crontab 編輯定時任務

01 00 * * * /xxx/path/b.sh  天天01(建議在02-04點之間,系統負載小)

相關文章
相關標籤/搜索