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())您需要禁用 cwlogsbotocore记录器,以防止日志无限循环。这个 下面的示例将日志从这些记录器发送到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秒。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要64位jdk 1.5 for windows   eclipse运算符+对于参数类型java是未定义的。双,爪哇。双人   未下载文件扩展名为的java文件   java不支持带有POST的媒体类型   从动态创建的多个EditText读取文本时发生java错误   java无法为同一xpath单击多个按钮   如何在Java中动态格式化字符串   java Android Clear Middle活动   多线程Java内存模型volatile和x86   git在Java中通过Jgit忽略文件或文件夹   java“决策无法区分输入的备选方案1、2…”   子类的javajpa继承   java需要弄清楚如何操作mutator来弄清楚一个类,教授说,我对如何操作感到困惑   java如何使用JDBC将数据从文件复制到PostgreSQL?