jboss和logstash并解析消息字段以获取计数

时间:2014-07-11 19:40:29

标签: elasticsearch logstash kibana

这对我来说似乎是一个明显的要求,所以我希望其他人可能已经解决了这个问题。 我有很多app&jboss日志很多错误。为了管理和解决这些问题,我想找出一种方法来跟踪它们。看了之后 How to retrieve unique count of a field using Kibana + Elastic Search 我想我可以使用类似的方法。 根据es docs,看起来facets已被替换,所以我认为我应该深入研究总和,但还不确定。 我仍然不确定进一步分解我的jboss日志记录的最佳方法。我最感兴趣的字段是消息字段,其中包含日期/时间戳,每个记录前面的主机名。解决这个问题的最佳方法是什么?进一步打破消息字段 - 忽略前2个元素然后排序&算下这个领域的下一部分?我可能还需要忽略此记录的某些结尾,但会处理下一个......

我对ELK堆栈很陌生,但对其可能性感到兴奋。 谢谢。 乔

2 个答案:

答案 0 :(得分:0)

Logstash (E L K的一部分)提供了大量过滤选项。最有用的是Grok。它最适合从{key,value}对中的长消息解析字段。 此外,您可以通过不同类型的插件删除/忽略Logstash中消息中的特定数据。您可以在http://logstash.net/docs/1.4.2/中进行探索。

在您发送这些数据Elastic后,您可以使用Kibana的强大功能根据您的要求创建仪表板。

因此,ELK完全符合您的要求。

答案 1 :(得分:0)

将JBOSS输出引入ELK的最佳和最简单的方法是通过套接字连接器。有很多教程,但它会自动为您提供免费的消息细分。

请参阅此示例:http://blog.akquinet.de/2015/08/24/logstash-jboss-eap/

请注意,我个人不得不更改appender并使用文档来获取正确的字段。如果您使用2.0 elasticsearch而不是更新配置。对于简单的调试简单输出到stdout。

一旦你的套接字appender正常工作,你就笑了,然后去kibanan,用你想要的任何聚合配置仪表板。我不建议进一步分解它,因为你有一个不适用于jboss实现的自定义消息细分,随意添加其他值/对,如appname ..等等。

示例: * jboss-eap-6.4.0.0 * elasticsearch-2.0.0-beta2 * kibana-4.2.0-beta2-windows * logstash-2.0.0-beta1

在logstash / conf dir下创建一个名为log4j.conf的文件,即" C:_apps \ logstash-2.0.0-beta1 \ conf \ log4j.conf"以下内容。

input {
  log4j {
    mode => "server"
    host => "0.0.0.0"
    port => 4712
    type => "log4j"
  }
}

output {
    elasticsearch {
    hosts => "127.0.0.1"
    #cluster => "myAppName"
    index => "logstash-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

在dir中使用以下命令提示符运行Logstash:     bin \ logstash.bat -f conf \ log4j.conf

配置Appender:

JBOSS APPENDER

在个人资料中:

<custom-handler name="Remotelog4j" class="org.apache.log4j.net.SocketAppender" module="org.apache.log4j">
            <level name="INFO"/>
            <properties>
                <property name="RemoteHost" value="localhost"/>
                <property name="Port" value="4712"/>
                <!--property name="BufferSize" value="1000"/-->
                <!--property name="Blocking" value="false"/-->
            </properties>
        </custom-handler>
根loggger配置中的

定义处理程序:

<root-logger>
    <level name="INFO"/>
    <handlers>
        <handler name="CONSOLE"/>
        <handler name="FILE"/>
        <handler name="Remotelog4j"/>
    </handlers>
</root-logger>

启动JBOSS,请注意您的命令提示符正在打印出来自独立JBOSS实例的所有传入消息。

使用OLD Log4J配置另一个应用程序

Log4J版本log4j-1.2.15.jar

在打包的WAR中,我创建了这个简单的附加log4j appender:

<appender name="log4jSocket" class="org.apache.log4j.net.SocketAppender" module="org.apache.log4j">
 <level name="ERROR"/>
 <param name="RemoteHost" value="localhost"/>
 <param name="Port" value="4712"/>
 <param name="threshold" value="ERROR" />
</appender>  

再次,将appender添加到应用程序log4j记录器中。

  <logger name="com.somepackage" additivity="false">
        <level value="error"/>
        <appender-ref ref="default"/>
        <appender-ref ref="event"/>
        <appender-ref ref="log4jSocket"/>
  </logger>

现在重新启动jboss配置并在JBOSS中部署/启动应用程序。你将获得logbash值/配对内的jboss输出和应用程序输出。