Graylog: 入門指南
如何開始使用 Graylog
👋 歡迎來到 Stackhero 文件!
Stackhero 提供一個即用型的 Graylog cloud 解決方案,帶來多項好處,包括:
- 包含無限和專用的 SMTP 電郵伺服器。
- 只需一鍵即可輕鬆更新。
- 使用 HTTPS 保護的可自訂域名(例如,https://logs.your-company.com)。
- 由專用私有 VM提供的最佳性能和強大安全性。
節省時間並簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Graylog cloud hosting 解決方案!
在 Graylog 建立第一個 Input
Input 是 Graylog 接收日誌的端點。您可以透過 TCP 或 UDP 傳送日誌。此外,Graylog 也能從 API、Kafka queue、RabbitMQ server 及其他方式收集日誌。
本範例將建立一個 Raw UDP Input。首先,請開啟 Graylog 介面,依序點選「System」>「Inputs」。選擇「Raw/Plaintext UDP」後,點擊「Launch new input」。請依下列設定填寫並送出表單:
- Node:選擇您的節點
- Title:RAW UDP
- 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 官方文件。
Graylog 程式碼範例
我們在 Git repository 提供了多個程式碼範例。此 repository 提供實用的實作方式與進階自訂,協助您充分發揮 Graylog 的效能。
使用 TLS 加密將 rsyslog 日誌傳送至 Graylog
若您有 rsyslog client 並希望安全地將日誌傳送至 Graylog,請依下列步驟操作:
請勿在 Graylog 的 Input 上啟用任何 TLS 選項。TLS 會由您實例上的反向代理(reverse proxy)直接處理,Graylog 本身不會處理 TLS。
-
請至 Stackhero 控制台的 Graylog 服務設定頁,啟用 Syslog TCP 514 埠的「TLS 加密」。
-
依下方說明更新您的 rsyslog 設定。請將
<XXXXXX>.stackhero-network.com替換為您的實例主機名稱:# 定義 TLS CA 憑證 global( DefaultNetstreamDriver="gtls" DefaultNetstreamDriverCAFile="/etc/ssl/certs/ca-certificates.crt" ) # 將所有日誌傳送至遠端伺服器 # 此動作會建立一個磁碟佇列。若遠端主機離線,訊息會暫存於磁碟,待主機恢復後再傳送 # 參考 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" ) -
重新啟動 rsyslog 服務,並使用下列指令傳送一則日誌以驗證設定:
logger This is a test
設定完成後,您就能透過 TLS 加密安全地將日誌傳送至 Graylog!
處理錯誤訊息「failed to parse field [XXXX] of type [YYYY]」
您可能會遇到如下錯誤:
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 官方文件。
更新 OpenSearch mapping
在進行下列操作前,請先於 Stackhero 控制台啟用 OpenSearch 存取權限。進入您的 Graylog 服務,點擊「Configure」按鈕以啟用 OpenSearch 存取。
進行這些變更時請務必小心,錯誤的設定可能導致 OpenSearch cluster 無法運作,甚至造成資料遺失。如有疑慮,請勿繼續操作。
-
定義新的 mapping。本例將
time欄位重新定義為 string 型別。可參考 OpenSearch 欄位型別文件 取得可用型別。 -
將下列內容儲存為
graylog-custom-mapping.json檔案:{ "template": "graylog_*", "mappings": { "message": { "properties": { "time": { "type": "string", "index": "not_analyzed" } } } } } -
使用下列 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 } -
最後,請用下列指令確認 mapping 已更新(如有需要請更換網域):
curl -u 'admin' -X GET 'https://<XXXXXX>.stackhero-network.com/opensearch/graylog_deflector/_mapping?pretty'
處理錯誤訊息「Unable to write audit log entry」
若您看到如下錯誤:
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 即可。