我需要使用Java8运行时从AWS登录到splunk。它使用了spring框架,我在项目中添加了logback splunk appender。没有错误,日志似乎没有出现在splunk中。splunk管理员提到在splunk服务器上没有收到任何请求。当我尝试手动调用REST时,日志显示在splunk中。所以从AWS Lambda到splunk服务器的连接是很好的。splunk appender似乎以异步方式调用API,我在AWS代码的末尾添加了50秒睡眠,以查看在异步步骤完成之前是否存在VM退出问题。还没有运气。如何进一步调试?
代码片段:-
public class LambdaApp implements RequestHandler<String, Object>
{
private static final Logger LOGGER = LoggerFactory.getLogger(LambdaApp.class);
private static final Logger SPLUNK_LOGGER = LoggerFactory.getLogger("splunk.logger");
@Override
public Object handleRequest(String event, Context context)
{
SPLUNK_LOGGER.info("AWS Lambda start");
try {
Thread.sleep(50000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
return "handled";
}Maven依赖项:-
<dependency>
<groupId>com.splunk.logging</groupId>
<artifactId>splunk-library-javalogging</artifactId>
<version>1.5.2</version>
</dependency>Logback配置:-
<appender name="http" class="com.splunk.logging.HttpEventCollectorLogbackAppender">
<url>https://a.b.c.d:8088</url>
<token>valid-token</token>
<disableCertificateValidation>true</disableCertificateValidation>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>{%msg}</pattern>
</layout>
</appender>
<logger name ="splunk.logger" level="DEBUG">
<appender-ref ref="http" />
</logger>发布于 2017-10-18 07:54:08
第一步是添加batch_size_count,以排除与HttpEventCollectorLogbackAppender无关的任何问题。
<appender name="http" class="com.splunk.logging.HttpEventCollectorLogbackAppender">
<url>https://a.b.c.d:8088</url>
<token>valid-token</token>
<batch_size_count>1</batch_size_count>
<disableCertificateValidation>true</disableCertificateValidation>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>{%msg}</pattern>
</layout>
</appender> 您还应该验证您是否在接收端使用Splunk 6.3+,因为至少需要v6.3。
发布于 2022-11-10 16:37:43
您必须指定一个有效的/现有的Splunk索引,否则日志条目将悄悄地放在地板上。
将batch_size_count设置为1将确保每个日志条目都被刷新。不幸的是,所有东西都是异步编写的,不管您如何配置它(尽管“顺序”是默认的sendMode),所以刷新并不足以确保它实际上是刷新的。为此,您需要将terminationTimeout设置为“足够长”的值(以毫秒为单位),但不要太长以显着地影响lambda。
请注意,terminationTimeout应用于每次刷新,而不仅仅是在他们认为是“终止”的时候。他们还使用繁忙的轮询来实现它。它显然是由一些人实现的,他们并不真正了解如何编写多线程代码,也不知道线程每隔几毫秒旋转一次以轮询另一个线程的状态的含义。
https://stackoverflow.com/questions/46800065
复制相似问题