Logstash не работает с filebeat

Я следую руководству Digital Ocean по установке стека ELK. Он работал, но теперь у меня проблемы с logstash.

Когда я запускаю отладку, я получаю это::

tail -f /var/log/logstash/logstash.log 

{:timestamp=>"2017-02-10T10:38:05.169000-0500", :message=>"Error: Expected one of #, input, filter, output at line 1, column 1 (byte 1) after "}
{:timestamp=>"2017-02-10T10:38:05.201000-0500", :message=>"You may be interested in the '--configtest' flag which you can\nuse to validate logstash's configuration before you choose\nto restart a running system."}
{:timestamp=>"2017-02-14T10:51:46.921000-0500", :message=>"fetched an invalid config", :config=>"input {\n  lumberjack {\n    port => 5044\n    type => syslog\n    ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n    ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n  }\n}\n\ninput {\n  beats {\n    port => 5044\n    ssl => true\n    ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n    ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n  }\n}\n\nfilter {\n  if [type] == \"syslog\" {\n    grok {\n      match => { \"message\" => \"%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\\[%{POSINT:syslog_pid}\\])?: %{GREEDYDATA:syslog_message}\" }\n      add_field => [ \"received_at\", \"%{@timestamp}\" ]\n      add_field => [ \"received_from\", \"%{host}\" ]\n    }\n    syslog_pri { }\n    date {\n      match => [ \"syslog_timestamp\", \"MMM  d HH:mm:ss\", \"MMM dd HH:mm:ss\" ]\n    }\n  }\n}\n\ninput{\n  beats {\n    port => 5044\n  }\n}\n\noutput {\n  elasticsearch {\n    hosts => \"10.84.234.224:9200\"\n    manage_template => false\n    index => \"%{[@metadata][beat]}-%{+YYYY.MM.dd}\"\n    document_type => \"%{[metadata][type]}\"\n  }\n}\n\noutput {\n  elasticsearch {\n    hosts => [\"localhost:9200\"]\n    sniffing => true\n    manage_template => false\n    index => \"%{[@metadata][beat]}-%{+YYYY.MM.dd}\"\n    document_type => \"%{[@metadata][type]}\"\n  }\n\u007Fstdout { codec => rubydebug }\n}\n\noutput {\n  elasticsearch { host => localhost }\n  stdout { codec => rubydebug }\n}\n\ninput {\n  tcp {\n    port => 5400\n    type => syslog\n  }\n  udp {\n    port => 5400\n    type => syslog\n  }\n}\n\nfilter {\n  if [type] == \"syslog\" {\n    grok {\n      match => { \"message\" => \"%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\\[%{POSINT:syslog_pid}\\])?: %{GREEDYDATA:syslog_message}\" }\n      add_field => [ \"received_at\", \"%{@timestamp}\" ]\n      add_field => [ \"received_from\", \"%{host}\" ]\n    }\n    date {\n      match => [ \"syslog_timestamp\", \"MMM  d HH:mm:ss\", \"MMM dd HH:mm:ss\" ]\n    }\n  }\n}\n\noutput {\n  elasticsearch { hosts => [\"localhost:9200\"] }\n  stdout { codec => rubydebug }\n}\n\n\n", :reason=>"Expected one of #, if, \", ', } at line 56, column 1 (byte 1278) after output {\n  elasticsearch {\n    hosts => [\"localhost:9200\"]\n    sniffing => true\n    manage_template => false\n    index => \"%{[@metadata][beat]}-%{+YYYY.MM.dd}\"\n    document_type => \"%{[@metadata][type]}\"\n  }\n", :level=>:error}

Тем не менее, я попытался удалить свои конфигурации лесорубов, и я не могу найти проблему ни в одной из моих конфигураций. Кто-нибудь знает, есть ли способ сделать новую переустановку logstash. Я думаю, что перепутал слишком много confs, logstash, logstash-forwarder и т. д.

Файл конфигурации:

