【最佳实践】使用CloudLens排查iLogtail重启问题

简介: 本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:iLogtail异常重启问题。


1. 目标读者

数字化系统开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。

2. 背景介绍

iLogtail 是阿里云日志服务(SLS)团队自研的可观测数据采集 Agent,拥有的轻量级、高性能、自动化配置等诸多生产级别特性,可以署于物理机、虚拟机、Kubernetes 等多种环境中来采集遥测数据。目前 iLogtail 已有千万级的安装量,每天采集数十 PB 的可观测数据,广泛应用于线上监控、问题分析/定位、运营分析、安全分析等多种场景,在实战中验证了其强大的性能和稳定性。

CloudLens for SLS是日志服务推出的一款应用,帮助用户监控和管理日志服务Project、Logstore等资产,提升用户对日志服务资产的管理效率、快速了解其消耗情况。

3. 使用场景

文件日志采集是日志采集Agent最常见的数据采集场景,iLogtail目前支持主机上文件采集以及容器场景下的文件采集。但是文件采集在实战中会遇到各种各样的问题,基于此场景,CloudLens for SLS集成了针对iLogtail的状态监控,可以实时的反馈当前iLogtail Agent的运行状况。

本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:iLogtail异常重启问题

4. 问题描述

4.1 问题发现

CloudLens for SLS页面,点击报表中心下采集监控,然后查看iLogtail异常监控-Logtail重启列表(必须处理)

image.png

里面会展示当前project下,有重启的iLogtail信息,包括最近重启时间、主机名、IP、当前iLogtail的CPU占用、内存占用、包含的采集配置数和重启次数。

如果是手动重启,这里的信息可以忽略,但是如果是非手动的异常重启,那么就会带来如下的一些问题。

4.2 问题影响范围

  1. 容器场景下,如果checkpoint没有持久化,那么iLogtail重启之后,checkpoint会丢失,这样有可能会导致日志采集重复或者采集丢失

  2. 主机场景下,CPU或者内存过高,导致iLogtail重启,也会导致有少量数据重复。

  3. 如果重启频率过高,会影响数据采集,比如日志不能被及时采集,有可能会导致比较大的采集延迟。

5. 具体场景与方案建议

5.1 场景一:主机场景下CPU过高或者内存过高导致iLogtail主动重启

问题原因

为了控制资源占用,iLogtail会限制自己所占用的CPU和内存,CPU使用率、内存使用率跟数据量、计算量息息相关,在数据量比较大的情况下,有可能会超过设置的CPU或者内存限制,当iLogtail感知到资源超限之后,会主动重启,来确保自己的资源占用不会过高。

image.png

比如iLogtail配置里,cpu限制为0.4,内存限制为512,实际使用内存一旦超过512,iLogtail就会主动重启。

如何定位

通过CloudLens For SLS 查看iLogtail的CPU和内存占用

image.png

image.png  image.png

解决方案

调整CPU和内存配置:参考推荐参数

5.2 场景二:K8s DeamonSet场景下CPU过高或者内存过高导致K8s强制重启iLogtail容器

问题原因

比如K8s的内存配置的是512MB, 但是iLogtail的配置里,内存却配置了1024MB。这种情况下,当数据量过大的情况下,iLogtail使用的内存超过512MB之后,K8s会主动把容器重启,从而导致iLogtail被动重启。

image.png  image.png

如何定位

查看logtail-ds页面,发现有Pod重启

image.png

点击详情,查看事件,发现里面有PodOOMKilling的事件,就说明是内存OOM导致K8s强制重启iLogtail容器

image.png

解决方案

  1. 为了减少主动重启带来的数据重复或者丢失现象,推荐使用iLogtail采集进度持久化

  2. 调整CPU和内存配置。K8s场景DaemonSet模式下需要修改两个地方

    1. alibaba-log-configuration里的cpu-core-limit和mem-limitimage.png

    2. logtail-ds里的的资源限制image.png

修改完之后,需要重启下logtail-ds才能生效。

5.3 场景三:K8s 场景下livenessProbe失败导致K8s强制重启iLogtail容器

问题原因

K8s场景下,iLogtail有两种探测方式:

命令行探测:

        livenessProbe:
          exec:
            command:
            - /etc/init.d/ilogtaild
            - status
          initialDelaySeconds: 30
          periodSeconds: 30

该方式为最基础的探测方式,各种场景下通用,如果出现异常,则证明iLogtail主进程有异常。

Http请求探测:

          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /liveness
              port: 7953
              scheme: HTTP
            initialDelaySeconds: 35
            periodSeconds: 60
            successThreshold: 1
            timeoutSeconds: 1

该方式有一定的条件限制,目前在iLogtail DeamonSet模式下适用,默认对于Sidecar模式不适用

如何定位

Sidecar模式部署iLogtail,查看业务Pod页面,发现有重启现象

image.png

点击详情,查看事件,发现里面有iLogtail的probe failed的事件,且重启的原因是因为探测失败。

image.png

解决方案

选择合适的探测方式。如果是Sidecar的部署方式,请使用命令行探测方式。详细配置参考文档

5.4 场景四:长时间通信失败

问题原因

iLogtail会定期监测自己与外界的网络请求情况。

  • iLogtail会定时与ConfigServer通信,用来获取最新的采集配置,如果由于网络问题,导致iLogtail长时间(1h)获取不到采集配置,iLogtail会主动重启。

  • iLogtail长时间(12h),没有成功发送数据,iLogtail会主动重启

如何定位

在/usr/local/ilogtail/ilogtail.LOG文件里搜索关键字:prepare force exit,如果能够搜到内容,则说明出现该问题。

解决方案

排查网络问题,确保iLogtail跟SLS网络通畅

5.5 场景五:被外部误杀进程

问题原因

iLogtail启动的时候,会运行两个进程,第一个是守护进程,第二个是主进程

image.png

如果主进程被杀掉,守护进程会把主进程再拉起来。

比如我们手动把主进程杀掉

image.png

可以看到守护进程又拉起了另外一个主进程

image.png

如何定位

排查是否有误杀iLogtail的脚本或程序

解决方案

修复脚本或者程序,将iLogtail进程排除在管控范围之外

6. 参考资料

关于iLogtail

iLogtail作为阿里云SLS提供的可观测数据采集器,可以运行在服务器、容器、K8s、嵌入式等多种环境,支持采集数百种可观测数据(日志、监控、Trace、事件等),已经有千万级的安装量。目前,iLogtail已正式开源,欢迎使用及参与共建。

GitHub

官网

钉钉群:iLogtail社区

image.png

作者介绍
目录