Добавить в корзинуПозвонить
Найти в Дзене
Monqlab

Парсинг raw-событий на low-code от Monq

Коллеги, Всем привет! Сегодня наш пост будет техническим ⚙️ И впервые на Яндекс.Дзен Мы кратко расскажем как распарсить, отправленные в Monq, данные формата text/plain 📝 1️⃣ Первым делом необходимо создать поток данных, в который будем отправлять "сырые" логи. 2️⃣ Далее вся магия происходит на low-code, поэтому переходим к конфигурации "обработчика" нашего потока данных (monq 6.10+) 3️⃣ Свой парсер мы сделаем в виде локальной функции "myCustomLogParser", в которой определим некое регулярное выражение. Код функции "myCustomLogParser" имеет следующий вид : System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^\<(?<pri>[0-9]+)\>(?<time>[^ ]* {1,2}[^ ]* [^ ]*) (?<hostname>[^ ]*) *(?<message>.*)$"); System.Text.RegularExpressions.MatchCollection matches = regex.Matches(InString); var obj = new resultObject() { pri = matches[0].Groups["pri"].Value, time = matches[0].Groups["time"].Value, hostname = matches[0].Groups["hostname"].Value, mes

Коллеги, Всем привет!

Сегодня наш пост будет техническим ⚙️

И впервые на Яндекс.Дзен

Мы кратко расскажем как распарсить, отправленные в Monq, данные формата text/plain 📝

1️⃣ Первым делом необходимо создать поток данных, в который будем отправлять "сырые" логи.

2️⃣ Далее вся магия происходит на low-code, поэтому переходим к конфигурации "обработчика" нашего потока данных (monq 6.10+)

3️⃣ Свой парсер мы сделаем в виде локальной функции "myCustomLogParser", в которой определим некое регулярное выражение.

Код функции "myCustomLogParser" имеет следующий вид :

System.Text.RegularExpressions.Regex regex =
new System.Text.RegularExpressions.Regex(@"^\<(?<pri>[0-9]+)\>(?<time>[^ ]* {1,2}[^ ]* [^ ]*) (?<hostname>[^ ]*) *(?<message>.*)$");
System.Text.RegularExpressions.MatchCollection matches = regex.Matches(InString);
var obj = new resultObject()
{
pri = matches[0].Groups["pri"].Value,
time = matches[0].Groups["time"].Value,
hostname = matches[0].Groups["hostname"].Value,
message = matches[0].Groups["message"].Value
};
return obj;

4️⃣ На вход функции, через пин InString передается "сырой" лог, а на выходе (пин Result) мы уже имеем объект в виде заранее объявленной структуры "resultObject". Далее все по стандартному pipeline.

5️⃣ Осталось только отправить в вышеуказанный поток данных какой нибудь"сырой" лог.

6️⃣ Так как регулярное выражение в вышеуказанной функции написано для логов с оборудования Mikrotik, наш парсер сможет разбирать логи подобные этому:

<30>Jun 20 20:39:32 sklad.router 00:23:68:D3:A8:F9@wap_11-1 disconnected, registered to other interface, signal strength -67

💡 В параметрах запроса, при отправке логов необходимо указать Content-Type:text/plain так-как мы отправляем неструктурированный текст.

Для наглядности, скриншоты сценария и объявленной структуры можете увидеть ниже 👇👇👇

-2
-3
-4