Grafana 事件檢視器監控面板(搭配 WAF ModSecurity 異常監控事件進行設定)

這篇文章我要記錄一下自己再用的幾個監控面板,但在開始前必須要先完成【Windows ModSecurity WAF】、【Grafana + Loki + Promtail 安裝紀錄】這兩篇的設定才可以繼續進行後續的面板設定。


事件明細(1)

  1. 新增 Visualizations 類型選擇 Logs,並選取底下的查詢條件,目的僅顯示異常的紀錄。
    • logsource = WindowsEventlog
    • Source = ModSecurity
    • Level = 2,僅顯示嚴重的項目,若要全部出現也可不設定此項目。
  2. 資料維度轉換,目的是要排除不想看到的資料內容,僅留下想看到的資訊。
    • Extract fields,將欄位 Line 的 Log 明細使用 key+values 欄位攤開。
    • Organize fields,根據需求顯示需要的欄位,我的範例是僅保留 level、eventRecordID、Time、event_data
  3. 設定面板設定,根據自己的需求調整即可。
    • Title : 事件明細。
    • 完成設定如下圖所示。


事件明細(2)

  1. 新增 Visualizations 類型選擇 Logs,查詢條件同事件明細(1)。
  2. 資料維度轉換,目的是要排除不想看到的資料內容,僅留下想看到的資訊。
    • Extract fields,將欄位 Line 的 Log 明細欄位使用 JSON 攤開,並且指定欄位 
      • eventRecordID
      • event_data
      • level,給定別名 Level,不這們做會導致 Logs 的事件顏色消失。
    • Organize fields,根據需求顯示需要的欄位,我的範例是僅保留 Level、Time、event_data、eventRecordID、Line
  3. 設定面板設定,根據自己的需求調整即可。
    • Title : 事件明細
    • Logs → Time : 啟用
    • Logs → Wrap lines : 啟用
    • Logs → Enable log details : 啟用
  4. 完成設定如下圖所示。

事件明細(3)

  1. 新增 Visualizations 類型選擇 Time series,查詢條件同上即可,目的為了視覺化原始請求。
  2. 直接在查詢頁面進行彙總設定。
  3. 設定面板設定,根據自己的需求調整即可。
    • Title : 事件明細
    • Axis → Label : 總次數
    • Standard options -> Max : 20
    • Thresholds : 10 紅色
    • Thresholds -> Show thresholds : As lines
  4. 完成的設定如下圖所示。


每分鐘違規統計

  1. 新增 Visualizations 類型選擇 Time series,查詢條件如下,目的是為了彙總每分鐘的異常數據。
    • logsource = WindowsEventlog
    • Source = ModSecurity
    • Level = 2
  2. 資料維度轉換。
    • Formate time,設定 yyyy-MM-DD HH:mm,目的是為了去除日期的秒數。
    • Convert field type,Time series 支援的欄位必須是日期格式,所以要把上面那個轉換還原。
    • Group by,將每分鐘的請求進行彙總。
    • 設定面板設定,根據自己的需求調整即可。
      • Title : 每分鐘違規統計
      • Axis → Label : 總次數
      • Standard options → Max : 20
      • Standard options → Display name : 攻擊次數
      • Thresholds : 10 紅色
      • Thresholds → Show thresholds : As lines
  3. 完成的設定如下圖所示。


各事件儀錶板

  1. 新增 Visualizations 類型選擇 Gauge,並選取底下的查詢條件,目的僅顯示異常的紀錄
    • logsource = WindowsEventlog
    • Source = ModSecurity
    • Level = 2
  2. 資料維度轉換,目的是要排除不想看到的資料內容,僅留下想看到的資訊。
    • Extract fields,將欄位 labels 轉成 JSON 格式,並取代所有欄位 & 保留時間格式。
    • Group by,將請求進行彙總。
  3. 設定面板設定,根據自己的需求調整即可。
    • Title : 攻擊事件(Max 200)
    • Standard options → Max : 200
    • Standard options → Display name : 攻擊(2)
    • Value mappings : 2 → 攻擊(2) & 3 → 警告(3) & 一般(4)
    • Thresholds
  4. 完成的設定如下圖所示。


疑難雜症排除

設定太多 Panel 後,會顯示 too many outstanding requests 的錯誤。

  • 此原因是因為 Loki 支援 Multi Tenant 所做的限制,確保每個租戶能公平地使用運算資源,詳細說明可參閱這個部落格的說明。
  • 解決辦法,調整 loki-local-config.yaml,拉大各租戶最大請求數量,併重新啟動 Loki,但要小心伺服器是否能承受。
    [querier:
      # 允許的最大並發查詢數 (Default:10)
      max_concurrent: 2048
    
    query_scheduler:
      # 每個租戶的最大未完成請求數 (Default:100)
      max_outstanding_requests_per_tenant: 2048





留言