本章节介绍如何安装升级与配置 LogCollector:
LogCollector 支持日志文件轮转场景下的日志采集。
- (推荐)rename 日志文件轮转:当日志文件达到一定大小或时间限制时,将当前的日志文件重命名为一个新的文件名,例如添加时间戳或序号,然后创建一个新的日志文件,并继续写入新的日志。例如原日志文件为 bar.log,轮转后会生成 bar.log.1、bar.log.2 等日志文件。
- LogCollector 会自动识别轮转前后的日志文件,保证日志的完整性。
- 如果日志文件轮转过于频繁,导致短时间内轮转创建大量的日志文件,那么 LogCollector 仅同时采集 20 个轮转日志文件,超过 20 个的轮转日志无法被采集,可能导致部分轮转日志文件尚未被采集就被删除,从而导致日志丢失。
- copytruncate 日志文件轮转:当日志文件达到一定大小或时间限制时,将当前的日志文件复制到一个新的日志文件中,例如添加时间戳或序号,然后清空原日志文件,并继续写入新的日志。例如原日志文件为 bar.log,轮转后会生成 bar.log.1、bar.log.2 等日志文件。
- 假设配置的采集路径是 bar.log,当 LogCollector 存在采集延迟时,copytruncate 日志文件轮转会导致延迟采集的日志丢失。
- 假设配置的采集路径是 bar.log*,copytruncate 日志文件轮转会导致已经采集过的日志重复采集。
LogCollector 使用轮询机制和事件监听机制来进行日志采集,一般情况会在 3 秒内将日志发送日志服务。
Logcollector 的采集性能与分配的系统资源和采集模式相关,具体参考推荐参数值。 修改 LogCollector 采集配置后多久生效?
您在 TLS 控制台修改 LogCollector 采集配置后,LogCollector 将在 1 分钟内加载新的配置并生效。
机器组显示的 LogCollector 心跳 IP 为什么不准确?
默认情况下 LogCollector 将第一张网卡 IP 地址作为宿主机或容器 IP 地址,您可以调整为读取指定网卡 IP 地址或根据一定顺序获取 IP 地址。详细说明请参考策略说明。 在 Kubernetes 场景下,LogCollector 默认会使用 Pod IP 地址作为心跳的 IP 地址上报到日志服务。如果您需要使用节点 IP 地址作为 LogCollector 心跳 IP 地址,可以修改 LogCollector daemonset 配置文件,增加两个配置项 hostNetwork: true 和 dnsPolicy: ClusterFirstWithHostNet。
如何检查容器 LogCollector 运行状态?
如果容器的 LogCollector 心跳状态异常,往往需要首先排查对应 Pod 的 LogCollector 运行状态。如果运行状态为 Running,表示已成功安装 LogCollector,且 LogCollector 正常运行中。其他的 LogCollector 状态表示安装或运行异常,可参考本文档进行问题排查。
登录 Kubernetes 集群后,执行以下命令查看 LogCollector 的运行状态。
在以下示例中,Daemonset 的名称是 log-collector,所属的 namespace 是 tls-log。
如果回显信息显示 STATUS 字段值全部为 Running,表示当前 Kubernetes 集群已经成功安装 LogCollector,且运行状态正常。如果没有状态信息,或状态为 Evicted 等其他值,请参考处理方案进行进一步排查。
问题现象:回显信息中 NAME 字段没有名为 “log-collector-xxxxx” 的 Pod。
问题原因:该 Kubernetes 集群尚未安装 LogCollector。
处理方案:
说明
请确保按照日志服务所在地域和网络类型正确安装 LogCollector。
- 再次执行以下命令检查 LogCollector 运行状态。Status 显示为 Running 表示安装成功。
问题现象:回显信息中,指定 Pod 的 Status 字段显示为 Evicted。
问题原因:Pod 状态为 Evicted,说明节点存在污点,并且 LogCollector Daemonset 没有设置容忍度,导致 LogCollector Pod 无法调度到这个节点。污点及容忍度说明请参考 Kubernetes 官网文档。 处理方案:
为 LogCollector Daemonset 设置容忍度。假设节点存在一个键是 key1,值是 value1,效果是 NoSchedule的污点:key1=value1:NoSchedule,表示只有拥有和这个污点匹配的容忍度的 Pod 才能够被调度到这个节点。
- 在 logcollector_ds.yaml 中为 LogCollector Daemonset 设置容忍度。
- 在 logcollector_ds.yaml 中的 spec.template.spec 部分,添加以下容忍度可以匹配节点的污点 key1=value1:NoSchedule,进而保证 LogCollector Pod 能够被调度到这个节点。
- 再次执行以下命令检查 LogCollector 运行状态。Status 显示为 Running 表示安装成功。