3

我正在尝试在 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 中看到 stdout 日志记录,但 Logstash 服务器似乎没有接收事件。

4

0 回答 0