input {
  beats {
    port => 5044
    ssl => true
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

output {
  elasticsearch { 
    host => ["localhost:9200"]
    sniffing => true
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

ОБНОВЛЕНИЕ Когда я запускаю configtest, я получаю эту ошибку:

sudo service logstash configtest

/etc/init.d/logstash: 156: /etc/init.d/logstash: /opt/logstash/bin/logstash: not found

person user6754289    schedule 14.02.2017    source источник
comment
получена недопустимая конфигурация. Пожалуйста, отредактируйте, чтобы показать фактический файл конфигурации   -  person OneCricketeer    schedule 14.02.2017
comment
вывод, elasticsearch должен быть hosts, а не host. Вы уверены, что скопировали конфиг из правильного туториала?   -  person OneCricketeer    schedule 15.02.2017
comment
И ваша ошибка говорит input {\n lumberjack, так что это не тот файл, который, по вашему мнению, вы запускаете.   -  person OneCricketeer    schedule 15.02.2017
comment
правильно, но я избавился от своего файла дровосека и не знаю, как заставить его читать из этого файла   -  person user6754289    schedule 15.02.2017
comment
Читать документацию? logstash -f elastic.co/guide/en/logstash/current /command-line-flags.html   -  person OneCricketeer    schedule 15.02.2017
comment
И вы хотите sudo service logstash stop пока отлаживаете свои скрипты.   -  person OneCricketeer    schedule 15.02.2017
comment
Только что добавил обновление. Я тоже пытаюсь остановиться, но пишет logstash стоп/ожидание   -  person user6754289    schedule 15.02.2017


Ответы (1)


Обратите внимание, что logstash как служба считывает все файлы из /etc/logstash/conf.d, поэтому, если вы отредактируете только один, это не означает, что он перезагрузит и исправит другие файлы.

Я не уверен, какой файл вы редактируете, но у вас есть много файлов, которые logstash добавляет вместе.

Например, в одном файле есть это

input {
  tcp {
    port => 5400
    type => syslog
  }
  udp {
    port => 5400
    type => syslog
  }
}

У другого есть это

input{
  beats {
    port => 5044
  }
}

И так далее... итак, проверьте все файлы в /etc/logstash/conf.d на наличие ошибок по отдельности с помощью logstash --configtest, как говорит ошибка.


Если вы посмотрите на конец сообщения об ошибке...

:reason=>"Ожидается одно из #, if, \", ', } в строке 56, столбце 1 (байт 1278) после ...

output {
  elasticsearch {
    hosts => [\"localhost:9200\"]
    sniffing => true
    manage_template => false
    index => \"%{[@metadata][beat]}-%{+YYYY.MM.dd}\"
    document_type => \"%{[@metadata][type]}\"
  }

Похоже, вам не хватает закрывающей скобки для output {}, или что-то в строке 56 плохое/отсутствует, думает он.


Я не уверен, что не так с configtest, но для этого вам не нужен сервис. Команда logstash --configtest может сама проверить ваши файлы.

person OneCricketeer    schedule 14.02.2017
comment
У меня есть закрывающая скобка. В конце 2, я что-то пропустил? Кроме того, если все мои файлы conf находятся в /etc/logstash/conf.d и я их редактирую, как я могу указать logstash перезагрузить? - person user6754289; 15.02.2017
comment
sudo service logstash restart попытается снова запустить все конфиги. В показанном файле да, есть. В сообщении об ошибке, содержащем input {\n lumberjack, нет. - person OneCricketeer; 15.02.2017
comment
Я сделал перезапуск logstash, но он говорит стоп: неизвестный экземпляр. - person user6754289; 15.02.2017
comment
Я также не знаю, откуда берется этот файл дровосека, поэтому я не могу его редактировать. Извините, я новичок в logstash и elk stack - person user6754289; 15.02.2017
comment
Запустите ls /etc/logstash/conf.d и вы увидите все файлы. Если служба не может остановить экземпляр, то это проблема Linux, а не проблема logstash. - person OneCricketeer; 15.02.2017
comment
там нет файла дровосека, но, возможно, это потому, что служба никогда не перезапускалась. Поэтому мне нужно понять, почему службу нельзя остановить, потому что я предполагаю, что моя конфигурация не перезагружается. - person user6754289; 15.02.2017
comment
Команда ps aux | grep logstash расскажет вам о процессах, которые (все еще) существуют - person OneCricketeer; 15.02.2017
comment
вывод: username+ 12495 0.0 0.0 15944 2260 pts/2 R+ 09:12 0:00 grep --color=auto logstash Но я не знаю, как его убить. Никакие команды, которые я пробовал, не остановят это. Он просто продолжает говорить стоп / ждите - person user6754289; 15.02.2017
comment
Работает только grep. Там нет процессов logstash. - person OneCricketeer; 15.02.2017
comment
нет еще не работает. Теперь мой файл не отправляет журналы в logstash для просмотра в кибане. - person user6754289; 16.02.2017
comment
Я бы порекомендовал вам лучше протестировать конфигурацию logstash, отправив данные в stdout, а не сразу elasticsearch. - person OneCricketeer; 16.02.2017