Проблема при отправке данных из 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 часов.