【问题标题】:How to group logs messages in logstash using grok?如何使用 grok 对 logstash 中的日志消息进行分组?
【发布时间】:2016-04-02 10:13:34
【问题描述】:
 [25-Dec-2015 08:06:45] 0:: users to chek for delete
 [25-Dec-2015 08:08:44] 0:: users to chek for delete
 [25-Dec-2015 08:10:44] 3:: users to chek for delete
 [25-Dec-2015 08:10:44] Expected response code 200, got 404

     {
         "error": {
          "errors": [
           {
            "domain": "global",
            "reason": "notFound",
            "message": "Resource Not Found: userKey"
           }
          ],
          "code": 404,
          "message": "Resource Not Found: userKey"
         }
        }

    [06-Nov-2015 19:24:19 GMT] PHP Fatal error:  Class 'Test\Test\Api\Resources\Authenticate1234' not found in /apps/test/src/Test/Test/Api/Resources/ResourceFactory.php on line 10
    [06-Nov-2015 19:24:19 GMT] PHP Stack trace:
    [06-Nov-2015 19:24:19 GMT] PHP   1. {main}() /apps/test/public/api.php:0
    [06-Nov-2015 19:24:19 GMT] PHP   2. Test\Test\Api\ApiController->handleRequest() /apps/test/public/api.php:13
    [06-Nov-2015 19:24:19 GMT] PHP   3. Test\Test\Api\Resources\ResourceFactory->create() /apps/test/src/Test/Test/Api/ApiController.php:14

以上是我的日志文件示例。我需要过滤掉每条消息。问题在于编写过滤器。前 3 行是三个不同的错误。

  • [25-Dec-2015 08:06:45] 0:: 用户检查删除
  • [25-Dec-2015 08:06:45] 0:: 用户检查删除
  • [25-Dec-2015 08:06:45] 3:: 用户检查删除

第四个错误是 JSON 消息的错误。我需要把这个块从上面分开。

    [25-Dec-2015 08:10:44] Expected response code 200, got 404
     {
         "error": {
          "errors": [
           {
            "domain": "global",
            "reason": "notFound",
            "message": "Resource Not Found: userKey"
           }
          ],
          "code": 404,
          "message": "Resource Not Found: userKey"
         }
        }

第五个错误是 PHP 堆栈跟踪。

        [06-Nov-2015 19:24:19 GMT] PHP Fatal error:  Class 'Test\Test\Api\Resources\Authenticate1234' not found in /apps/test/src/Test/Test/Api/Resources/ResourceFactory.php on line 10
        [06-Nov-2015 19:24:19 GMT] PHP Stack trace:
        [06-Nov-2015 19:24:19 GMT] PHP   1. {main}() /apps/test/public/api.php:0
        [06-Nov-2015 19:24:19 GMT] PHP   2. Test\Test\Api\ApiController->handleRequest() /apps/test/public/api.php:13
        [06-Nov-2015 19:24:19 GMT] PHP   3. Test\Test\Api\Resources\ResourceFactory->create() /apps/test/src/Test/Test/Api/ApiController.php:14

是否可以设计一个grok过滤器来匹配这3个条件?

【问题讨论】:

    标签: elasticsearch logstash kibana-4 logstash-grok logstash-configuration


    【解决方案1】:

    您的第一步是将多行 json 错误放入一个 logstash 事件中。查看多行编解码器或过滤器。然后,我建议使用一个 grok{} 节将日期时间从行中拉出,然后使用另一个 grok 节处理该行的剩余部分。

    【讨论】:

      【解决方案2】:

      使用multiline 选项。例如:

      filter {
          multiline {
              negate    => true
              pattern   => "^\["
              what      => "previous"
          }
      }
      

      结果应该是这样的:

      [06-Nov-2015 19:24:19 GMT] PHP Fatal error:  Class 'Test\Test\Api\Resources\Authenticate1234' not found in /apps/test/src/Test/Test/Api/Resources/ResourceFactory.php on line 10
      PHP Stack trace:
      PHP   1. {main}() /apps/test/public/api.php:0
      PHP   2. Test\Test\Api\ApiController->handleRequest() /apps/test/public/api.php:13
      PHP   3. Test\Test\Api\Resources\ResourceFactory->create() /apps/test/src/Test/Test/Api/ApiController.php:14
      

      【讨论】:

      • 问题在于每一行之前的日期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 2018-10-27
      • 1970-01-01
      相关资源
      最近更新 更多