场景目标
为试点命名空间建立按 Kubernetes 身份检索的日志链路,验证轮转、重建和中断恢复时的丢失/重复边界,并以受限权限及资源配额完成逐批推广。
云原生与容器 · 进阶
围绕容器日志发现、元数据补充、断点与缓冲治理,建立可检索、可隔离且可回退的集群日志链路。
为试点命名空间建立按 Kubernetes 身份检索的日志链路,验证轮转、重建和中断恢复时的丢失/重复边界,并以受限权限及资源配额完成逐批推广。
实施前记录 Kubernetes、容器运行时、Fluent Bit 及 Elasticsearch/Kibana 的受支持版本和插件兼容性,核对 CRI 日志路径与集群策略。需只读集群调查权限,以及仅用于日志组件的命名空间、RBAC、DaemonSet 和 Secret 管理权限;日志目录以只读挂载,offset 与缓冲目录单独写入。先为采集器设 CPU/内存预算,并预留按峰值日志量估算的节点缓冲和后端保留配额。备份清单、解析器与索引模板,保留旧链路。240 分钟仅含小范围配置和故障演练,不含历史日志回灌与全量容量压测。
应用输出经容器运行时落为节点日志,Fluent Bit DaemonSet 只读采集并查询 Kubernetes 元数据,利用独立状态目录缓冲后写入集中存储。
点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。
stdout 和 stderr 由运行时写入节点日志,应用不直接把这条链路的数据写给 Kubernetes API。
箭头表示日志流入采集器,实际由节点 Tail 输入读取文件并按位点续读。
使用专用 ServiceAccount 按实际插件需要读取对象信息,限制标签扩展和 API 请求开销。
分别保存读取位置和文件系统缓冲,不能清空状态来强制恢复,否则可能重复或跳过记录。
由采集器输出插件发送有界缓冲事件,认证或证书失败应明确阻断而不是跳过验证。
后端按权限返回日志,前端命名空间筛选不能代替数据访问隔离。
将获准节点范围、只读目录、字段脱敏和独立输出凭据应用到试点采集器。
对写入范围、查询角色和生命周期做后端实际验证,防止错误字段或索引数量无界扩展。
hostPath 可跨采集器重建保留,但节点磁盘损坏仍可能丢失未发数据;源端轮转、缓冲上限和后端留存需一起评估。
只有此前已送达且未到期的数据能在后端检索;需用事件 ID 核对重复与缺失,不承诺严格恰好一次。
本链路不默认覆盖审计日志、节点 journal 或私有文件,也不因为添加 Kubernetes 标签就自动建立多租户授权。
图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。
建议应用将日志写入标准输出和标准错误,由节点上的 Fluent Bit DaemonSet 读取 CRI 格式日志、关联 Kubernetes 元数据,再通过受认证的 TLS 链路写入 Elasticsearch,在 Kibana 中按环境和命名空间检索。节点日志与集中存储采用独立生命周期,Pod 删除后能否检索取决于日志此前是否已送达后端。
本方案覆盖容器应用日志,不默认包含 Kubernetes 审计日志、节点 journal 或应用私有文件。应另行确认脱敏、业务租户隔离与留存要求,不能仅用前端查询过滤代替后端授权。采集端重试、轮转和故障恢复可能造成重复或缺口,需通过测试测量,不承诺严格恰好一次。所有 <...> 均为需要替换的占位符,关联工具是方案建议。
约定样本日志应在目标时间内可按集群、命名空间、Pod 和容器检索;建议先将 60 秒作为小流量试点目标。多行、轮转、Pod 重建与短时后端中断均需留有测试记录,核对唯一事件 ID 的完整性和重复量,确认凭据不外泄、越权查询被拒绝、资源和磁盘缓冲不超预算。
核对 kubeconfig 指向的集群与当前身份,再统计试点节点、命名空间、运行时及日志产生速率;将应用标准输出、文件日志和审计日志分别登记。下面命令只读取指定集群的状态,<CONTEXT> 必须替换为已核实的上下文名称。抽样内容只在授权范围检查并先脱敏,避免在调试记录里复制用户数据、访问令牌或业务机密。
kubectl config current-context
kubectl --context='<CONTEXT>' get nodes -o wide
kubectl --context='<CONTEXT>' get namespaces集群上下文、节点角色、运行时和试点范围记录一致,各类日志均有明确负责人和留存要求。统计样本包含峰值量级及敏感字段,确认需要回收的临时调查权限,不将未授权命名空间纳入首批。
本步骤不改变集群。若上下文或日志权限不明确,停止后续部署并保留资产级调查结果;删除工作笔记中意外复制的敏感样本,仅留脱敏结构,按现有机制处理临时凭据。
给采集器配置独立 ServiceAccount,依据实际元数据查询范围授予 get/list/watch 等必要权限;配置 Secret 只供输出插件使用,避免写进镜像和 ConfigMap。节点日志目录只读挂载,缓冲与 offset 使用独立目录,按集群策略评审 hostPath 例外。下例 <LOG_NAMESPACE> 和 <SERVICE_ACCOUNT> 都是计划使用的真实名称,命令只查询授权;模拟身份需调用者已有相应 impersonate 权限。
kubectl --context='<CONTEXT>' auth can-i list pods --all-namespaces --as='system:serviceaccount:<LOG_NAMESPACE>:<SERVICE_ACCOUNT>'元数据所需权限可用,Secret、工作负载写操作和其他无关权限没有扩大。试点节点能够以只读方式读取预期日志,采集器可写自己的状态目录,准入策略例外和凭据轮换负责人均有记录。
撤销本次新增的角色绑定及不必要的准入例外,恢复原采集器权限配置。不要为解决权限失败临时授予 cluster-admin;如服务账号已投入试点,先停用该批采集再收回其必需权限。
选取正常单行、JSON、多行堆栈和超长行样本,按实际容器运行时设置 CRI 解析及多行规则。统一事件时间、时区、集群名和命名空间字段,限制 Kubernetes 标签扩展范围;保留原始正文的策略需与脱敏要求一致。对异常解析设置可查询的失败标记或受控隔离路由,避免无提示丢弃。先在隔离样本环境验证,再将解析器纳入版本管理。
每类样本的时间、正文和 Kubernetes 身份字段正确,多行事件不会把不同容器的输出拼接。解析失败能被统计和定位,敏感字段按约定处理,新增标签不会导致索引映射或字段数量无界增长。
恢复上一版解析器与字段映射,将新链路限于测试输入;如已写入错误结构,保留明确标记并按索引级方案修复。不要通过删除生产索引解决解析问题,先确认原始日志仍可用于受控重处理。
为每个 Tail 输入保留独立 offset 数据库,明确首次发现文件是从头补读还是只读新增;已有 offset 时的恢复行为应通过重启测试确认。配置独立 filesystem 缓冲、输出队列限额、重试和丢弃告警,估算可承受的后端中断时长。注意输出达到容量限制后可能淘汰旧 chunk,不能把设置限额理解为不会丢数据;节点日志轮转也必须与缓冲预算一并评估。
重启测试后的读取位置符合预期,offset 和缓冲目录跨采集器重建仍可访问。记录队列容量、磁盘余量、失败重试及丢弃计数的观察入口;按样本峰值计算的中断容忍时间得到负责人确认。
停用新增输入或恢复上一版缓冲配置,保留正在使用的 offset 与未发送数据。不要清空状态目录强制重采;需改变首次读取行为时,先隔离旧状态并评估重复量和后端容量,再在测试范围验证。
先建立试点索引或数据流的字段模板、保留策略、写入账号与只读查询角色,再配置输出端的证书信任和认证;凭据通过 Secret 注入并控制读取范围。将集群与环境作为稳定分区维度,避免按每个 Pod 建立索引。为 Kibana 配置明确时间字段及保存的检索视图,跨租户边界在后端授权中验证;历史数据回灌需要独立容量计划,不与实时接入一起扩大。
授权采集器可以写入指定范围,查询账号可看到应有日志且不能读取其他受限范围;错误凭据和无效证书会失败。索引字段、保留策略和查询时间轴正确,新增数据不会触发未规划的索引数量增长。
恢复旧输出目标并停用新写入凭据,保留已写入的试点数据供排错;只有确认不含正式数据后才按既定保留策略清理。撤回新增的宽泛读权限,检查回退过程没有把凭据写进日志。
先用节点标签或受控调度范围将 DaemonSet 限定在试点节点,并明确如何恢复原调度条件;设置资源请求、限制和升级批次。对比采集器启动前后的 CPU、内存、日志磁盘水位及后端写入速率,排除采集器读取自身日志造成的反馈放大。观测元数据查询对 API Server 的影响,确认边缘节点、污点和不同节点池的调度差异,再逐组推广。
试点节点各有预期数量的采集实例,其他节点未被意外覆盖;采集器无持续重启、OOM 或未解释的权限报错。日志延迟与资源使用满足预定预算,后端写入拒绝和缓冲积压能及时被发现。
停止扩大节点范围,将最近一批 DaemonSet 配置恢复到已验证版本并保留状态目录。出现节点资源压力时优先降低本批采集负载,确认原业务运行;旧采集链路继续保留,避免全节点同时失去日志入口。
使用带唯一事件 ID 的脱敏测试流,覆盖日志轮转、Pod 重建、采集器重启和短时后端中断;测试仅在批准的试点范围执行,并设置最大时长和磁盘停止阈值。恢复后按 ID 核对样本总数、重复数及时间顺序,验证积压可排空而不超资源预算。交接检索方法、字段字典、容量预警、丢弃处置与回退清单,明确未能覆盖的日志类型。
每类演练附有输入样本范围、时间和检索证据,采集延迟达到约定目标;丢失或重复均有量化结果与原因记录。授权隔离和敏感字段检查通过,值班人员能够区分应用无日志、节点未读到和后端未入库。
结束测试流并恢复被暂时隔离的试点输出链路,确认缓冲排空和测试标识可追溯。若轮转或恢复造成不可解释缺口,停止推广,恢复原采集配置并保留状态与后端证据,不以反复重启掩盖问题。