Какой плагин фильтра logstash использовать для Elasticsearch? - PullRequest
0 голосов
/ 05 ноября 2018

У меня проблемы с использованием logstash для ввода следующих необработанных данных вasticsearch. Выделенные ниже необработанные данные, я надеялся, что плагин JSON работает, но в настоящее время это не так Я просмотрел другие сообщения, касающиеся json, но безрезультатно.

{
    "offset": "stuff",
    "results": [
        {
            "key": "value",
            "key1": null,
            "key2": null,
            "key3": "true",
            "key4": "value4",
            "key4": [],
            "key5": value5,
            "key6": "value6",
            "key7": "value7",
            "key8": value8,
            "key9": "value9",
            "key10": null,
            "key11": null,
            "key12": "value12",
            "key13": "value13",
            "key14": [],
            "key15": "key15",
            "key16": "value16",
            "key17": "value17",
            "key18": "value18",
            "key19": "value19"
        },
        {
            "key20": "value20",
            "key21": null,
            "key22": null,
            "key23": "value23",
            "key24": "value24",

<etc.>

Мой текущий файл конфигурации:

input {
  file {
    codec => multiline
    {
      pattern => '^\{'
      negate => true
      what => previous
    }
    #type => "json"
    path => <my path>
    sincedb_path => "/dev/null"
    start_position => "beginning"
  }

}

#filter 
#{
#        json {
#        source => message
#        remove_field => message
#        }
#}

filter 
{
    mutate
    {
        replace => [ "message", "%{message}}" ]
        gsub => [ 'message','\n','']
    }
    if [message] =~ /^{.*}$/ 
    {
        json { source => message }
    }

}

output {
   #stdout { codec => rubydebug }
   stdout { codec => json }
}

Я получаю длинную ошибку, которую не могу прочитать, так как она полна "\" key10 \ ": null, \ r \" key11 \ ": \" value11 \ ", \ r

и т.д.

Кто-нибудь знает, что я делаю неправильно или как лучше увидеть свою ошибку? Это действительно json, но, возможно, я неправильно использую свое регулярное выражение для многострочного кодека.

1 Ответ

0 голосов
/ 07 ноября 2018

Можете ли вы использовать другой входной плагин, чем файл? Анализ файла JSON как многострочного может быть проблематичным. Если возможно, используйте плагин с кодеком JSON.

В файле ввода вы можете установить реальный sincedb_path, куда logstash может записать

В строке, где вы заменяете сообщение, у вас есть одна фигурная скобка } слишком много

replace => [ "message", "%{message}}" ]

Я бы записал вывод вasticsearch вместо stdout, но, конечно, тестирование вам не нужно, но когда вы записываете вывод вasticsearch, вы можете увидеть создаваемый индекс и использовать kibana, чтобы определить, является ли он содержимым. по вашему вкусу.

output {
    elasticsearch {
        hosts => "localhost"
        index => "stuff-%{+xxxx.ww}"
    }
}

Я использую эти команды curl для чтения изasticsearch,

curl -s -XGET 'http://localhost:9200/_cat/indices?v&pretty'

и

curl -s -XGET 'http://localhost:9200/stuff*/_search?pretty=true'
...