Graylog: 入門指南

如何開始使用 Graylog

👋 歡迎來到 Stackhero 文件!

Stackhero 提供即用型的 Graylog cloud 解決方案,帶來多項好處,包括:

  • 包含無限和專用的 SMTP 電郵伺服器
  • 只需一鍵即可輕鬆更新
  • 使用 HTTPS 保護的可自訂域名(例如,https://logs.your-company.com)。
  • 專用私有 VM提供的最佳性能和強大安全性

節省時間簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Graylog cloud hosting 解決方案!

Input 是 Graylog 接收日誌(logs)的端點。您可以透過 TCP 或 UDP 傳送日誌。此外,Graylog 亦可從 API、Kafka queue、RabbitMQ server 及其他方式收集日誌。

在本例中,我們將建立一個 Raw UDP Input。首先,請打開 Graylog 介面,進入「System」然後選擇「Inputs」。選擇「Raw/Plaintext UDP」並點擊「Launch new input」。請按照以下設定填寫並確認表單:

  1. Node:選擇您的節點
  2. Title:RAW UDP
  3. Port:5555

接著,請在您的電腦開啟終端機,並將 UDP 訊息發送到您的 Graylog 伺服器。請記得將 XXXXXX 替換為您的服務網域名稱:

  • 在 macOS 上:echo "Hello Graylog from UDP" | nc -u -w1 -c <XXXXXX>.stackhero-network.com 5555
  • 在 Linux 上:echo "Hello Graylog from UDP" | nc -u -w1 <XXXXXX>.stackhero-network.com 5555

發送訊息後,返回 Graylog 並點擊「Search」。您應該會看到您的訊息 🎉

恭喜您,已成功將第一條訊息發送到 Graylog!歡迎根據您的需求建立更多 Input 及 Dashboard。如需進一步指引,建議參考 Graylog 官方文件

我們的 Git repository 提供多個程式碼範例。此 repository 包含實用的實作方式及進階自訂,協助您更有效率地運用 Graylog。

如果您有 rsyslog client 並希望安全地將日誌傳送到 Graylog,請依照以下步驟操作:

請勿在 Graylog 的 Input 上啟用任何 TLS 選項。TLS 會由您實例上的 Reverse Proxy 直接管理,因此 Graylog 不會處理 TLS。

  1. 請到 Stackhero 控制台的 Graylog 服務設定頁,啟用 Syslog TCP 514 埠的「TLS 加密」。

  2. 按照下方說明更新您的 rsyslog 設定。請將 <XXXXXX>.stackhero-network.com 替換為您的實例主機名稱:

    # 定義 TLS CA 憑證
    global(
      DefaultNetstreamDriver="gtls"
      DefaultNetstreamDriverCAFile="/etc/ssl/certs/ca-certificates.crt"
    )
    
    # 將所有日誌發送到遠端伺服器
    # 這個動作會建立一個 on-disk queue。如果遠端主機
    # 無法連線,訊息會暫存於磁碟,待主機恢復後再傳送
    # 參考 https://www.rsyslog.com/doc/v8-stable/configuration/actions.html
    # 及 https://www.rsyslog.com/doc/v8-stable/configuration/modules/omfwd.html
    *.* action(
      type="omfwd"
      target="<XXXXXX>.stackhero-network.com"
      port="514"
      protocol="tcp"
      KeepAlive="on"
      KeepAlive.Interval="30"
      StreamDriver="gtls"
      StreamDriverMode="1"
      StreamDriverAuthMode="x509/name"
      ResendLastMSGOnReconnect="on"
      queue.filename="fwdRule1"  # spool 檔案的唯一名稱前綴
      queue.type="LinkedList"
      queue.maxDiskSpace="256m"
      queue.saveOnShutdown="on"
      action.resumeRetryCount="-1"
      action.resumeInterval="30"
    )
    
  3. 重新啟動您的 rsyslog 服務,並使用以下指令發送一條日誌以驗證設定:

    logger This is a test
    

設定完成。您現在已經可以透過 TLS 加密安全地將日誌發送到 Graylog!

您可能會遇到如下錯誤:

org.opensearch.index.mapper.MapperParsingException: failed to parse field [time] of type [long] in document with id 'xxxx'

您可以在 Stackhero 控制台提供的日誌,或 Graylog 管理介面的 System > Overview > Indexer failures 中查看此錯誤。

這個錯誤表示有一條日誌的 time 欄位值與預期型別不符(此例為應為數值型別 "long")。Graylog 採用 OpenSearch 的動態 mapping 功能。當首次收到某欄位時,OpenSearch 會自動推斷型別。例如,若日誌的 time 欄位值為數字 1234,OpenSearch 會將其定義為數值欄位。若之後有日誌的 time 欄位為 "abcd"(字串),OpenSearch 會因型別不符而拒絕該日誌。

請注意,time 僅為舉例,實際上可為任何欄位名稱及型別。

要解決此問題,您需要重新定義 OpenSearch 預期的型別。詳情請參閱 Graylog 官方文件

在進行操作前,請先於 Stackhero 控制台啟用 OpenSearch 存取權限。進入您的 Graylog 服務,點擊「Configure」按鈕以啟用 OpenSearch 存取。

進行這些更改時請務必小心,錯誤的設定可能會導致 OpenSearch cluster 無法運作,甚至造成資料遺失。如有疑問,請勿繼續操作。

  1. 定義您的新 mapping。本例將 time 欄位重新定義為 string 型別。可用型別請參考 OpenSearch 欄位型別文件

  2. 將以下內容儲存為 graylog-custom-mapping.json 檔案:

    {
      "template": "graylog_*",
      "mappings": {
        "message": {
          "properties": {
            "time": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
    
  3. 使用以下 curl 指令發送此檔案(請將 <XXXXXX>.stackhero-network.com 替換為您的實例網域名稱):

    curl -u 'admin' -X PUT -d @'graylog-custom-mapping.json' -H 'Content-Type: application/json' 'https://<XXXXXX>.stackhero-network.com/opensearch/_template/graylog-custom-mapping?pretty'
    

    您應該會收到如下回應:

    {
      "acknowledged": true
    }
    
  4. 最後,請用以下指令確認 mapping 已更新(如有需要請更換網域):

    curl -u 'admin' -X GET 'https://<XXXXXX>.stackhero-network.com/opensearch/graylog_deflector/_mapping?pretty'
    

如果您看到如下錯誤:

Unable to write audit log entry because there is no valid license

Not running cleanup for auditlog entries in MongoDB because there is no valid license

這是因為 Graylog Enterprise 已啟用但未有有效授權。如果您有授權,可以在 Graylog 介面輸入授權碼。若沒有授權,只需在 Stackhero 控制台停用 Graylog Enterprise 即可。