EMR Flink集群本地日志路径配置、保留必要性及清理方案咨询
EMR Flink本地日志相关问题解答
1. 本地日志路径配置位置
Flink写入/usr/lib/flink/log/路径的配置主要由两处决定:
- 第一是Flink配置目录下的日志框架配置文件,默认路径为
/usr/lib/flink/conf/log4j.properties(log4j2版本对应log4j2.properties),文件中FILE类型的appender会指定日志输出的路径模板,默认会读取环境变量FLINK_LOG_DIR作为根目录 - 第二是Flink守护进程启动脚本中定义的
FLINK_LOG_DIR环境变量,EMR默认在/usr/lib/flink/bin/flink-daemon.sh中会将该变量默认值设置为/usr/lib/flink/log,你也可以在启动Flink服务前手动导出该环境变量覆盖默认值
2. 日志已同步S3时是否需要保留本地日志
- 如果你没有本地实时排查问题的需求,且确认EMR的日志同步服务已经将完整日志上传到S3路径,完全不需要长期保留本地日志
- 如果需要快速定位实时运行的作业问题,可选择保留最近数小时的本地日志,不需要永久存储
3. 本地日志关闭/自动清理方案
3.1 禁用本地日志写入注意事项
不建议直接禁用本地日志写入:EMR的日志同步组件是基于本地日志文件做采集上传的,如果你直接移除log4j配置中的本地文件appender,会导致日志无法同步到S3。如果确实不需要本地日志,可先确认关闭日志同步功能后,再修改log4j配置删除FILE输出通道,仅保留控制台输出即可。
3.2 自动清理实现方案
Flink本身没有内置类似Spark历史服务的自动清理配置,推荐两种成熟的实现方案:
- 使用系统自带logrotate服务(推荐):新增配置文件
/etc/logrotate.d/flink,示例配置如下:
/usr/lib/flink/log/*.log { hourly rotate 12 missingok notifempty compress delaycompress copytruncate }
以上配置表示每小时轮转一次日志,最多保留12个轮转后的日志文件,超过自动删除,适配你提到的12小时保留时长的需求。
- 使用crontab定时任务:新增定时任务每小时执行一次清理,示例命令如下:
0 * * * * root find /usr/lib/flink/log/ -name "*.log" -type f -mmin +720 -delete
该命令会自动删除修改时间超过12小时的日志文件。
另外你当前配置中作业归档是存放在HDFS的hdfs:///completed-jobs/路径,如果需要清理这部分过期作业归档,也可以自行编写定时脚本,扫描该目录下超过保留时长的作业目录直接删除即可。
内容的提问来源于stack exchange,提问作者Even
相关产品推荐
相关产品推荐

