splunk-library-javalogging, 用于流行的Java日志框架的Splunk日志附加组件

分享于 

17分钟阅读

GitHub

  繁體 雙語
Splunk logging appenders for popular Java Logging frameworks
  • 源代码名称:splunk-library-javalogging
  • 源代码网址:http://www.github.com/splunk/splunk-library-javalogging
  • splunk-library-javalogging源代码文档
  • splunk-library-javalogging源代码下载
  • Git URL:
    git://www.github.com/splunk/splunk-library-javalogging.git
    Git Clone代码到本地:
    git clone http://www.github.com/splunk/splunk-library-javalogging
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/splunk/splunk-library-javalogging
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    用于 Java 版本 1.5.3的日志记录

    这个项目使用Splunk和的3 个主要的日志记录框架( Logback,Log4J 2和 java.util. 日志记录),向 HTTP事件收集器提供了一个方便的日志记录,可以方便地记录数据,并使用3 种主要的。

    特别是,它提供:

    • 用于从 Logback。Log4J 2和 java.util. 日志进行推送的HTTP事件收集器的附加程序。
    • SplunkCimLogEvent 类,封装Splunk企业中的CIM ( 公共信息模型) 和语义日志记录的最佳实践。
    • 对于上述三种框架中的Logback附加组件,这是上述三种框架中惟一不提供对TCP端口写入的本地支持。
    • 所有三个框架的配置文件,说明如何配置它们以写入 Splunk TCP端口。

    建议

    Splunk通用转发器 vs Splunk TCP输入

    如果可以,最好登录到文件并使用Splunk通用转发器监视它们。 这为你提供了通用转发器的特性,并增加了持久文件的健壮性。 但是,在某些情况下,使用通用转发器是不可能的。 在这些情况下,直接写入TCP输入是一种合理的方法。

    无论哪种情况,我们建议使用此库提供的SplunkCimLogEvent 类根据splunk最佳实践来构造日志事件。

    弹性

    显示( 用于 java.util. 日志记录的SocketHandler,SocketAppender为 Log4J 2,为Logback提供了这里库的TCPAppender ) 配置文件的所有TCP附加接口都将尝试在断开连接时重新连接。

    数据克隆

    可以通过在日志配置中提供多个TCP处理程序实例来使用数据克隆插件,每个实例都指向不同的索引器。

    负载平衡

    不要尝试在日志配置中跨索引器重新创建负载平衡,而是使用TCP输入设置一个通用转发器。 让所有日志源写入该TCP输入,并使用转发器平衡特性的通用负载将数据从那里分发到一组索引器。

    线程安全

    Log4J 和Logback是线程安全的。

    将事件发送到HTTP事件收集器

    HTTP事件收集器需要 Splunk 6.3 +。 Splunk Java库支持通过 java.util.logging 发送事件,log4jlogback 标准记录器。 为了使用HTTP事件收集器,必须在服务器上启用它,并且应该创建应用程序令牌。

    Java的Splunk日志记录包括 src/test/resources 文件夹中的几个配置文件示例。 例如 java.util.logging 配置看起来像:

    
    handlers=com.splunk.logging.HttpEventCollectorLoggingHandler
    
    
    com.splunk.logging.HttpEventCollectorLoggingHandler.url=https://splunk-server:8088
    
    
    com.splunk.logging.HttpEventCollectorLoggingHandler.token=<token-guid>
    
    
    
    

    发送事件很简单:

    LoggerLOGGER=java.util.logging.Logger.getLogger("splunk.java.util");LOGGER.info("hello world");

    有关更多信息,请参见 http://dev.splunk.com/view/SP-CAAAE2K

    许可证

    Java的Splunk日志是在Apache许可证 2.0下许可的。

    可以在许可证文件中找到详细信息。

    使用Splunk日志记录

    使用Splunk日志,需要添加 it,选择要用于项目的日志库,打开Splunk实例的TCP输入,然后使用 SplunkCimLogEvent 类来生成日志事件,然后使用类生成良好的日志项。

    将Java库的Splunk日志记录添加到你的项目中。 如果要使用 Maven,请将以下内容添加到依赖项部分:

    <dependency>
     <groupId>com.splunk.logging</groupId>
     <artifactId>splunk-library-javalogging</artifactId>
     <version>1.5.2</version>
    </dependency>

    你可能还希望将以下存储库添加到你的知识库部分:

    
    <repository>
    
    
     <id>splunk</id>
    
    
     <name>splunk-releases</name>
    
    
     <url>http://splunk.jfrog.io/splunk/ext-releases-local</url>
    
    
    </repository>
    
    
    
    

    如果使用 Ant,请从 http://dev.splunk.com/goto/sdk-slj 下载相应的jar 文件。

    添加你计划使用的日志记录框架。 目前正在使用的三个大的是 Logback,Log4J and and ( 这是你的JDK ) 和 java.util.logging。 如果使用 Maven,请将下面对应的依赖项添加到你的pom.xml 中:

    • Logback:
    <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-api</artifactId>
     <version>1.7.5</version>
    </dependency>
    <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
     <version>1.0.13</version>
    </dependency>
    <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-core</artifactId>
     <version>1.0.13</version>
    </dependency>
    • Log4J 2.x:
    <dependency>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-core</artifactId>
     <version>2.0-beta9</version>
    </dependency>
    • java.util.logging 附带了 JDK。

    在Splunk中创建要写入的TCP输入。 要了解如何使用 ,请参见从TCP和UDP端口中获取数据。

    配置日志系统。下面是三个系统中每个系统的简单示例配置。 应该将 log4j2.xmllogback.xml 文件放在程序类路径的某个地方。 应该通过将以下内容传递给Java可执行文件来指定 jdklogging.properties:

    
    -Djava.util.logging.config.file=/path/to/jdklogging.properties
    
    
    
    
    • Logback ( 要放在类路径上的logback.xml 中)
    <configuration>
     <!-- You should send data to Splunk using TCP inputs. You can find the  documentation on how to open TCP inputs on Splunk at http://docs.splunk.com/Documentation/Splunk/latest/Data/Monitornetworkports. Logback does not ship with a usable appender for TCP sockets (its  SocketAppender serializes Java objects for deserialization by a  server elsewhere). Instead, use the TcpAppender provided with this  library. This example assumes that you have Splunk running on your local  machine (127.0.0.1) with a TCP input configured on port 15000.  Note that TCP inputs are *not* the same as Splunk's management  port. You can control the format of what is logged by changing the  encoder (see http://logback.qos.ch/manual/layouts.html#ClassicPatternLayout  for details), but the pattern below produces a simple timestamp,  followed by the full message and a newline, like the following: 2012-04-26 14:54:38,461 [%thread] %level text of my event--> <appendername="socket"class="com.splunk.logging.TcpAppender">
     <RemoteHost>127.0.0.1</RemoteHost>
     <Port>15000</Port>
     <layoutclass="ch.qos.logback.classic.PatternLayout">
     <pattern>%date{ISO8601} [%thread] %level: %msg%n</pattern>
     </layout>
     </appender>
     <loggername="splunk.logger"additivity="false"level="INFO">
     <appender-refref="socket"/>
     </logger>
     <rootlevel="INFO">
     <appender-refref="socket"/>
     </root>
    </configuration>
    • Log4J 2.x ( 要在路径中放入 log4j2.xml )
    <Configurationstatus="info"name="example"packages="">
     <!-- Define an appender that writes to a TCP socket. We use Log4J's  SocketAppender, which is documented at https://logging.apache.org/log4j/2.x/manual/appenders.html#SocketAppender. You can find the documentation on how to open TCP inputs on Splunk  at http://docs.splunk.com/Documentation/Splunk/latest/Data/Monitornetworkports.  Note that TCP inputs are *not* the same as Splunk's management port.--> <Appenders>
     <Socketname="socket"host="127.0.0.1"port="15000">
     <PatternLayoutpattern="%p: %m%n"charset="UTF-8"/>
     </Socket>
     </Appenders>
     <!-- Define a logger named 'splunk.logger' which writes to the socket appender we defined 上面. --> <Loggers>
     <Rootlevel="INFO">
     </Root>
     <Loggername="splunk.logger"level="info">
     <AppenderRefref="socket"/>
     </Logger>
     </Loggers>
    </Configuration>
    • java.util.logging
    
    # We will write to a Splunk TCP input using java.util.logging's 
    
    
    # SocketHandler. This line sets it to be the default handler for 
    
    
    # all loggers.
    
    
    handlers = java.util.logging.SocketHandler
    
    
    config =
    
    
    
    # Set the default logging level for the root logger
    
    
    .level = INFO
    
    
    
    # Implicitly create a logger called 'splunk.logger', set its 
    
    
    # level to INFO, and make it log using the SocketHandler.
    
    
    splunk.logger.level = INFO
    
    
    splunk.logger.handlers = java.util.logging.SocketHandler
    
    
    
    # Configure the SocketHandler to write to TCP port localhost:15000. 
    
    
    # Note that TCP inputs are *not* the same as Splunk's management 
    
    
    # port. You can find the documentation about how to open TCP 
    
    
    # inputs in Splunk at http://docs.splunk.com/Documentation/Splunk/latest/Data/Monitornetworkports.
    
    
    #
    
    
    # You can find the documentation on using a SocketHandler at http://docs.oracle.com/javase/7/docs/api/java/util/logging/SocketHandler.html.
    
    
    
    java.util.logging.SocketHandler.level = INFO
    
    
    java.util.logging.SocketHandler.host = localhost
    
    
    java.util.logging.SocketHandler.port = 15000
    
    
    
    # With Java 7, you can set the format of SimpleFormatter. On Java 6, 
    
    
    # you cannot and you will probably want to write a custom formatter 
    
    
    # for your system. The syntax of the format string is given at 
    
    
    # http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax 
    
    
    # and http://docs.oracle.com/javase/7/docs/api/java/util/logging/SimpleFormatter.html
    
    
    # for logging specific behavior.
    
    
    java.util.logging.SocketHandler.formatter = SimpleFormatter
    
    
    java.util.logging.SimpleFormatter.format ="%1$F %1$r %4$s: %6$s%n"
    
    
    
    

    导入 com.splunk.logging.SplunkCimLogEvent 并使用它来创建事件。 本示例代码使用Logback作为记录器,但与 SplunkCimLogEvent 相关的部分将对其他框架保持不变:

     logger.info(newSplunkCimLogEvent("Event name", "event-id") {{
     // You can add an arbitrary key=value pair with addField. addField("name", "value");
     // If you are logging exceptions, use addThrowable, which// does nice formatting. If ex is an exception you have caught// you would log it with addThrowableWithStacktrace(ex);
     // SplunkCimLogEvent provides lots of convenience methods for// fields defined by Splunk's Common Information Model. See// the SplunkCimLogEvent JavaDoc for a complete list. setAuthAction("deny");
     }});

    使用logback访问器的访问的

    logback访问记录不同类型的事件( ch.qos.logback.access.spi.IAccessEvent ) 作为logback经典,这是 ch.qos.logback.classic.spi.ILoggingEvent

    要将此库与logback访问一起使用,可以尝试以下配置:

    • logback访问( 要放在类路径上的logback-access.xml 中)
      
       <configuration>
      
      
       <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      
      
       <encoder>
      
      
       <pattern>combined</pattern>
      
      
       </encoder>
      
      
       </appender>
      
      
      
       <appender name="hec_access_appender" class="com.splunk.logging.HttpEventCollectorLogbackAppender">
      
      
       <url>https://localhost:8088</url>
      
      
       <token>00000000-0000-0000-0000-000000000000</token>
      
      
       <host>devhost</host>
      
      
       <index>main</index>
      
      
       <source>logback-client</source>
      
      
       <sourcetype>logback</sourcetype>
      
      
       <disableCertificateValidation>true</disableCertificateValidation>
      
      
      
       <layout class="ch.qos.logback.access.PatternLayout">
      
      
       <pattern>%h %l %u %t %r %s %b</pattern>
      
      
       </layout>
      
      
       </appender>
      
      
      
       <appender-ref ref="CONSOLE"/>
      
      
       <appender-ref ref="hec_access_appender"/>
      
      
       </configuration>
      
      
      
      
      如果遇到任何问题,请尝试将 debug=true 属性添加到 configuration 以进行调试。

    Splunk企业

    如果你还没有安装Splunk企业,请在这里下载: 有关安装和运行Splunk企业和系统需求的详细信息,请参阅 Splunk企业安装手册。

    资源

    这里库的文档

    Splunk公共信息模型

    Splunk最佳实践日志记录语义

    介绍Splunk产品及其一些功能

    捐赠

    从GitHub获取 Splunk Java日志框架,并将资源克隆到你的计算机。 例如使用以下命令:

    
    git clone https://github.com/splunk/splunk-library-javalogging.git
    
    
    
    

    如果你希望进行代码贡献,请转到源代码页以获得更多信息。

    支持

    Java的Splunk日志库支持社区。

    联系我们

    你可以在 devinfo@splunk.com 访问开发平台团队。


    JAVA    log  POP  日志  SPL  
    相关文章