logstashgrok模式解析mysql查询



我在logstash中有mysql-slowlogs,我想知道是否有人幸运地解析了查询部分来尝试对语句进行分类。我现在正试图用大写字母将查询分开。我想我至少可以把最初的陈述分开。具体的问题是:我如何过滤这样的消息,以便至少能够处理按大写字母分隔的查询的每个部分?

所以这个:

SELECT column_one, column_two, COUNT(DISTINCT IF(column_three > 0, CONCAT('m_', column_three), CONCAT('r_', column_one))) AS tally FROM column_four WHERE ...

将解析为:

field1: SELECT column_one, column_two, 
field2: COUNT(DISTINCT IF(column_three > 0,
field3: CONCAT('m_', column_three), 
field4:  AS tally 
... etc

或者类似的东西可以让我进一步清理查询并使其可索引。

Wiktor回复的

。对于这样的sql查询,您不应该依赖regex。但是,如果每次都有一些固定的模式重复,则可以进行基于grok的解析。对于您的示例语句,假设该语句以SELECT开头,并且有2个CONCAT,然后是AS,则可以使用以下grok模式进行解析:

(?<field_1>.+) (?<field_2>COUNT.+)(?<field_3>CONCAT.+)(?<field_4>CONCAT.+)(?<field_5>AS.+)

解析后的结果将与您要查找的结果相匹配-

    {
      "field_1": [
        [
          "SELECT column_one, column_two,"
        ]
      ],
      "field_2": [
        [
          "COUNT(DISTINCT IF(column_three > 0, "
        ]
      ],
      "field_3": [
        [
          "CONCAT('m_', column_three), "
        ]
      ],
      "field_4": [
        [
          "CONCAT('r_', column_one))) "
        ]
      ],
      "field_5": [
        [
          "AS tally FROM column_four WHERE ..."
        ]
      ]
    }

相关内容

  • 没有找到相关文章

最新更新