Проблема при отправке данных из Filebeats в несколько файлов Logstash

Чтобы быть точным, я обрабатываю файл журнала, который содержит почти миллионы записей. Поскольку это журнал Сводка платежных данных, информация о клиенте будет записываться в произвольном порядке.
Я использую customized GROK Patterns а также logstash XML filter plugin извлечь данные, которые были бы достаточны для отслеживания. Для отслеживания отдельных действий клиента я использую "Customer_ID" в качестве уникального ключа. Поэтому, хотя я использую несколько файлов Logstash и несколько шаблонов GROK, вся его информация может быть ограничена / агрегирована с помощью его "Customer_ID" (уникальный ключ)

вот мой пример файла журнала,
7-04-2017 08:49:41 INFO abcinfo (ABC_RemoteONUS_Processor.java52) - Customer_Entry :::<?xml version="1.0" encoding="UTF-8"?><ns2:ReqListAccount xmlns:ns2="http://vcb.org/abc/schema/"/"><Head msgId="1ABCDEFegAQtQOSuJTEs3u" orgId="ABC" ts="2017-04-27T08:49:51+05:30" ver="1.0"/><Cust id="ABCDVFR233cd662a74a229002159220ce762c" note="Account CUST Listing" refId="DCVD849512576821682" refUrl="http://www.ABC.org.in/" ts="2017-04-27T08:49:51+05:30"

Мой Грок Узор,

grok {
patterns_dir => "D:\elk\logstash-5.2.1\vendor\bundle\jruby\1.9\gems\logstash-patterns-core-4.0.2\patterns"
match => [ "message" , "%{DATESTAMP:datestamp} %{LOGLEVEL:Logseverity}\s+%{WORD:ModuleInfo} \(%{NOTSPACE:JavaClass}\)%{ABC:Customer_Init}%{GREEDYDATA:Cust}"]add_field => { "Details" => "Request" }remove_tag => ["_grokparsefailure"]}  

Мой индивидуальный шаблон, который хранится внутри Pattern_dir,

ABC ( - Customer_Entry :::)

Мой плагин XML Filter,

xml {
source => "Cust"
store_xml =>false
xpath => [
  "//Head/@ts", "Cust_Req_time",
  "//Cust/@id", "Customer_ID",
  "//Cust/@note", "Cust_note", ]
  }  

Так что, какие бы детали не были представлены ** - Customer_Entry:::**, я смогу извлечь их, используя XML Plugin Filter (будет храниться как многострочный кодек). Я написал 5 различных файлов Logstash для извлечения различных действий клиента с 5 различными шаблонами Grok. Который скажет,

1.Customer_Entry
2.Customer_Purchase
3.Customer_Last_Purchase
4.Customer_Transaction
5.Customer_Authorization

Все вышеупомянутые шаблоны Grok имеют различный набор информации, который будет сгруппирован по Customer_ID, как я уже говорил ранее.

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

Так как у меня есть 100 файлов журналов каждый день, которые нужно поместить в logstash, я выбрал Filebeats, но Filebeats работает только с одним портом "5044". Я попытался запустить с 5 различными портами для 5 разных файлов logstash, но это не сработало. Только один файл из 5 logstash загружался, остальные файлы конфигурации находились в режиме ожидания.
Вот мой пример выходного файла filebat.prospector,

output.logstash:
хосты: ["localhost: 5044"]

output.logstash:
хосты: ["localhost: 5045"]

output.logstash:
хосты: ["localhost:5046"]

Я не мог добавить все шаблоны grok в один файл конфигурации logstash, потому что плагин XML Filter принимает источник "GREEDYDATA". в таком случае у меня будет 5 разных Source=> для 5 разных рисунков Грока. Я даже попробовал это тоже, но это не сработало.

В поисках лучшего подхода.

1 ответ

Решение

Похоже, вы ищете масштаб с параллельным проглатыванием. Как это происходит, FileBeats поддерживает то, что называется балансировкой нагрузки, которая звучит так, как вы ищете.

output.logstash:
  hosts: [ "localhost:5044", "localhost:5045", "localhost:5046" ]
  loadbalance: true

Это для выходов. Тем не менее, я считаю, что вы хотели многопоточности на входе. Предполагается, что FileBeats отслеживает все файлы, указанные в конфигурации проспекта, но вы нашли ограничения. Глобализация или указание каталога приведет к однопоточности файлов в этом каталоге / glob. Если ваши имена файлов это поддерживают, креативная глобализация может улучшить параллелизм, определив несколько глобусов в одной директории.

Предполагая, что ваши журналы приходят по типу:

- input_type: log
  paths:
    - /mnt/billing/*entry.log
    - /mnt/billing/*purchase.log
    - /mnt/billing/*transaction.log

Разрешить поисковикам чтение нескольких потоков в параллельных файлах здесь.

Если ваши журналы приходят со случайными именами, вы можете использовать аналогичные настройки

- input_type: log
  paths:
    - /mnt/billing/a*
    - /mnt/billing/b*
    - /mnt/billing/c*
    [...]
    - /mnt/billing/z*

Если вы обрабатываете много файлов с уникальными именами, которые никогда не повторяются, добавьте clean_inactive config config-option для ваших исследователей обеспечит быструю работу вашего FileBeat.

- input_type: log
  ignore_older: 18h
  clean_inactive: 24h
  paths:
    - /mnt/billing/a*
    - /mnt/billing/b*
    - /mnt/billing/c*
    [...]
    - /mnt/billing/z*

Который удалит все состояния для файлов старше 24 часов и не потрудится обрабатывать файлы старше 18 часов.

Другие вопросы по тегам