elasticsearch,mariadb,Json,Regex,Logging,elasticsearch,Mariadb" /> elasticsearch,mariadb,Json,Regex,Logging,elasticsearch,Mariadb" />

我如何解析格式为表的Mariadb日志,以便它可以被elasticsearch(JSON)读取?

我如何解析格式为表的Mariadb日志,以便它可以被elasticsearch(JSON)读取?,json,regex,logging,elasticsearch,mariadb,Json,Regex,Logging,elasticsearch,Mariadb,我试图将MariaDB常规日志解析为JSON对象,然后由ElasticSearch解释。我面临的问题是,输出的文件的结构如下: 150826 22:17:44 2 Connect debian-sys-maint@localhost as anonymous 2 Quit 3 Connect debian-sys-maint@localhost as anonymous

我试图将MariaDB常规日志解析为JSON对象,然后由ElasticSearch解释。我面临的问题是,输出的文件的结构如下:

   150826 22:17:44 2 Connect   debian-sys-maint@localhost as anonymous 
                   2 Quit
                   3 Connect   debian-sys-maint@localhost as anonymous 
                   3 Quit
   150826 22:18:44 2 Connect   debian-sys-maint@localhost as anonymous 
                   2 Quit
我使用正则表达式匹配第一行,如下所示:

^(?<date>\d{6})\s(?<time>\w{2}:\w{2}:\w{2})\s{5}(?<id>\d*)\s(?<command>\w*)\s{3}(?<argument>.*)
^(?\d{6})\s(?\w{2}:\w{2}:\w{2})\s{5}(?\d*)\s(?\w*)\s{3}(?)


不幸的是,我不确定如何定位在同一时间段内发生的其他项目,理想情况下,我希望确保这些后续行在各自的时间段下列出。据我所知,这是我可以从MariaDB中获得的唯一格式,如果你知道如何使它成为日志的常规格式,那么更好。

也许另一个解决方案是将MariaDB配置为。如果您配置了此选项,那么您的常规日志将进入已结构化(根据定义)的表中,您无需解析任何内容

然后,您可以使用从该表中检索记录,而不是检索原始日志文件并对其进行解析。您需要下载MariaDB JDBC连接器。您的日志存储配置如下所示:

input {
  jdbc {
    jdbc_driver_library => "/path/to/mariadb-connector-java-1.2.0-bin.jar"
    jdbc_driver_class => "org.mariadb.jdbc.Driver"
    jdbc_connection_string => "jdbc:mariadb://localhost:3306/mydb"
    jdbc_user => "myuser"
    schedule => "1m"
    statement => "SELECT * FROM mysql.general_log WHERE event_time > :sql_last_start"
  }
}
filter {
   ... your filters...
}
output {
    elasticsearch {
        .... your ES config ....
    }
}

只是想看看你在这方面是否有什么运气?为迟到道歉,我在度假。我同意你最初的建议,我的印象是我必须使用fluentd进行格式化,但事实显然不是这样。将表转储到general_log而不进行解析很好,谢谢!