将AWS Lambda日志重定向到CloudWatch中的特定日志组

3

我有多个 Lambda 函数。有没有一种方法可以将所有这些 Lambda 的日志重定向到特定的 CloudWatch 日志组,而不是每个 Lambda 都自己去。


可能是为AWS Lambda指定日志组?的重复问题。 - Dunedan
2个回答

3

事实证明另一个问题类似,目前似乎没有办法聚合来自不同lambda服务的日志。

我最终创建了一个SQS FIFO队列。从lambda向队列发送日志消息,并创建一个Log Lambda,它基本上会打印出sqe队列中的所有消息。

当我想查看日志时,我会进入Log Lambda的CloudWatch日志,其中包含所有日志并以顺序排列。


0
你可以做的是设置一个日志组,并确保所有的Lambda函数都将日志记录到这个日志组中。不幸的是,AWS仍然会将日志记录到Lambda函数的默认日志组“aws/lambda/”,但你也可以通过使用aws_lambda_powertools创建一个日志记录器来聚合所有的日志到一个日志组中。
local_logger = Logger(
service="name", level=os.environ.get("LOG_LEVEL", "INFO").upper(), region="region"

))

将其替换为一个记录器,该记录器记录到您的日志组中:

logs_client = boto3.client('logs', region_name=os.environ['AWS_REGION'])
# Send logs to the custom log stream
logs_client.create_log_stream(
    logGroupName=log_group_name,
    logStreamName=log_stream_name
)
# Add the custom handler to the logger
local_logger.addHandler(CloudWatchLogHandler(logs_client, log_group_name, log_stream_name))

import logging

from aws_lambda_powertools import Logger


class CloudWatchLogHandler(logging.StreamHandler):

    def __init__(self, log_client: Logger, log_group_name: str, log_stream_name: str, context_id: str):
        super().__init__()
        self.logs_client = log_client
        self.log_group_name = log_group_name
        self.log_stream_name = log_stream_name
        self.context_id = context_id

    def emit(self, record):

        log_entry = self.format(record)

        log_json = {
            'level': record.levelname,
            'location': f"{record.funcName}:{record.lineno}",
            'message': log_entry,
            'timestamp': int(record.created * 1000),
            'service': record.name,
            'correlation_id': self.context_id
        }

        self.logs_client.put_log_events(
            logGroupName=self.log_group_name,
            logStreamName=self.log_stream_name,
            logEvents=[{
                'timestamp': int(record.created * 1000),
                'message': str(log_json),
            }]
        )


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接