成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Nginx日志分析:編寫Shell腳本進行全面日志統(tǒng)計

網(wǎng)絡
在實際生產(chǎn)環(huán)境中,對Nginx日志的分析有助于我們了解網(wǎng)站的訪問情況,發(fā)現(xiàn)潛在問題并進行優(yōu)化。本文將通過編寫Shell腳本,實現(xiàn)對Nginx日志的全面統(tǒng)計分析。

Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器。無論是在大流量的網(wǎng)站還是小型的個人博客中,Nginx都得到了廣泛應用。在實際生產(chǎn)環(huán)境中,對Nginx日志的分析有助于我們了解網(wǎng)站的訪問情況,發(fā)現(xiàn)潛在問題并進行優(yōu)化。本文將通過編寫Shell腳本,實現(xiàn)對Nginx日志的全面統(tǒng)計分析。

Nginx日志格式

首先,我們需要確保Nginx日志格式與以下格式類似:

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。

Shell腳本實現(xiàn)

接下來,我們編寫一個Shell腳本,對Nginx日志進行統(tǒng)計分析。這個腳本包括以下功能:

  • 統(tǒng)計各種狀態(tài)碼的數(shù)量
  • 統(tǒng)計訪問最多的Referer
  • 統(tǒng)計訪問最高的URI
  • 統(tǒng)計訪問最多的IP和User-Agent
  • 統(tǒng)計每分鐘的請求數(shù)、流量、請求時間、狀態(tài)碼等

腳本代碼實現(xiàn):

1.統(tǒng)計各種狀態(tài)碼的數(shù)量:

awk '
{
  Arry[$12] += 1;  
  total++;  
}
END {
  for (s in Arry) {
    printf "%d\t%.4f\t%s\n", Arry[s], Arry[s] / total, s
  }
}
'$LOG_FILE | sort -nr -k 1,1

① Arry[$12] += 1;:

  • $12 是日志文件的第十二個字段,通常表示 HTTP 狀態(tài)碼。
  • Arry 是一個關聯(lián)數(shù)組,以 HTTP 狀態(tài)碼為鍵,將每個狀態(tài)碼出現(xiàn)的次數(shù)累加到數(shù)組 Arry 中。
  • Arry[$12] += 1; 表示狀態(tài)碼 $12 出現(xiàn)的次數(shù)加 1。

② total++;:

  • 記錄總的日志行數(shù)。

③ for (s in Arry):

  • 遍歷數(shù)組 Arry 中的每個狀態(tài)碼 s。

④ printf "%d\t%.4f\t%s\n", Arry[s], Arry[s] / total, s:

  • 打印每個狀態(tài)碼的出現(xiàn)次數(shù)、占比和狀態(tài)碼本身。
  • Arry[s] 是狀態(tài)碼 s 出現(xiàn)的次數(shù)。
  • Arry[s] / total 是該狀態(tài)碼出現(xiàn)的比例(占總請求數(shù)的百分比)。
  • s 是狀態(tài)碼。
  • 輸出格式為:出現(xiàn)次數(shù)\t 比例\t 狀態(tài)碼。

運行上述的命令,輸出如下結果:

統(tǒng)計各種狀態(tài)碼的數(shù)量

2.統(tǒng)計訪問最多的Referer

awk -F\" '
    {
    Arry[$4] += 1;  # 將每個引用的字段($4)出現(xiàn)的次數(shù)累加到數(shù)組Arry中
    total++;        # 記錄總的日志行數(shù)
    }
    END {
    for (s in Arry) {  # 遍歷數(shù)組Arry中的每個引用字段
        printf "%d\t%.4f\t%s\n", Arry[s], Arry[s] / total, s  # 打印每個引用字段的出現(xiàn)次數(shù)、占比和引用字段本身
    }
    }
    ' $LOG_FILE | sort -nr -k 1,1  # 按出現(xiàn)次數(shù)降序排序

執(zhí)行上述命令后,輸出如下圖的結果:

統(tǒng)計訪問最多的Referer

3.統(tǒng)計訪問最高的URI

awk  '
    {
    Arry[$9] += 1;  # 將每個引用的字段($18)出現(xiàn)的次數(shù)累加到數(shù)組Arry中
    total++;        # 記錄總的日志行數(shù)
    }
    END {
    for (s in Arry) {  # 遍歷數(shù)組Arry中的每個引用字段
        printf "%d\t%.4f\t%s\n", Arry[s], Arry[s] / total, s  # 打印每個引用字段的出現(xiàn)次數(shù)、占比和引用字段本身
    }
    }
    '$LOG_FILE | sort -nr -k 1  # 按出現(xiàn)次數(shù)降序排序

執(zhí)行上述命令后,輸出如下圖的結果:

統(tǒng)計訪問最高的URI

4.統(tǒng)計訪問最多的IP和User-Agent

(1) 統(tǒng)計最多IP訪問次數(shù)

awk '
    {
    Arry[$1] += 1;  # 將每個IP地址出現(xiàn)的次數(shù)累加到數(shù)組Arry中
    total++;        # 記錄總的日志行數(shù)
    }
    END {
    for (s in Arry) {  # 遍歷數(shù)組Arry中的每個IP地址
        printf "%d\t%.4f\t%s\n", Arry[s], Arry[s] / total, s  # 打印每個IP地址的出現(xiàn)次數(shù)、占比和IP地址本身
    }
    }
    '$LOG_FILE | sort -nr -k 1,1

