2017-01-24 5 views
-1

У меня есть пользовательский файл журнала, который имеет простой текст, а также теги xml. Как это сделать в отдельных полях. Здесь не то, как это выглядит следующим образом: 1/10/2017 4:16:35 AM: Ошибка выброшен является: Нет ошибкиlogstash собственный журнал, который имеет xml теги внутри


Запрос послали: SCEO415154712


Ответ получен является: SCEO4151547trueTBAfalse7169-1TBAfalse2389-1

1/10/2017 4:16:35 AM : 
 
Error thrown is: 
 
No Error 
 
************************************************************************* 
 
Request sent is: 
 
<InventoryMgmtRequest xmlns="http://www.af.com/Ecommerce/Worldwide/AvailabilityService/Schemas/InventoryMgmtRequest"><ns0:MsgHeader MessageType="FIXORD" MsgDate="10.01.2017 04:16:32" SystemOfOrigin="ISCS_DE" CommunityID="SG888" xmlns:ns0="http://www.av.com/Ecommerce/Worldwide/AvailabilityService/Schemas/InventoryMgmtRequest"><ns0:OrderID>SCEO4151547</ns0:OrderID><ns0:ReservationID></ns0:ReservationID><ns0:CRD></ns0:CRD></ns0:MsgHeader><ns0:MsgBody xmlns:ns0="http://www.ab.com/Ecommerce/Worldwide/AvailabilityService/Schemas/InventoryMgmtRequest"><ns0:Product Sku="CH562EE" Qty="1" IsExpress="false" IsTangible="true" Region="EMEA" Country="DE"><ns0:ProdType></ns0:ProdType><ns0:LineItemNum>1</ns0:LineItemNum><ns0:JCID></ns0:JCID></ns0:Product><ns0:Product Sku="CH563EE" Qty="1" IsExpress="false" IsTangible="true" Region="EMEA" Country="DE"><ns0:ProdType></ns0:ProdType><ns0:LineItemNum>2</ns0:LineItemNum><ns0:JCID></ns0:JCID></ns0:Product></ns0:MsgBody></InventoryMgmtRequest> 
 
************************************************************************* 
 
Response received is: 
 
<ns0:InventoryMgmtResponse xmlns:ns0="http://www.ad.com/Ecommerce/Worldwide/AvailabilityService/Schemas/InventoryMgmtResponse"><ns0:MsgHeader MsgDate="10.01.2017 04:16:32" MessageType="FIXORD"><ns0:OrderID>SCEO4151547</ns0:OrderID><ns0:ReservationID /><ns0:ReadyToRelease>true</ns0:ReadyToRelease></ns0:MsgHeader><ns0:MsgBody><ns0:Product SKU="CH562EE" LSPSKU="9432GFT" OutOfStock="false" FulfillmentSite="00ZF" SKUExist="true" Region="EMEA" Country="DE" IsTangible="true"><ns0:EDD>TBA</ns0:EDD><ns0:FutureUsed>false</ns0:FutureUsed><ns0:CurrentQty>7169</ns0:CurrentQty><ns0:FutureQty>-1</ns0:FutureQty></ns0:Product><ns0:Product SKU="CH563EE" LSPSKU="9432GFU" OutOfStock="false" FulfillmentSite="00ZF" SKUExist="true" Region="EMEA" Country="DE" IsTangible="true"><ns0:EDD>TBA</ns0:EDD><ns0:FutureUsed>false</ns0:FutureUsed><ns0:CurrentQty>2389</ns0:CurrentQty><ns0:FutureQty>-1</ns0:FutureQty></ns0:Product></ns0:MsgBody></ns0:InventoryMgmtResponse> 
 
*************************************************************************

Также я не хочу захватывать разделители строк (линия, полная **** в конце) в моих полях.

+0

@ Rumbles вы можете любезно посмотреть на это? ТИА – prosenjit

ответ

0

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

Проблемы, которые у вас здесь, много, но если, например, одно из ваших сообщений (отправлено через TCP) повторно передано по какой-либо причине или просто (отправлено через UDP) потеряно, ваш шаблон будет разбит как часть сообщения что логсташ ожидает, что его нет.

вещь, которую вы можете сделать, на мой взгляд, - это попытаться изменить процесс ведения журнала, чтобы сохранить файл в виде отдельной строки для каждого события. Большинство инструментов ведения журнала должны позволять это с правильными параметрами конфигурации. В идеале, запустите приложение для входа в json-формат (при условии, что вы обрабатываете журналы, чтобы сохранить их в elasticsearch), это потребует самых низких издержек на сервере логсташа для обработки этих журналов (поскольку elasticsearch сохраняет их в json-формате). Все, что вам нужно сделать, это передать каждую строку события/журнала в фильтр json, и поля генерируются именами, указанными им вашим приложением.