2017-01-13 3 views
2

У меня проблема с моим logstash s3 iinput. Последние сообщения, которые я вижу в моем кибане, являются несколькими днями раньше. На самом деле у меня есть ловушка AWS с включенным журналом. Я тестировал из командной строки, и я вижу, что logsstash постоянно обрабатывает входные данные и никогда не выводит. В ведро elb s3 есть одна папка в день/месяц/год, и каждая папка содержит несколько файлов журнала и имеет общий размер около 60 ГБ.Logstash продолжает делать s3-входную задачу, но nerver посылает события ouput

В начале это работало нормально, но по мере того, как журналы растут, оно становится медленным, и теперь я вижу свои журналы в размере outpiut. Logstah продолжает выполнять входную задачу, фильтровать и никогда не выводить журналы.

Я создал специальный конфигурационный файл для теста только с s3 в качестве входных данных, и испытания в специальной машине из командной строки:

/opt/logstash/bin/logstash agent -f /tmp/s3.conf --debug 2>&1 | tee /tmp/logstash.log 
``` 
the s3.conf file : 
``` 
[email protected]:~$ cat /tmp/s3.conf 
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
# !!!!!!!!! This file is managed by SALT !!!!!!!!! 
# !!!!!!!!! All changes will be lost !!!!!!!!! 
# !!!!!!!!!  DO NOT EDIT MANUALLY !  !!!!!!!!! 
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

#--[ INPUT ]---------------------------------------------------------------- 
input 
{ 

    # Logs ELB API 
    s3 
    { 
    bucket => "s3.prod.elb.logs.eu-west-1.mydomain" 
    prefix => "rtb/smaato/AWSLogs/653589716289/elasticloadbalancing/" 
    interval => 30 
    region => "eu-west-1" 
    type => "elb_access_log" 
    } 

} 



#--[ FILTER ]--------------------------------------------------------------- 
filter 
{ 

    # Set the HTTP request time to @timestamp field 
    date { 
     match => [ "timestamp", "ISO8601" ] 
     remove_field => [ "timestamp" ] 
    } 


    # Parse the ELB access logs 
    if [type] == "elb_access_log" { 
    grok { 
     match => [ "message", "%{TIMESTAMP_ISO8601:timestamp:date} %{HOSTNAME:loadbalancer} %{IP:client_ip}:%{POSINT:client_port:int} (?:%{IP:backend_ip}:%{POSINT:backend_port:int}|-) %{NUMBER:request_processing_time:float} %{NUMBER:backend_processing_time:float} %{NUMBER:response_processing_time:float} %{INT:backend_status_code:int} %{INT:received_bytes:int} %{INT:sent_bytes:int} %{INT:sent_bytes_ack:int} \"%{WORD:http_method} %{URI:url_asked} HTTP/%{NUMBER:http_version}\" \"%{GREEDYDATA:user_agent}\" %{NOTSPACE:ssl_cipher} %{NOTSPACE:ssl_protocol}" ] 
     remove_field => [ "message" ] 
    } 

    kv { 
     field_split => "&?" 
     source => "url_asked" 
    } 

    date { 
     match => [ "timestamp", "ISO8601" ] 
     remove_field => [ "timestamp" ] 
    } 
    } 

    # Remove the filebeat input tag 
    mutate { 
    remove_tag => [ "beats_input_codec_plain_applied" ] 
    } 

    # Remove field tags if empty 
    if [tags] == [] { 
    mutate { 
     remove_field => [ "tags" ] 
    } 
    } 

    # Remove some unnecessary fields to make Kibana cleaner 
    mutate { 
    remove_field => [ "@version", "count", "fields", "input_type", "offset", "[beat][hostname]", "[beat][name]", "[beat]" ] 
    } 

} 

#--[ OUTPUT ]--------------------------------------------------------------- 
output 
#{ 
# elasticsearch { 
# hosts => ["10.3.16.75:9200"] 
# } 
#} 
{ 
# file { 
#  path => "/tmp/logastash/elb/elb_logs.json" 
# } 
stdout { codec => rubydebug } 
} 

И я могу увидеть входную обработку, фильтр, и сообщение, как «будет начать работу рабочего ..... ", но не выходное событие получено, никогда.

Я создал новую папку (с именем test_elb) на ведро, и скопировать журналы из однодневной папки (31/12/2016, например) в него, а затем установить новый созданный в качестве префикса в моей конфигурация входов, как это:

s3 
    { 
    bucket => "s3.prod.elb.logs.eu-west-1.mydomain" 
    prefix => "rtb/smaato/AWSLogs/653589716289/test_elb/" 
    interval => 30 
    region => "eu-west-1" 
    type => "elb_access_log" 
    } 

и с этим s3 префиксом, logstash делает всю конвейерную обработку данных (ввод, фильтр, выход), как ожидают, и я вижу, мои журналы выходов. поэтому для меня это похоже на ведро большого и losgstash-s3 плагин имеет сложную обработку. Может ли кто-нибудь здесь посоветовать по этой проблематике, пожалуйста?

Моя версия logstash: 2.2.4 Операционная система: Debian Jessie

Я искать и спросить в discuss.elastic форуме, в elasticseach IRC чан, и никакого реального решения. Возможно ли это, что это может быть ведро Размер вопроса

Спасибо за помощь.

С уважением.

ответ

0
  1. Конфигурирование плагина ввода s3 для перемещения файлов в ведро/путь, которые не рассматриваются на входе после обработки.
  2. Хотя во входном ведре/пути есть много файлов, вам может потребоваться запустить logstash для подмножества данных, пока он не переместит файлы в ведро/путь обработки.

Это то, что я делаю, чтобы обрабатывать около .5GiB (несколько сотен тысяч) файлов в день. Logstash потянет все имена объектов до того, как сделает какие-либо вставки, поэтому появится, что процесс застрял, если в вашем ковше огромное количество файлов.

bucket => "BUCKET_NAME" 
    prefix => "logs/2017/09/01" 
    backup_add_prefix => "sent-to-logstash-" 
    backup_to_bucket => "BUCKET_NAME" 
    interval => 120 
    delete => true 

Я не уверен, насколько прочен этот процесс потери данных между ковшом движется, но для журналов, которые не являются критически важными, этот процесс является весьма эффективным, учитывая количество перемещаемых файлов.