本文介绍如何通过Logtail采集Python日志。

背景信息

Python的logging模块提供通用的日志系统,可供第三方模块或者应用使用。logging模块定义了不同的日志级别和记录日志的方式。logging模块包括logger、handler、filter、formatter四个组件。

在formatter中定义日志输出格式,采用%(key)s形式。 示例如下:
import logging  
import logging.handlers  
LOG_FILE = 'tst.log'  
handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5) # 实例化handler   
fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(levelno)s %(levelname)s %(pathname)s %(module)s %(funcName)s %(created)f %(thread)d %(threadName)s %(process)d %(name)s - %(message)s' //定义日志格式 
formatter = logging.Formatter(fmt)   # 实例化formatter。 
handler.setFormatter(formatter)      # 为handler添加formatter。
logger = logging.getLogger('tst')    # 获取名为tst的logger。  
logger.addHandler(handler)           # 为logger添加handler。 
logger.setLevel(logging.DEBUG)  
logger.info('first info message')  
logger.debug('first debug message')
具体字段说明如下所示。
字段 说明
%(name)s 生成日志的Logger名称。
%(levelno)s 数字形式的日志级别。
%(levelname)s 文本形式的日志级别,包括DEBUG、INFO、WARNING、ERROR和CRITICAL。
%(pathname)s 日志文件路径。
%(filename)s 日志文件名。
%(module)s 日志所在的模块名。
%(funcName)s 日志输出函数的名称。
%(lineno)d 日志输出函数的语句所在的代码行。
%(created)f 日志创建时间,UNIX时间戳格式。
%(relativeCreated)d 日志创建时间与logging模块被加载时间的时间差,单位为毫秒。
%(asctime)s 日志创建时间。例如2003-07-08 16:49:45,896,其中896表示毫秒数。
%(msecs)d 日志创建时间中的毫秒部分。
%(thread)d 线程ID。
%(threadName)s 线程名称。
%(process)d 进程ID。
%(message)s 日志信息。

操作步骤

日志服务提供配置向导,帮助您快速完成Logtail采集配置。本文以通过完整正则模式采集Python日志为例。

  1. 登录日志服务控制台
  2. 接入数据区域,选择正则-文本日志
  3. 选择目标Project和Logstore,单击下一步
  4. 创建机器组。
    • 如果您已有可用的机器组,请单击使用现有机器组
    • 如果您还没有可用的机器组,请执行以下操作(以ECS为例)。
      1. ECS机器页签中,通过手动选择实例方式选择目标ECS实例,单击立即执行

        更多信息,请参见安装Logtail(ECS实例)

        说明 如果您的服务器是与日志服务属于不同账号的ECS、其他云厂商的服务器和自建IDC时,您需要手动安装Logtail。更多信息,请参见安装Logtail(Linux系统)安装Logtail(Windows系统)。手动安装Logtail后,您还需要在该服务器上手动配置用户标识。具体操作,请参见配置用户标识
      2. 安装完成后,单击确认安装完毕
      3. 创建机器组页面,输入名称,单击下一步

        日志服务支持创建IP地址机器组和用户自定义标识机器组,详细参数说明请参见创建IP地址机器组创建用户自定义标识机器组

  5. 选中目标机器组,将该机器组从源机器组移动到应用机器组,单击下一步
    注意 如果创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。
  6. Logtail配置页签中,创建Logtail配置。
    重要参数配置如下所示。其他参数说明,请参见使用完整正则模式采集日志
    • 日志样例2022-02-19 11:06:52,514 - test.py:19 - 10 DEBUG test.py test <module> 1645240015.514271 139865996687072 MainThread 20193 tst - first debug message
    • 正则(\d+-\d+-\d+\s\S+)\s-\s([^:]+):(\d+)\s+-\s+(\d+)\s+(\w+)\s+(\S+)\s+(\w+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\w+)\s+(\d+)\s+(\w+)\s+-\s+(.*)
    • 日志抽取内容:日志服务会根据您输入的日志样例和正则表达式,自动提取日志内容。您需要为该内容设置对应的Key。
    Python日志
  7. 预览数据及设置索引,单击下一步
    日志服务默认开启全文索引。您也可以根据采集到的日志,手动或者自动设置字段索引。更多信息,请参见配置索引
    说明 如果您要查询分析日志,那么全文索引和字段索引属性必须至少启用一种。同时启用时,以字段索引为准。