cloudwatch日志-python日志处理程序
logbeam的Python项目详细描述
使用事件批处理框架的标准python日志处理程序 由awscli-cwlogs包提供。
日志被批量提交到cloudwatch api中,并且可以配置 发送部分批前消息的最大年龄限制; 和最大批量大小。这些都匹配相同的配置选项 查找configuring the cwlogs agent
安装
pip install logbeam
用法
下面是一个用于设置根日志处理程序的示例 日志梁的CloudWatchLogsHandler
import logging from logbeam import CloudWatchLogsHandler cw_handler = CloudWatchLogsHandler( log_group_name='my_log_group', log_stream_name='my_log_stream', buffer_duration=10000, batch_count=10, batch_size=1048576 ) # If you use the root logger instead of __name__ you will need to turn off # propagation for loggers 'cwlogs' and 'botocore' or a cycle of logs about # log message delivery will be created, causing the log handler never to # exit and your program to hang. logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) logger.addHandler(cw_handler) logger.info("Hello world!")
警告:如上所述,如果将处理程序附加到根 logger(logging.getLogger())您需要禁用 cwlogs和botocore记录器,以防止日志无限循环。这个 下面的示例将日志从这些记录器发送到stderr:
local_handler = logging.StreamHandler() for logger_name in ('cwlogs', 'botocore'): lg = logging.getLogger(logger_name) # Don't propagate to the root handler if it has a CloudWatchLogsHandler lg.propagate = False # Write logs to stderr instead lg.addHandler(local_handler)
处理程序参数
可以使用以下参数初始化CloudWatchLogsHandler。
- log_group_name-目标CloudWatch日志组名
- log_stream_name-目标CloudWatch日志流名称
- {TT9}$-(默认10000)最大的年龄在MS中最老的日志项在批处理之前必须传输到CyrdWist.
- {TT10}$-(默认10000)批次中的日志项的最大数量,在批处理之前必须传输到CuldWAT。
- {TT11}$-(默认1024×1024)最大字节大小,一批日志可以在传输到CyrdWist表之前到达。
- logs_client-(可选)初始化的boto3CloudWatchLogs.Client。如果没有提供,处理程序将初始化它自己的。
IAM权限
以下是LogBeam所需的最低IAM策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:<region>:<account_id>:log-group:<log_group>:log-stream:" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:<region>:<account_id>:log-group:<log_group>:log-stream:<log_stream>" ] } ] }
有关批处理设置的单词
日志记录在发送到之前在内存中缓冲一段时间 cloudwatch,意味着在事件中丢失日志记录的可能性很小 某种启示(例如,意外的进程终止)。
在正常情况下,当 进程出口将指示由处理程序创建的CuldWistCh线程。 刷新缓冲区并等待它们退出。
如果进程被强制终止(例如sigkill),则 缓冲区和尚未传输到CloudWatch的将丢失。为了这个 将buffer_duration配置为相对 很短。
缓冲区大小(字节)和长度(项目数)也不应设置 低,因为CuldWead日志API限制最大的5个PoPrError事件调用 对于日志流,每秒。如果这些值太低而您正在发射 每批都有很多日志项排在最后一批之后0.2秒。