首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 SQL Server 記錄 IIS 網站日誌:集中化、可查詢、高統計價值

     編輯:關於SqlServer

預設 IIS 以 W3C 文字格式寫入本機日誌,若需跨伺服器集中收集、SQL 查詢分析、自動化報表,可將 IIS 設定為 ODBC 寫入 SQL Server。

架構優勢

  • 集中化:多台 Web 伺服器寫入同一 SQL 實例,單點查詢全站流量。
  • 可查詢:T-SQL 彈性篩選、彙總、JOIN 內部資料(如會員、訂單)。
  • 統計精準:避免文字日誌解析錯誤、編碼問題、欄位對齊困擾。
  • 備份保護:日誌隨資料庫備份,不因 Web 伺服器故障遺失。

實作步驟

  1. 建立日誌資料庫:CREATE DATABASE IISLogs
  2. 執行 IIS 內建建表腳本:
    路徑 C:\Windows\system32\inetsrv\logtemp.sql,執行後產生 inetlog 資料表。
  3. 建立系統 DSN(控制台 → 系統管理工具 → 資料來源 ODBC → 系統 DSN → 新增):
    • 名稱:IISLogs
    • 驅動程式:SQL Server
    • 伺服器:SQL IP/實例名
    • 驗證:SQL Server 驗證,輸入帳密
    • 預設資料庫:IISLogs
    • 測試連線成功
  4. IIS 管理員設定網站日誌:
    • 網站右鍵「內容」→ 「網站」頁籤 → 「啟用記錄」→ 格式選 ODBC 記錄。
    • 點「屬性」:DSN 填 IISLogs,資料表 inetlog,輸入 SQL 帳密,確定兩次。
  5. 重新啟動網站(或「停止/啟動」網站)使設定生效。

驗證與查詢範例

-- 即時查看最近 100 筆存取
SELECT TOP 100 ClientHost, UserName, LogTime, UriStem, HttpStatus, BytesSent
FROM inetlog ORDER BY LogTime DESC;

-- 依小時統計流量
SELECT DATEADD(HOUR, DATEDIFF(HOUR, 0, LogTime), 0) AS HourBucket,
       COUNT(*) AS Hits, SUM(BytesSent) AS TotalBytes
FROM inetlog GROUP BY DATEADD(HOUR, DATEDIFF(HOUR, 0, LogTime), 0)
ORDER BY HourBucket DESC;

效能與權衡(官方文件提醒)

「使用 ODBC 記錄會停用核心快取,效能將受影響。」—— IIS 說明文件

  • 高流量網站(> 1,000 RPS)可能造成 SQL 寫入瓶頸、回應延遲。
  • 建議:非核心/中低流量站點啟用;核心高流量站點維持 W3C 檔案 + 定期 ETL 匯入 SQL 分析。
  • 若必須即時寫入,考慮:
    — 專用 SQL 實例/讀寫分離
    — 非同步寫入(Service Broker / 應用層緩衝)
    — 資料表分區(依日期)提升寫入效能

安全性注意

  • DSN 使用最小權限 SQL 登入,僅授予 INSERT 權限於 inetlog。
  • 啟用 SSL 加密連線(DSN 設定「強制加密」)。
  • 定期清理/分區舊日誌,避免資料庫無限增長。

善用 SQL 記錄 IIS 日誌,讓營運分析、安全稽核、異常偵測從「費時解析文字檔」轉型為「秒級 SQL 查詢」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved