天天看點

用Fluentd實作收集日志到HDFS(上)安裝啟動配置輸出到HDFS參考文獻

Fluentd是一個實時日志收集系統,它把日志作為JSON stream,可以同時從多台server上收集大量日志,也可以建構具有層次的日志收集系統。

Fluentd易于安裝,有靈活的插件機制和緩沖,支援日志轉發。它的特點在于各部分均是可定制化的,可以通過簡單的配置,将日志收集到不同的地方。

Fluentd通過hadoop中的webHDFS與HDFS進行通信,是以在配置Fluentd時,一定要保證webHDFS能正常通信。

系統環境:CentOS 6.5

叢集環境:Hadoop 2.2.0

參考Fluentd官網。

安裝

td-agent是Fluentd的一個穩定版本。

CentOS下可以直接運作以下指令安裝:

curl -L https://td-toolbelt.herokuapp.com/sh/install-redhat-td-agent2.sh | sh
           

啟動

管理腳本是:

/etc/init.d/td-agent

可通過

/etc/init.d/td-agent start

service td-agent start

來啟動

配置檔案:

/etc/td-agent/td-agent.conf

重新加載配置檔案:

service td-agent reload

td-agent的日志檔案:

/var/log/td-agent/

配置

Fluentd自帶多個輸入插件和輸出插件,這裡先實作收集本地日志到本地檔案。

## File input
<source>
  type tail
  path /var/log/mytemp.log
  pos_file /var/log/td-agent/mytemp.log.pos
  format none
  tag td.temp
</source>
#其中:
#1.type tail: tail方式是Fluentd内置的輸入方式,其原理是不停地從源檔案中擷取新的日志,相當于tail –f指令。
#2.path: 指定日志檔案位置。
#3.pos_file:存儲path中日志檔案狀态的檔案。
#4.format none: 指定使用何種日志解析器。
#5.tag: tag被用來對不同的日志進行match。

## File output
<match td.temp>
  type file
  path /var/log/td-agent/access
</match>
           

當mytemp.log有更新時,更新内容會添加到access檔案中。

輸出到HDFS

然後我嘗試将收集的日志存放到HDFS上。

Fluentd通過webhdfs與HDFS通信,是以需要開啟webhdfs。

設定Hadoop,修改配置檔案hdfs-site.xml,加入:

<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>

<property>
  <name>dfs.support.append</name>
  <value>true</value>
</property>

<property>
  <name>dfs.support.broken.append</name>
  <value>true</value>
</property>
           

重新開機Hadoop,建立一個目錄用來存放日志:

hadoop fs -mkdir /log/
hadoop fs -chmod  /log/
           

td-agent配置檔案中source部分不變,修改match部分:

<match td.temp>
  type webhdfs
  host namenodehost
  port 
  path /log/a.log
  flush_interval s
</match>
# flush_interval辨別資料寫入HDFS的間隔
           

當td-agent與namenode在一台實體機上時可以正常運作,當不在一台實體機上時,報“Connection refused”錯誤。

參考文獻

fluentd官方文檔

http://docs.fluentd.org/articles/quickstart

Fluentd+Hadoop結合進行日志收集、分析

http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=5636

接下來:

td-agent與namenode是否必須在一台實體機上?

現在采用了append的方式,對于HDFS來說效率較低,可以設定一個中間節點,收集了其他節點的日志之後,彙總成大檔案,然後上傳到HDFS。

td-agent的配置檔案格式。

File Input和WebHDFS Output的具體細節。