2014-12-24 5 views
2

У меня есть сервер ELK для управления моими журналами. Обычно они отправляются автоматически. Все работает нормально. Но по какой-то причине иногда нам нужно отправить файл журнала.Logstash: отправлять журналы с помощью curl

Я пытаюсь сделать так:

curl -F "[email protected]<my_file_path>" http://<ELK_server_host>:5001 

И это конф (часть, которая полезна здесь) на стороне сервера:

input { 
    ... 
    tcp { 
     port => 5001 
     type => "curl" 
     codec => line { charset => "UFT-8" } 
    } 
    ..... 
} 

filter { 
    ..... 
    if "curl" == [type] { 
     multiline { 
      pattern => "^%{TIMESTAMP_ISO8601}" 
      negate => true 
      what => previous 
     } 
     grok {.....} 
     date {.....} 
    } 
    ..... 
} 

output { 
    stdout { codec => rubydebug } 
    elasticsearch { 
     host => localhost 
    } 
} 

Эта работа действительно хорошая НО там это две небольшие трудности:

  • Последняя (не пустая) строка файла игнорируется
  • Команда Curl никогда не останавливается. Я должен убить Ctrl + C.

Возможно, эти две точки связаны, но что же такое решение? Может быть, многолинейный фильтр является проблемой?

ответ

3

Часть 1:

Трудно ответить на этот вопрос, не более Информация. Но я ожидаю, что последняя строка вашего файла журнала не закончится символом новой строки? Входной код кодека logstash ищет строку новой строки в конце каждой строки.

Чтобы добавить один в Windows:

echo. >> path\to\your_log_file 

Часть 2:

Curl делается для общения с HTTP-серверов. Вход в систему Logstash «tcp» не является HTTP-сервером и не отправляет ответ HTTP cURL, ожидаемый в конце загрузки.

Вам будет лучше использовать такой инструмент, как Netcat, который предназначен для передачи данных через TCP.

P.S

"UFT-8" выглядит как опечатка.

0

Я думаю, если вы используете команду лесоруба, это лучше, так как это дает вам больше контроля над тем, что вы отправляете:

logger -t your_tag -p "local1.info" --file /path/to/file --server <ELK_server_host> --tcp --port 5001 
+0

Я должен был сказать, что хочу отправлять журналы из Windows (Client). Эта команда доступна в Linux, верно? – Guinoutortue

+0

да, только в linux ... – abualy

Смежные вопросы