對于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協議傳輸更為高效。