如何用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
相关产品推荐
相关产品推荐

