排解常見的 Linux 轉送器問題

支援的國家/地區:

本文可協助您辨識及排解使用 Google Security Operations Linux 轉送器時可能遇到的常見問題。

轉送器未啟動

轉送器無法啟動,且持續處於重新啟動循環,記錄中會顯示下列錯誤:

F0510 06:17:39.013603 202 main_linux.go:153] open /opt/chronicle/external/*.conf: no such file or directory

可能原因 1:設定檔中的對應不正確

如要解決這個問題,請確認您將正確路徑傳遞至設定檔,並將其對應至外部資料夾。

可能原因 2:已啟用 SELinux

  1. 進入容器 (不啟動轉送器),然後執行下列指令,檢查設定檔:

    docker run --name cfps --log-opt max-size=100m --log-opt   max-file=10 --net=host -v ~/configuration:/opt/chronicle/external --entrypoint=/bin/bash \
    -it gcr.io/chronicle-container/cf_production_
    

    這個指令會將您置於容器內的殼層。

  2. 執行下列指令:

    ls -lrt /opt.chronicle/external/
    

    如果收到權限遭拒錯誤訊息,表示轉送器無法開啟設定檔,因此無法啟動。

如要解決這個問題,請按照下列步驟操作:

  1. 執行下列指令,檢查 SELinux 狀態:

      sestatus
    
  2. 如果輸出內容顯示 SELinux 狀態為啟用,請執行下列指令停用:

      setenforce 0
    

記錄未傳送至 Google SecOps 租戶

可能原因 1:DNS 解析

執行下列指令,檢查主機是否無法解析地址或連線至 Google SecOps:

  nslookup malachiteingestion-pa.googleapis.com

如果指令失敗,請與網路團隊聯絡以解決問題。

可能原因 2:防火牆

執行下列指令,檢查本機防火牆是否封鎖 Google SecOps 與轉送程式之間的通訊:

  firewall-cmd --state

如果防火牆已啟用,請執行下列指令停用:

  systemctl stop firewalld

可能原因 3:緩衝區大小

在記錄中尋找下列錯誤,確認是否為緩衝區大小問題:

Memory ceiling (1073741824) reached, freeing a batch from the backlog

如要解決這個問題,請按照下列步驟操作:

  1. 在轉送器設定檔中啟用壓縮功能。

  2. 增加緩衝區大小 更新設定檔中的 max_memory_buffer_bytesmax_file_buffer_bytes 參數。 這些參數表示儲存在記憶體或磁碟中的待處理批次緩衝區。

轉寄器和主機未收到記錄

如果主機和轉送器未收到記錄,請針對每個通訊埠執行下列指令,檢查通訊埠狀態:

  netstat -a | grep PORT

PORT 替換為要檢查的連接埠 ID。

如果指令未產生任何輸出內容,表示主機未監聽該連接埠,請諮詢網路管理員。

如果指令輸出內容指出主機正在接聽某個連接埠,但轉送器仍未收到記錄,請按照下列步驟操作:

  1. 執行下列指令,停止 Docker:

    ​​docker stop cfps
    
    
  2. 根據網路設定執行下列其中一個指令。

    TCP:

    nc -l PORT
    

    UDP:

    nc -l -u PORT
    

    PORT 替換為要排解問題的連接埠 ID。

  3. 重新啟動外部服務,確認問題是否解決。如果問題仍未解決,請 [與 Google SecOps 支援團隊聯絡

轉寄者未收到記錄,但主機收到記錄

如果主機收到記錄,但轉送器沒有,表示轉送器未監聽設定檔中指定的連接埠。

如要解決這個問題,請按照下列步驟操作:

  1. 在系統上開啟兩個終端機視窗,一個用於設定轉送器,另一個用於傳送測試訊息給主機。

    1. 在第一個終端機 (轉送器) 上,執行下列指令啟動 Docker,但不啟動轉送器:

      docker run \
      --name cfps \
      --log-opt max-size=100m \
      --log-opt max-file=10 \
      --net=host \
      -v ~/config:/opt/chronicle/external \
      --entrypoint=/bin/bash \
      -it gcr.io/chronicle-container/cf_production_stable
      
    2. 指定轉送器應監聽的通訊埠:

      nc -l PORT
      

      PORT 替換為要排解問題的連接埠 ID。

  2. 在第二個終端機 (主機) 上,執行下列指令,透過通訊埠傳送測試訊息:

    echo "test message" | nc localhost PORT
    

    PORT 替換為要排解問題的連接埠 ID。

  3. 重新執行 docker 指令。執行下列指令,指定 -p 標記和轉送器應監聽的連接埠:

    docker run \
    --detach \
    –name cfps \
    --restart=always \
    --log-opt max-size=100m \
    --log-opt max-file=10 --net=host \
    —v /root/config:/opt/chronicle/external \
    -p 11500:11800 \
    gcr.io/chronicle-container/cf_production_stable
    

轉送程式記錄檔中的常見錯誤

如要查看轉送器記錄,請執行下列指令:

  sudo docker logs cfps

要求含有無效引數

轉送器記錄檔會顯示下列錯誤訊息:

  I0912 18:04:15.187321 333 uploader.go:181] Sent batch error: rpc error: code = InvalidArgument desc = Request contains an invalid argument.
  E0912 18:04:15.410572 333 batcher.go:345] [2_syslog_CISCO_FIREWALL-tid-0] Error exporting batch: rpc error: code = InvalidArgument desc = Request contains an invalid argument.
  I0912 18:04:15.964923 333 uploader.go:181] Sent batch error: rpc error: code = InvalidArgument desc = Request contains an invalid argument.

解決方法:

如果新增的記錄類型無效,就可能發生這個錯誤。請確認只新增有效的記錄類型。在錯誤訊息範例中,CISCO\_FIREWALL 不是有效的記錄類型。如需有效記錄檔類型清單,請參閱「支援的記錄檔類型和預設剖析器」。

找不到伺服器

轉送器記錄檔會顯示下列錯誤訊息:

{"log":"Failure: Unable to find the server at accounts.google.com.\n","stream":"stderr","time":"2019-06-12T18:26:53.858804303Z"}`

{"log":"+ [[ 1 -ne 0 ]]\n","stream":"stderr","time":"2019-06-12T18:26:53.919837669Z"}

{"log":"+ err 'ERROR: Problem accessing the Chronicle bundle.'\n","stream":"stderr","time":"2019-06-12T18:26:53.919877852Z"}

解決方法:

請與網路團隊聯絡,確認網路運作正常。

JWT 簽章無效

轉送器記錄檔會顯示下列錯誤訊息:

    E0330 17:05:28.728021 162 stats_manager.go:85] send(): rpc error: code = Unauthenticated desc = transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
    E0404 17:05:28.729012 474 memory.go:483] [1_syslog_FORTINET_FIREWAL-tid-0] Error exporting batch: rpc error: code = Unauthenticated desc = transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}

解決方法:

如果轉送器設定檔的密鑰詳細資料有誤,就可能發生這項錯誤。與 Google SecOps 支援團隊聯絡,協助解決這個問題。

權杖必須是短期權杖

轉送器記錄檔會顯示下列錯誤訊息:

      token: 400 Bad Request Response:
      {"error":"invalid_grant","error_description":"Invalid JWT: Token must be a
      short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values in the JWT claim."} I0412 05:14:16.539060 480
      malachite.go:212] Sent batch error: rpc error: code = Unauthenticated desc =
      transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response:
      {"error":"invalid_grant","error_description":"Invalid JWT: Token must be a
      short-lived token (60 minutes)

解決方法:

如果主機和伺服器系統時鐘未同步,就可能發生這個錯誤。調整主機上的時間,或嘗試使用 NTP 同步處理時鐘。

找不到你所指定的檔案或目錄

轉送器記錄檔會顯示下列錯誤訊息:

    ++ cat '/opt/chronicle/external/*.conf'
    cat: '/opt/chronicle/external/*.conf': No such file or directory

解決方法:

如果轉送器啟動時的磁碟機對應錯誤,就可能發生這項錯誤。在設定檔中使用完整目錄路徑 (您可以執行 pwd 指令取得路徑)。

無法從設定檔擷取客戶 ID

轉送器記錄檔會顯示下列錯誤訊息:

    + err 'ERROR: Failed to retrieve customer ID from configuration file.'
    ++ date +%Y-%m-%dT%H:%M:%S%z
    + echo '[2023-06-28T09:53:21+0000]: ERROR: Failed to retrieve customer ID from configuration file.'
    [2023-06-28T09:53:21+0000]: ERROR: Failed to retrieve customer ID from configuration file.
    + err '==> Please contact the Chronicle support team.'

解決方法:

如果對應不正確,或目錄中沒有設定檔,就會發生這項錯誤。在設定檔中使用完整目錄路徑 (您可以執行 pwd 指令取得路徑)。請確認已執行正確的 docker run 指令,且設定檔位於下列位置:

    gcr.io/chronicle-container/cf_production_stable

下列程式碼範例顯示 docker run 指令:

    ​​docker run \
    --detach \
    --name cfps \
    --restart=always \
    --log-opt max-size=100m \
    --log-opt max-file=10 \
    --net=host \
    -v /opt/chronicle/config:/opt/chronicle/external \
    gcr.io/chronicle-container/cf_production_stable

實用的 Docker 指令

  • 您可以使用下列指令,收集 Docker 安裝作業的額外資訊:

    docker info
    
  • Docker 服務預設可能為停用。如要檢查是否已停用,請執行下列指令:

    systemctl is-enabled docker
    
  • 如要啟用 Docker 服務並立即啟動,請執行下列其中一個指令:

    sudo systemctl enable --now docker
    
    sudo systemctl enable /usr/lib/systemd/system/docker.service
    

    輸出:

    Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service
    
  • 啟動轉送器時,請執行下列指令,將轉送器設為自動重新啟動:

    sudo docker run --restart=always `IMAGE_NAME`
    

    IMAGE_NAME 是轉送器映像檔名稱。

  • 如要檢查 Docker 服務的狀態和詳細資料,請執行下列指令:

    sudo systemctl status docker
    

    輸出:

     docker.service - Docker Application Container Engine
        Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
        Active: active (running) since Sat 2020-07-18 11:14:05 UTC; 15s ago
    TriggeredBy:  docker.socket
          Docs: https://docs.docker.com
      Main PID: 263 (dockerd)
          Tasks: 20
        Memory: 100.4M
        CGroup: /system.slice/docker.service
                └─263 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    Jul 18 11:14:05 swarm-kraken dockerd[263]: time="2020-07-18T11:14:05.713787002Z" level=info msg="API listen on /run/docker.sock"
    Jul 18 11:14:05 swarm-kraken systemd[1]: Started Docker Application Container Engine
    

    如果 Docker 發生任何問題,Google SecOps 支援團隊可能會要求您提供這項指令的輸出內容,以協助排解問題。

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。