Используйте Logstash% {[source]}, чтобы отображать имя файла только для индекса Elasticsearch.

Я хотел бы использовать имя файла из исходного файла в качестве индекса для моих записей elasticsearch, так как у нас будет несколько разных файлов журнала, которые будут регистрироваться в Elasticsearch с использованием FileBeats и LogStash.

На данный момент у меня есть:

input
{
  beats {
    port => 5044
  }
}

filter {
    json {
    source => "message"
    }   
}

output {
    elasticsearch {
        hosts => "localhost:9200"
        manage_template => false
        index => "%{[source]}"
        document_type => "%{[@metadata][type]}"
        user => ***
        password => ***
    }
}

Это дает мне «C: \ logs \ test-20170518.json». Я хочу, чтобы test-20170518 использовался только в качестве индекса. Можно ли это сделать с помощью исходного кода?


person Smoeey    schedule 18.05.2017    source источник


Ответы (1)


Для этого вы можете использовать плагин фильтра Grok. Попробуй это

input
{
  beats {
    port => 5044
  }
}

filter {
    json {
        source => "message"
    }  
    grok {
        match => [
            "source",
            "C:\\logs\\%{DATA:myIndex}.json"
      ]
    } 
}


output {
    elasticsearch {
        hosts => "localhost:9200"
        manage_template => false
        index => "%{[myIndex]}"
        document_type => "%{[@metadata][type]}"
        user => ***
        password => ***
    }
}
person berrytchaks    schedule 18.05.2017
comment
Спасибо! По сути,% {DATA: myIndex} создает переменную для имени файла (myIndex), которую можно вызвать с помощью% {[myIndex]}. - person Smoeey; 19.05.2017
comment
Вы можете объяснить, что является источником? Это нигде не определено. - person Yang Luo; 08.10.2018
comment
Это источник, из которого анализируются данные. В этом случае в поле message находятся данные JSON, которые будут проанализированы в формате JSON. Отметьте это - person berrytchaks; 08.10.2018