用 Filebeat 7.17 構(gòu)建可控的日志采集與風險評估流水線

在實際項目中,日志采集和風險事件處理常常面臨幾個痛點:

  1. 應(yīng)用日志不規(guī)則:日志前綴、INFO/DEBUG 打印混雜,事件 JSON 嵌在其中;
  2. 落地文件管理困難:Filebeat 的 output.file 在 7.x 中不支持動態(tài)文件名,無法直接生成“按 5 分鐘切割”的文件;
  3. 風險評估邏輯復雜:部分日志已經(jīng)包含 risk_info,部分需要通過規(guī)則引擎二次評估;
  4. 最終需要報表:業(yè)務(wù)側(cè)希望能看到周期性風險統(tǒng)計報表。

本文介紹一套基于 Filebeat 7.17 + 定時切割腳本 + LiteFlow 引擎 的端到端解決方案。


1. 整體架構(gòu)

系統(tǒng)分為 客戶端日志采集服務(wù)器端處理 兩大環(huán)節(jié):

  • 客戶端
  • 定時器觸發(fā)采集器,從應(yīng)用日志提取 JSON 事件;
  • Filebeat 7.17 監(jiān)控緩存文件,寫入到 NAS(統(tǒng)一是 payment.ndjson);
  • Cron 定時器每 5 分鐘調(diào)用腳本,將文件重命名為 payment-YYYY.MM.DD-HHMM.ndjson,并重啟 Filebeat 繼續(xù)寫新文件。
  • 服務(wù)器端
  • 定時器觸發(fā)目錄掃描器,讀取新切片文件;

  • 對事件進行批量處理:

- 已含 risk_info → 直接落庫并更新統(tǒng)計;
- 未含 risk_info → 調(diào)用 LiteFlow 風險評估引擎,按規(guī)則鏈生成結(jié)果再入庫;
  • 標記文件已處理;

  • 報表模塊定時從數(shù)據(jù)庫匯總風險統(tǒng)計,生成報表。

用時序圖表示如下:

image.png

2. Filebeat 7.17 配置要點

2.1 使用

script processor

截取 JSON

在 Filebeat 7.17 中,我們利用 JavaScript 腳本處理器 實現(xiàn)花括號配對,準確截取日志里的 JSON:

- script:
    lang: javascript
    id: extract_json_block
    source: >
      function process(event) {
        var msg = event.Get("message");
        if (!msg) return;
        var start = msg.indexOf("{");
        var end   = msg.lastIndexOf("}");
        if (start >= 0 && end > start) {
          event.Put("raw_json", msg.substring(start, end+1));
        } else {
          event.Put("parse_error_no_json", true);
        }
      }

2.2 解析 JSON 到

data

容器

- decode_json_fields:
    fields: ["raw_json"]
    target: "data"
    overwrite_keys: true

最終輸出結(jié)構(gòu)為:

{
  "@timestamp": "...",
  "data": { "common": {...}, "events": [...] },
  "labels": { "app": "PAYMENT", "stream": "PAY_002", "flow": "PAYMENT_FLOW", "host": "ocs-app-t4" }
}

3. 文件切割:cron + shell 腳本

由于 Filebeat 7.17 的 output.file 不支持動態(tài)文件名,我們采用外部腳本切割:

#!/usr/bin/env bash
DIR="/mnt/nas/logs/filebeat"
SRC="${DIR}/payment.ndjson"
TS="$(date +%Y.%m.%d-%H%M)"
DST="${DIR}/payment-${TS}.ndjson"

if [ -f "$SRC" ]; then
  mv "$SRC" "$DST"
  : > "$SRC"
  /usr/local/bin/fb-stop.sh || true
  /usr/local/bin/fb-start.sh
fi

配合 crontab:

*/5 * * * * /usr/local/bin/fb-rotate-5min.sh >> /var/log/fb-rotate.log 2>&1

4. 風險事件處理邏輯

  • 已有 risk_info:直接寫 DB 并更新統(tǒng)計;
  • 沒有 risk_info:調(diào)用 LiteFlow 規(guī)則鏈,得到風險結(jié)果,再寫 DB;
  • DB 端有定時統(tǒng)計任務(wù),報表模塊從中取數(shù)生成可視化。

5. 實踐總結(jié)

  1. Filebeat 7.17 的限制:output.file.filename 只接受固定字符串,不能用 %{+yyyy.MM.dd} 時間占位;
  2. 日志 JSON 提取:script processor 是 7.6+ 才有的能力,7.1.1 等老版本用不了;
  3. 切割策略:推薦“固定文件名 + cron 切片 + 重啟 Filebeat”,最穩(wěn)妥;
  4. 風險評估分層:采集端保持輕量,復雜邏輯下沉到 LiteFlow 引擎;
  5. 最終交付:報表展示風險趨勢,既滿足合規(guī),也支持業(yè)務(wù)優(yōu)化。

?? Filebeat 7.17 + cron 切割腳本 + LiteFlow 引擎 = 一條從日志采集到風險報表的完整鏈路。

這套方案在我們項目里已穩(wěn)定運行,可以為類似的風控、合規(guī)審計場景提供參考。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容