執(zhí)行上述命令后,輸出如下圖的結果:

統(tǒng)計最多IP訪問次數(shù)

(2) 統(tǒng)計最多訪問的User-Agent

awk  '
    {
    Arry[$18] += 1;  # 將每個引用的字段($18)出現(xiàn)的次數(shù)累加到數(shù)組Arry中
    total++;        # 記錄總的日志行數(shù)
    }
    END {
    for (s in Arry) {  # 遍歷數(shù)組Arry中的每個引用字段
        printf "%d\t%.4f\t%s\n", Arry[s], Arry[s] / total, s  # 打印每個引用字段的出現(xiàn)次數(shù)、占比和引用字段本身
    }
    }
    '$LOG_FILE | sort -nr -k 1  # 按出現(xiàn)次數(shù)降序排序

執(zhí)行上述命令后,輸出如下圖的結果:

統(tǒng)計訪問統(tǒng)計訪問

5.統(tǒng)計每分鐘的請求數(shù)、流量、請求時間、狀態(tài)碼等

awk -F '|''
  BEGIN {
    printf "時間\t數(shù)量\t流量[MB]\t請求時間\t20x\t30x\t40x\t50x\t60x\n"
  }
  {
    # 提取時間的分鐘部分
    minute = substr($2, 12, 5)

    # 累計流量、請求數(shù)和請求時間
    tms[minute] += $13
    cnt[minute] += 1
    reqt[minute] += $15

    # 統(tǒng)計狀態(tài)碼
    status_code = $9
    if (status_code ~ /^2/) { sc20x[minute]++ }
    else if (status_code ~ /^3/) { sc30x[minute]++ }
    else if (status_code ~ /^4/) { sc40x[minute]++ }
    else if (status_code ~ /^5/) { sc50x[minute]++ }
    else { sc60x[minute]++ }
  }
  END {
    for (t in tms) {
      printf "%s\t%d\t%.4f\t%.4f\t%d\t%d\t%d\t%d\t%d\n",
             t,
             cnt[t],
             tms[t] / 1024 / 1024,
             (cnt[t] > 0 ? reqt[t] / cnt[t] : 0),
             sc20x[t],
             sc30x[t],
             sc40x[t],
             sc50x[t],
             sc60x[t]
    }
  }
  '"$LOG_FILE"

執(zhí)行上述命令后,輸出如下結果:

總結

通過上述Shell腳本,我們可以快速、全面地分析Nginx日志,了解網(wǎng)站的訪問情況和性能表現(xiàn)。這不僅有助于我們發(fā)現(xiàn)潛在問題,還能為后續(xù)的優(yōu)化工作提供有力的數(shù)據(jù)支持。在實際應用中,你可以根據(jù)自己的需求,進一步擴展和定制這個腳本。

腳本獲取方式

上述腳本已經(jīng)上傳上傳到gitee,有需要的小伙伴可以自行獲取。gitee上的倉庫主要是分享一些工作中常用的腳本。小伙伴可以frok或者watch倉庫,這樣有更新可以及時關注到。

腳本倉庫

倉庫地址:https://gitee.com/didiplus/script

責任編輯:趙寧寧 來源: 攻城獅成長日記
相關推薦

2020-02-21 10:45:06

運維架構技術

2021-08-02 07:50:42

腳本Shell日志

2018-01-16 10:11:11

Nginx訪問日志

2012-04-26 14:02:58

ibmdw

2022-06-21 09:26:21

Shell腳本JavaScript

2023-11-28 18:03:01

SQLUDF

2020-04-01 15:11:36

Shell命令Linux

2023-05-20 17:45:25

LinuxShell

2014-08-08 16:17:49

shell腳本linux

2015-09-25 11:03:14

數(shù)據(jù)中心日志分析

2022-05-12 11:38:26

Java日志Slf4j

2009-12-18 09:54:10

Linux Shell

2014-03-18 10:27:20

Nginx Httpc腳本

2013-10-31 16:17:45

日志分析Awstats實戰(zhàn)Nginx

2013-10-31 11:08:15

2011-11-21 15:35:49

日志分析

2015-08-03 15:48:22

Linux日志

2017-08-11 17:20:07

LinuxShell

2017-02-14 08:36:56

2025-05-08 09:05:00

Shell腳本磁盤日志
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一区二区在线观看 | 最新中文字幕在线 | 国产精品一区二区久久精品爱微奶 | 国产高清免费 | 亚洲综合小视频 | 成人网在线看 | 久久不卡 | 91国产视频在线 | 亚洲美女在线一区 | 噜啊噜在线 | 99国产精品一区二区三区 | 精品精品视频 | 日韩欧美在线观看视频 | 日韩在线资源 | 亚洲国产精品第一区二区 | 国产不卡视频在线 | 精品国产91| 亚洲一区精品在线 | 久久久99国产精品免费 | 中文字幕一区二区三区乱码在线 | 精品国产乱码久久久久久88av | 日本不卡一区二区三区 | 99久久精品免费看国产免费软件 | 久久精品视频99 | 亚洲一区 | 午夜精品久久久 | 国产成人综合一区二区三区 | 欧美专区日韩专区 | 九色在线视频 | 午夜影院操 | 在线欧美视频 | 亚洲一区在线日韩在线深爱 | 在线欧美a | 91综合网 | 给我免费的视频在线观看 | 99精品国产一区二区三区 | 中文字幕在线观看 | 人人亚洲 | 久久综合888 | 欧美一区二 | 日韩亚洲视频 |