流结构日志事件到Logstash

时间:2019-12-11 22:08:04

标签: python aws-lambda logstash structlog

我正在尝试在AWS Lambda函数中使用structlog,并将日志事件直接流式传输到我们的Logstash服务器。为此,我使用了带有beats传输层的logstash-async库。

代码:

from constants import LOGSTASH_HOST, LOGSTASH_PORT
from logstash_async.handler import AsynchronousLogstashHandler
from logstash_async.transport import BeatsTransport
from s4utils.exceptions import CatConfigNotFoundException
import structlog
from structlog.stdlib import LoggerFactory, BoundLogger

def get_log():
    logstash_handler = AsynchronousLogstashHandler(
        LOGSTASH_HOST,
        LOGSTASH_PORT,
        database_path=None,
        transport=BeatsTransport)
    logging.basicConfig(
        level=logging.INFO,
        format='%(message)s',
        handlers=[logstash_handler, logging.StreamHandler(sys.stdout)])
    structlog.configure(
        wrapper_class=BoundLogger,
        logger_factory=LoggerFactory(),
        processors=[structlog.processors.TimeStamper(fmt='iso', utc=True),
                    structlog.processors.JSONRenderer()])
    return structlog.get_logger().new(fields={'type': 'aws-lambda'})

我发现虽然我可以在CloudWatch中看到标准输出日志,但是Logstash服务器似乎没有收到事件。

0 个答案:

没有答案