Ubuntu 22.04 运行 Filebeat 7.11.2 崩溃问题分析及解决文档
一、问题概述
环境配置:Ubuntu 22.04 系统 + Filebeat 7.11.2 版本
问题现象:Filebeat 启动后运行一段时间突然中断,报错信息如下:
runtime/cgo: pthread\_create failed: Operation not permitted

二、问题根源分析
经排查,问题核心源于系统 GLIBC 版本与 Filebeat 安全策略不兼容:
-
Ubuntu 22.04 系统自带 GLIBC 2.35 版本,创建线程时会强制调用 `rseq` 系统调用,用于优化线程本地存储访问性能;
-
Filebeat 7.11.2 为老版本,其内置的 seccomp(安全计算模式)策略中,未将 `rseq` 纳入允许调用的列表;
-
当 GLIBC 2.35 尝试调用 `rseq` 时,被 seccomp 策略拦截,系统直接终止 Filebeat 进程,导致崩溃。

三、解决思路
针对上述冲突,提供两种解决方式,按需选择即可:
-
保留安全策略,仅放行 `rseq`(推荐,兼顾安全与兼容);
-
完全关闭 seccomp 安全检查(快捷方式,适合测试/紧急恢复场景);
-
升级 Filebeat 至 7.17.2 及以上版本(彻底解决兼容问题,本文不展开)。
本文重点讲解两种核心解决方式的完整操作流程。
四、具体解决步骤
方式1:保留安全策略,仅放行 rseq 调用(推荐)
步骤1:配置 Filebeat 配置文件
编辑 `/usr/local/filebeat/filebeat.yml` 配置文件,添加日志采集配置及 seccomp 放行配置,完整配置内容如下:
yaml
# cat /usr/local/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app.log
fields:
log_source: app-log
log_type: app-log
output.redis:
hosts: ["192.168.168.168:6379"]
key: "app-log"
# 放行 rseq 系统调用,保留其他安全规则
seccomp:
default_action: allow
syscalls:
- action: allow
names: [ rseq ]
步骤2:后台启动 Filebeat 服务
执行以下命令,以守护进程形式启动 Filebeat,确保终端关闭后服务仍能运行,并将所有日志(标准输出+标准错误)写入指定文件,使配置生效:
bash
# 停止已运行的 Filebeat 进程(若有)
pkill filebeat
# 后台启动 Filebeat
nohup /usr/local/filebeat/filebeat -e -c /usr/local/filebeat/filebeat.yml > /var/log/filebeat.log 2>&1 &
方式2:完全关闭 seccomp 安全检查(快捷方式)
步骤1:配置 Filebeat 配置文件
编辑 `/usr/local/filebeat/filebeat.yml` 配置文件,在末尾添加 seccomp 关闭配置,完整配置内容如下:
yaml
# cat /usr/local/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app.log
fields:
log_source: app-log
log_type: app-log
output.redis:
hosts: ["192.168.168.168:6379"]
key: "app-log"
# 完全关闭 seccomp 安全检查,快速解决兼容问题
seccomp:
enabled: false
步骤2:后台启动 Filebeat 服务
执行与方式1相同的后台启动命令,确保服务稳定运行:
bash
# 停止已运行的 Filebeat 进程(若有)
pkill filebeat
# 后台启动 Filebeat
nohup /usr/local/filebeat/filebeat -e -c /usr/local/filebeat/filebeat.yml > /var/log/filebeat.log 2>&1 &
五、验证方法
两种方式配置完成并启动后,均可通过以下命令验证进程状态与日志,确认配置生效且无报错:
bash
# 查看 Filebeat 进程状态
ps -ef | grep filebeat
# 实时查看 Filebeat 运行日志,确认无崩溃报错
tail -f /var/log/filebeat.log
若进程正常运行,且日志中无 `runtime/cgo: pthread_create failed: Operation not permitted` 报错,说明问题已成功解决。
六、注意事项
-
方式1(放行 rseq)兼顾安全性与兼容性,是生产环境的首选方案;
-
方式2(关闭 seccomp)会降低 Filebeat 的安全防护能力,不建议在生产环境长期使用,仅适合测试或紧急恢复场景;
-
若长期使用 Filebeat,建议逐步升级至 7.17.2 及以上版本,从根本上解决该版本与高版本 GLIBC 的兼容问题;
-
若配置后仍出现异常,可检查日志是否存在配置格式错误、Redis 连接失败等问题,同步排查权限与网络问题。