如何使用Python Lambda获取最新CloudWatch日志流完整URL
获取Lambda对应CloudWatch日志流的完整URL
核心思路
不需要调用describe_log_streams接口,直接通过Lambda的context对象获取必要参数,拼接CloudWatch日志流的固定格式URL即可,步骤如下:
- 从
context中提取日志组名(context.log_group_name)和当前执行的日志流名(context.log_stream_name) - 获取Lambda所在的AWS区域
- 按照CloudWatch控制台的URL规则拼接完整链接(注意转义日志组/流名中的斜杠为
%2F)
代码实现
import os def lambda_handler(event, context): # 从context获取日志组和日志流名称 log_group = context.log_group_name log_stream = context.log_stream_name # 提取Lambda所在区域(从函数ARN中解析) region = context.invoked_function_arn.split(':')[3] # 拼接并转义URL中的特殊字符 encoded_log_group = log_group.replace('/', '%2F') encoded_log_stream = log_stream.replace('/', '%2F') log_url = f"https://console.aws.amazon.com/cloudwatch/home?region={region}#logsV2:log-groups/log-group/{encoded_log_group}/log-events/{encoded_log_stream}" print(f"CloudWatch日志流完整URL: {log_url}") # 此处添加你的业务逻辑 return { 'statusCode': 200, 'body': '执行完成' }
补充说明
- 区域也可以通过环境变量
AWS_REGION获取,代码替换为:region = os.environ.get('AWS_REGION') - 如果需要获取该日志组下最新创建的日志流(而非当前执行的日志流),才需要调用
describe_log_streams,示例如下:
import boto3 def get_latest_log_stream_url(context): log_group = context.log_group_name region = context.invoked_function_arn.split(':')[3] client = boto3.client('logs', region_name=region) # 查询最新的日志流(按创建时间倒序,取第一个) response = client.describe_log_streams( logGroupName=log_group, orderBy='LastEventTime', descending=True, limit=1 ) latest_stream = response['logStreams'][0]['logStreamName'] # 拼接URL encoded_log_group = log_group.replace('/', '%2F') encoded_log_stream = latest_stream.replace('/', '%2F') return f"https://console.aws.amazon.com/cloudwatch/home?region={region}#logsV2:log-groups/log-group/{encoded_log_group}/log-events/{encoded_log_stream}"
内容的提问来源于stack exchange,提问作者Ravichandran
相关产品推荐
相关产品推荐

