容器日志:故障排查与值班交接
从源端事件追踪到后端拒绝和磁盘阻塞,明确位点保全、缺口判定及日志完整性交接。
状态与事件边界
状态:PENDING(待目标环境验证)。本篇补充日志故障的判断分支与交接材料,不代表已部署采集器或完成丢失测试。开始前核验集群 context、节点、命名空间、后端形态和版本,登记事件标识、最后可检索时间与源端保留期限;日志正文只能在授权范围脱敏抽样。
将“查询无结果”和“已经丢失”分开记录。前者可能是时间字段或权限问题,后者需要源端、位点、缓冲和后端证据共同确认。配套基线见运行维护。
只读取证与时间轴
下例只读取指定采集 Pod,不执行 exec、不重建工作负载。只有容器确实发生过重启才查看 previous;没有上一实例日志应记为证据缺失,而不是采集正常。
kubectl config current-context
kubectl --context='<CONTEXT>' -n '<LOG_NAMESPACE>' get pod '<COLLECTOR_POD>' -o wide
kubectl --context='<CONTEXT>' -n '<LOG_NAMESPACE>' logs '<COLLECTOR_POD>' -c '<COLLECTOR_CONTAINER>' --since=10m --tail=200 --timestamps
kubectl --context='<CONTEXT>' -n '<LOG_NAMESPACE>' logs '<COLLECTOR_POD>' -c '<COLLECTOR_CONTAINER>' --previous --tail=100 --timestamps保留事件时间、采集器错误时间和后端响应时间,勿依靠日志行顺序推定全局顺序。kubectl logs 文档说明了时间、条数和上一容器实例的范围限制;结果可能不包含已经轮转的历史。
分支一:源端有事件但链路没有记录
先确认应用输出位置属于批准范围,再核对采集 Pod 所在节点、Tail 路径和解析规则。单个容器缺失而同节点其他容器正常时,优先检查多行、超长行、路径和标签过滤;整节点缺失时检查采集调度及挂载权限。
源日志已删除且队列没有副本时,应登记不可重放的时间范围。不能删除位点数据库“重新来一次”:这可能重复历史数据,也无法恢复不存在的正文。抽样能检索到并不意味着同批其余事件完整。
分支二:后端重试、认证或映射拒绝
对照现有监控中的输入、成功输出、重试和重试耗尽增量,区分无输入与有输入但无法送达。Fluent Bit 的部分失败计数按 chunk 而非记录计数,不能直接当成丢失事件数,见内部监控指标。
- 401/403:核对写入身份、目标范围和最近轮换,交给权限负责人,不扩大为管理员。
- 400:保存脱敏错误类型和字段名,检查模板与字段契约;反复重试相同错误不能修复映射。
- 429:区分线程池、内存断路器等拒绝原因,按Elastic 拒绝请求说明评估负载与后端能力,不能只提高采集并发。
分支三:磁盘阻塞或看板“漏数据”
有磁盘水位错误时,在已认证且获准监控的 Dev Tools 中读取目标索引状态;不执行删除或集群设置修改。
GET /_cluster/health/<AUTHORIZED_INDEX>?level=indices
GET /<AUTHORIZED_INDEX>/_settings/index.blocks.read_only_allow_delete写保护需结合节点磁盘与分片分配判断,处置原则见 Elastic 水位错误。仅取消写保护而不解决磁盘问题不是恢复。后端有事件而 Kibana 无结果时,比较索引范围、时间字段、时区及查询身份;不要用更宽权限掩盖隔离问题。
风险动作与恢复门槛
重启、扩大缓冲、调整重试、变更索引模板、降低输入量或解除写保护,都要先审批影响范围和回退条件。不得清空缓冲、位点或索引。输出队列达到上限可能淘汰旧 chunk,详见 Fluent Bit 4.2 缓冲机制,实际环境须核对对应版本。
恢复后观察积压是否持续下降、源端是否仍保留待发送数据,按唯一标识核对缺失和重复;同时确认延迟、节点空间、拒绝增量和越权查询结果。队列排空不证明无丢失,所有不可重放缺口须由日志使用方知悉并签收。
值班交接模板
状态:PENDING / 排查中 / 观察中 / 已验收(附证据)
集群、节点、命名空间、组件与配置版本:待填写
故障开始、最后正常事件、源端保留截止:待填写
诊断分支、错误类型、脱敏样本位置:待填写
积压趋势、缺失范围、重复数及统计口径:待填写
批准动作、状态目录保留、恢复点:待填写
未完成验收、接班人、下次检查及升级人:待填写完整性结论及风险必须分别填写,集中日志设计可继续参考知识文章。