使用log4j通过TCP附加程序将日志从AWS Lambda中推出

时间:2019-06-27 21:02:23

标签: java aws-lambda logstash log4j2

我正在尝试将日志从Lambda服务推出到Elasticsearch的选项。 我们已经有一个解决方案,可以扫描默认的CloudWatch日志流,但是希望直接传输任何自定义指标。

为此测试编写的最小应用程序可以在IDE上正常运行,并且不会在lambda中返回任何log4j交叉配置错误。 它还几乎不推送来自lambda的任何日志。 我们偶尔会收到松紧带的条目,但是即使使用相同的jar和测试请求,它也会被击中或遗漏。

从其他测试中我们已经知道,lambda在发送响应后立即杀死或冻结线程,这似乎是同一种问题。 我们要求log4j发送一个日志条目,它开始缓冲,但是在任何事情发生之前,线程都会被砍掉。至少这是当前的假设。

已经尝试修改Socket附加器InstantFlush和bufferedIO选项,但交付速率没有明显变化。

尝试进行注销提供了相似的结果。

发布当前正在运行的日志(仅有时在lambda上)log4j2.xml。 可以从以下项目克隆测试项目:https://github.com/Slaszor/lambda-logger

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} |%X{AWSRequestId}| %-5p %c:%L - %m%n"/>
       </Console>
        <Socket name="socket" host="logstash.test.domain.com" port="5000">
            <JsonLayout complete="false" compact="true">
                <KeyValuePair key="app_name" value="java-echo-service"/>
            </JsonLayout>
        </Socket>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="socket"/>
        </Root>
    </Loggers>
</Configuration>

有人知道如何使log4j可靠地传输这些日志吗?

0 个答案:

没有答案