web-dev-qa-db-ja.com

LogstashがElasticSearchでデフォルトマッピングを作成しないようにする方法

Logstashを使用してログをElasticSearchにフィードしています。私はlogstashの出力を次のように設定しています:

input {
file {
            path => "/tmp/foo.log"
            codec =>
                    plain {
                    format => "%{message}"
            }
    }
}
output {
        elasticsearch {
                        #Host => localhost 
                        codec => json {}
                        manage_template => false
                        index => "4glogs"
                }
}

Logstashを開始するとすぐに、以下のようにESでマッピング(logs)が作成されます。

{
    "4glogs": {
        "mappings": {
            "logs": {
                "properties": {
                    "@timestamp": {
                        "type": "date",
                        "format": "dateOptionalTime"
                    },
                    "@version": {
                        "type": "string"
                    },
                    "message": {
                        "type": "string"
                    }
                }
            }
        }
    }
}

Logstashがこのマッピングを作成しないようにするにはどうすればよいですか?

更新:

このエラーも解決しました。 「[logs]のオブジェクトマッピングはオブジェクトとして解析しようとしましたが、EOFがあり、具体的な値が提供されていますか?」

John Petroneが以下に述べているように、マッピングを定義したら、ドキュメントがマッピングに準拠していることを確認する必要があります。私の場合、「type:nested」のマッピングを定義していましたが、logstashからの出力は文字列でした。そのため、logstash構成からすべてのコーデック(jsonまたはplain)を削除しました。これにより、jsonドキュメントを変更せずにパススルーできました。

これが私の新しいlogstashの設定です(複数行のログ用の追加のフィルターがいくつかあります)。

input {
    kafka {
        zk_connect => "localhost:2181"
        group_id => "logstash_group"
        topic_id => "platform-logger"
        reset_beginning => false
        consumer_threads => 1
        queue_size => 2000
        consumer_id => "logstash-1"
        fetch_message_max_bytes => 1048576
        }
        file {
                path => "/tmp/foo.log"
        }
}
filter {
  multiline {
    pattern => "^\s"
    what => "previous"
  }
  multiline {
    pattern => "[0-9]+$"
    what => "previous"
  }
  multiline {
    pattern => "^$"
    what => "previous"
  }
        mutate{
                remove_field => ["kafka"]
                remove_field => ["@version"]
                remove_field => ["@timestamp"]
                remove_tag => ["multiline"]
        }
 }
output {
        elasticsearch {
                        manage_template => false
                        index => "4glogs"
                }
}
19
Prakash Shankor

Elasticsearchにデータを保存して検索するには、マッピングが必要になります。これが、ESがこれらのコンテンツタイプのインデックス作成と検索の方法を知る方法です。 logstashで動的に作成することも、そうしないようにして手動で作成することもできます。

既存のマッピングは変更できないことに注意してください(ただし、追加することはできます)。そのため、まず既存のインデックスを削除する必要があります。その後、動的マッピングの作成を防ぐために設定を変更します。同時に、独自のマッピングを作成する必要があります。

たとえば、これによりlogstashデータのマッピングが作成されますが、「strict」を使用して動的マッピングの作成も制限されます。

$ curl -XPUT 'http://localhost:9200/4glogs/logs/_mapping' -d '
{
    "logs" : {
        "dynamic": "strict",
        "properties" : {
            "@timestamp": {
                "type": "date",
                "format": "dateOptionalTime"
                    },
            "@version": {
                "type": "string"
                    },
             "message": {
                "type": "string"
                    }
        }
    }
}
'

インデックス名「4glogs」とタイプ「logs」は、logstashからのものと一致する必要があることに注意してください。

私の実稼働システムでは、偶発的なマッピングの作成を避けるため、一般的に動的マッピングをオフにすることを好みます。

次のリンクは、動的マッピングを調整する場合に役立ちます。

https://www.elastic.co/guide/en/elasticsearch/guide/current/dynamic-mapping.html

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/dynamic-mapping.html

14
John Petrone

この場合のlogsindex_typelogsとして作成したくない場合は、他のindex_typeelasticsearch要素。 elasticsearchのすべてのレコードには、インデックスとタイプが必要です。 Logstashは、指定しない場合、デフォルトでlogsになります。

レコードをElasticsearchに挿入すると、常に暗黙的なマッピングが作成されるため、作成を防ぐことはできません。何かを挿入する前に(テンプレートマッピングを介して)自分でマッピングを作成できます。

設定 manage_template of falseは、指定したindexのテンプレートマッピングを作成しないようにします。既存のテンプレートが既に作成されている場合は、curl -XDELETE http://localhost:9200/_template/logstash?pretty

3
Alcanzar

インデックステンプレートが役立ちます。詳細はこちらをご覧ください jira ワイルドカードをサポートするインデックステンプレートを作成して、インデックス名と一致させ、デフォルトのマッピングを配置できます。

1
Pankaj Yadav