Создание объектов json из журналов с помощью ELK Stack
У меня есть несколько журналов, созданных мостом между Центром качества (HP Alm) и Дженкинсом: Примерно так:
Building in workspace D:\Tools\Jenkins\workspace\*******-JenkinsWithQC
[Dani-JenkinsWithQC] $ D:\Tools\Jenkins\workspace\*******-JenkinsWithQC\HpToolsLauncher.exe -paramfile props20022014150821066.txt
"Started..."
Timeout is set to: 5
Run mode is set to: RUN_REMOTE
============================================================================
Starting test set execution
Test set name: JenkinsIntegartionTest, Test set id: 2457
"Number of tests in set: "2
Test 1: [1]Login will run on host: si0vm839
Test 2: [1]Logout will run on host: si0vm839
"Scheduler started at:20.02.2014 15:08:28
-------------------------------------------------------------------------------------------------------
20.02.2014 15:08:29 Running: [1]Login
20.02.2014 15:08:29 Running test: [1]Login, Test id: 938, Test instance id: 1412
Test: [1]Login, Id: 1412, Execution status: Running
Test: [1]Login, Id: 1412, Execution status: Error, Message: Access is denied
20.02.2014 15:08:33 Test complete: [1]Login
-------------------------------------------------------------------------------------------------------
20.02.2014 15:08:33 Running: [1]Logout
20.02.2014 15:08:33 Running test: [1]Logout, Test id: 939, Test instance id: 1413
Test: [1]Logout, Id: 1413, Execution status: Running
Test: [1]Logout, Id: 1413, Execution status: Error, Message: Access is denied
==============\nJob timed out!\n==============
================================================
Run status: Job failed, total tests: 2, succeeded: 0, failures: 0, errors: 2
Build step 'Execute HP tests from HP ALM' changed build result to FAILURE
Finished: FAILURE
Я хочу создать JSON из этих журналов, который выглядит примерно так:
{
'Build': {
'TestSet': [
{
'name' . : 'execution',
'id' : 2457,
'startedAt': '20.02.2014 15:08:28',
'nbOfTests': 2,
'tests' . : [
{
'name': "[1]Login",
'host': "si0vm839"
}
]
}
]
}
}
Я могу сделать это с помощью скрипта Python, который обрабатывает строку за строкой с помощью регулярного выражения и создает JSON, но я думаю, что он не оптимизирован, так как я новичок в Python...
Я хочу знать, смогу ли я сделать это с помощью Logstash, чтобы сохранить их в Elasticsearch и создать панель управления kanban.
Заранее спасибо за помощь:)
1 ответ
Это возможно сделать с помощью Logstash, включив многострочный кодек при приеме внутрь и некоторые по-настоящему грубые операторы grok. Это не проект, который я бы с нетерпением ждал. На самом деле, я бы решил это одним из двух способов:
Использовать ruby
фильтр
Это позволяет встроенному рубину массировать эту массивную нить в поля, которые вы хотите на событии. По сути, вы пишете свой собственный codec
сюда.
Использовать exec
вход
Это освобождает процесс преобразования его в анализируемый формат во внешний скрипт, который затем отправляет его в logstash для внедрения в ElasticSearch. Поскольку я не думаю, что вы запускаете несколько таких в секунду, это может сработать для вас.