我有一個可用的bash腳本,告訴我nginx訪問日誌進入時將原始日誌格式化爲豐富多彩的信息。將用戶代理信息包含在nginx訪問日誌bash腳本中
不幸的是,我不太清楚如何採取我已經創建的內容,並添加顯示請求的用戶代理。我希望能夠一目瞭然地瞭解哪個User-Agent被使用過。它是Googlebot嗎?在Windows上是Firefox 22嗎?
這裏是bash腳本我有:
#!/bin/bash
LOG_DEFAULT_PATH="/var/log/nginx/access.log"
LOG_PATH="$1"
if [ "$LOG_PATH" = "" ] && test -f "$LOG_DEFAULT_PATH"; then
echo -e "\033[35mAuto-detected Log File: \033[32m$LOG_DEFAULT_PATH\033[0m"
LOG_PATH="$LOG_DEFAULT_PATH"
fi
if [ "$LOG_PATH" = "" ]; then
echo -e "\033[32mUsage: $0 /path/to/nginx/access_log\033[0m"
else
(tail -n 500 -F $LOG_PATH | awk '{printf "%s%s %s %s%s%s %s %s %s%s%s %s%s\n", "\033[40;1;35m", $5, $6, "\033[0;32m", $1, "\033[37m", $10, substr($7, 2), "\033[31m", $8, "\033[36m", $2, "\033[0m"}')
fi
腳本的主體是在與tail命令開頭的行。我使用awk將不同部分的請求打印到終端,併爲每個部分着色。這裏我會假設用戶代理信息也會顯示出來。
這裏的日誌格式:
log_format vhost_combined '$http_host $remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
當然,更好的腳本任何建議,也將不勝感激!
您應該注意到awk使用「」作爲默認分割字段。但是,在字段內部,如$ time_local或$ http_user_agent,有空白,因此字段拆分可能與您想象的完全不同。在awk中使用正則表達式來分割日誌可能會更好。 – TroyCheng