You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将Kubernetes Pod日志拆分为三列?

拆分Kubernetes Pod日志为三列的实现方法

方法一:使用正则表达式(推荐,格式匹配更稳定)

正则表达式可以精准匹配Kubernetes日志的固定格式,直接提取出时间戳、stderr F标识和剩余内容:

import re

# 定义匹配日志结构的正则表达式
log_regex = re.compile(r'^(\S+) (stderr F) (.*)$')

with open('2215.log', 'r') as f:
    for line in f:
        # 移除末尾换行符,保留日志内容里的空格
        clean_line = line.rstrip('\n')
        match_result = log_regex.match(clean_line)
        if match_result:
            timestamp = match_result.group(1)
            stream_tag = match_result.group(2)
            content = match_result.group(3)
            # 这里可以替换为你的业务逻辑,比如存入列表、写入CSV等
            print(f"TIMESTAMP: {timestamp} | STREAM: {stream_tag} | CONTENT: {repr(content)}")
        else:
            # 处理不符合格式的异常日志行
            print(f"无法解析的日志行:{repr(clean_line)}")

方法二:使用字符串分割(无需依赖正则模块)

如果不想用正则,可以通过字符串分割实现,利用日志的固定空格分隔规则:

with open('2215.log', 'r') as f:
    for line in f:
        clean_line = line.rstrip('\n')
        # 先分割出时间戳和剩余内容
        if ' ' not in clean_line:
            continue
        timestamp, rest_content = clean_line.split(' ', 1)
        # 提取固定的`stderr F`标识和剩余日志内容
        if rest_content.startswith('stderr F '):
            stream_tag = 'stderr F'
            content = rest_content[len('stderr F '):]
        else:
            # 兼容格式异常的情况(如果存在)
            parts = rest_content.split(' ', 1)
            stream_tag = parts[0] if len(parts) > 0 else ''
            content = parts[1] if len(parts) > 1 else ''
        # 输出或处理拆分后的结果
        print(f"TIMESTAMP: {timestamp} | STREAM: {stream_tag} | CONTENT: {repr(content)}")

说明

  • 两种方法都会保留日志内容中的原始空格(比如参数说明前的缩进)
  • 对于内容为空的日志行(示例中第三、第五、第九行),会提取出空字符串作为content值
  • 可以根据需求替换print语句,比如将结果存入列表、写入CSV文件或进行后续分析

内容的提问来源于stack exchange,提问作者MikiBelavista

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:53:19