Graylog: 處理錯誤「failed to parse field [XXXX] of type [YYYY]」
此文件屬於入門指南指南的一部分。請在此處查看完整指南:如何開始使用 Graylog。
👋 歡迎來到 Stackhero 文件!
Stackhero 提供即用型的 Graylog cloud 解決方案,帶來多項好處,包括:
- 包含無限和專用的 SMTP 電郵伺服器。
- 只需一鍵即可輕鬆更新。
- 使用 HTTPS 保護的可自訂域名(例如,https://logs.your-company.com)。
- 由專用私有 VM提供的最佳性能和強大安全性。
節省時間並簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Graylog cloud hosting 解決方案!
您可能會遇到如下錯誤:
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'