Создание объектов 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. Поскольку я не думаю, что вы запускаете несколько таких в секунду, это может сработать для вас.

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