Graylog: エラー「failed to parse field [XXXX] of type [YYYY]」の対処

このドキュメントはクイックスタートガイドの一部です。完全なガイドはこちらからご覧いただけます:Graylogの使い始め方

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供する、すぐに使えるGraylogクラウドソリューションを提供しています。

  • 無制限で専用のSMTP メールサーバーが含まれています。
  • ワンクリックで簡単にアップデート
  • HTTPSで保護されたカスタマイズ可能なドメイン名(例: https://logs.your-company.com)。
  • プライベートで専用のVMによる最適なパフォーマンスと強力なセキュリティ

時間を節約し、生活を簡素化:StackheroのGraylogクラウドホスティングソリューションを試すのに5分しかかかりません!

次のようなエラーが発生する場合があります:

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のダイナミックマッピング機能を利用しています。初めてログが送信される際、OpenSearchはフィールド型を推測します。たとえば、timeフィールドに数値1234が含まれていれば、OpenSearchはそれを数値型として定義します。その後、timeフィールドに文字列"abcd"が送信されると、OpenSearchは数値を期待しているためエラーとなり、受け付けません。

なお、timeというフィールド名は例示です。実際には任意のフィールド名・型で同様の問題が発生します。

この問題を解決するには、OpenSearchが期待する型を再定義する必要があります。詳細はGraylog公式ドキュメントをご参照ください。

作業前に、StackheroダッシュボードでOpenSearchアクセスを有効にしてください。Graylogサービス画面で「Configure」ボタンをクリックし、OpenSearchアクセスを有効化します。

これらの変更は慎重に行ってください。不適切な設定はOpenSearchクラスタをブロックし、データ損失の原因となる場合があります。不明な点がある場合は作業を中止してください。

  1. 新しいマッピングを定義します。この例では、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. 最後に、次のコマンドでマッピングが更新されたことを確認します(必要に応じてドメインを変更してください):

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