0

Logstash と Bunyan を使用して ElasticSearch に Restify リクエストを記録しています。ただし、ロギングに JSON 本体を含めると、同じ名前のフィールドが異なるタイプになる場合があるため、インデックスが競合します。

1 つの例は、req.body が文字列である場合とオブジェクトである場合です。body を常にオブジェクトに設定することで、これを回避しました (restify API は有効なリクエストの文字列を受け取ることを想定していないため)。

ただし、body オブジェクトのフィールドで問題が発生し続けます。クライアントが何を送信するかを実際に制御することはできません。リクエストに数値が必要な文字列が含まれている場合、elasticsearch インデックスはそのフィールドに数値を入力しています。

本文に投稿されたすべてのフィールドをチェックして潜在的に置き換える以外に、これを継続的に修正する方法はありますか? 本体をログに記録する前にオブジェクトから文字列に変換することはできますが、可視化を行うときに Kibana での使いやすさが大幅に低下します。

4

1 に答える 1

0

フィールドに文字列または数値の両方を含める必要がある場合は、文字列として定義する必要があります。それ以外の場合、elasticsearch は、不一致がある場合に喜んでイベントをドロップします。

Elasticはlogstashに「dead-letter」機能を追加することを計画しているので、フィールドを数値として保持し、elasticsearchの代わりに文字列として通過したイベントをそこに送ることができます.

Elasticsearch が受信した最初のデータに基づいてフィールドを数値にしないようにするには、動的マッピングを無効にするか、テンプレートをセットアップして、マッピングをより適切に支援する必要があります。

于 2016-02-19T17:51:30.913 に答える