1. 程式人生 > >用Fluentd實現收集日誌到HDFS(上)

用Fluentd實現收集日誌到HDFS(上)

版權宣告:本文來自行者(http://blog.csdn.net/liuyuan185442111),轉載請註明出處。 https://blog.csdn.net/liuyuan185442111/article/details/47057571

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 startservice 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>

---------------------

本文來自 liuyuan185442111 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/liuyuan185442111/article/details/47057571?utm_source=copy 

當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>

---------------------

本文來自 liuyuan185442111 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/liuyuan185442111/article/details/47057571?utm_source=copy 

重啟Hadoop,新建一個目錄用來存放日誌:

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

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

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

---------------------

本文來自 liuyuan185442111 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/liuyuan185442111/article/details/47057571?utm_source=copy 

當td-agent與namenode在一臺物理機上時可以正常執行,當不在一臺物理機上時,報“Connection refused”錯誤。

參考文獻

接下來: td-agent與namenode是否必須在一臺物理機上? 現在採用了append的方式,對於HDFS來說效率較低,可以設定一箇中間節點,收集了其他節點的日誌之後,彙總成大檔案,然後上傳到HDFS。 td-agent的配置檔案格式。 File Input和WebHDFS Output的具體細節。