对于Flink,Spark在Yarn上提交的LongTime Job(比如一个批处理作业要运行几个小时或者本身就是实时作业),其作业的运行日志我们不能等到作业结束后,通过Yarn日志聚合后查看,我们希望作业提交后就能够马上看到运行日志( 这里注意,你的作业被调度到集群的各个计算节点中,比如你的集群有100个节点,你的作业可能被调度到几十个个节点中),如何能够实时方面的查看所有节点产生的日志呢?
# 总体思路,无论是spark,flink 都使用log4j记录日志,只不过默认输出是Console和文件,我们通过定义 log4j文件,将日志实时发送到一个位置,集中管理
* 方案1: 定义log4j KafkaAppender, 将日志异步发送到Kafka,之后可以将数据发送到ES,通过Kibana查看即可
* 方案2: 定义log4j SyslogAppender,将日志发送到rsyslog服务器(基于UDP传输,更高效),所有节点日志可以落到本地文件,这样可以在这里通过文件查看日志,当然也可以接上ELK这一套。
# 方案1比方案2要重一些,因为你需要Kafka集群,而rsyslog非常轻量,并且数据通过UDP协议传输更为高效。