fluentd 介紹


Fluentd是一個開源的數據收集器,專為處理數據流設計,有點像 syslogd ,但是使用JSON作為數據格式。它采用了插件式的架構,具有高可擴展性高可用性,同時還實現了高可靠的信息轉發。

據分(Y)析(Y),Fluentd是由Fluent+d得來,d生動形象地標明了它是以一個守護進程的方式運行。官網上將其描述為data collector,在使用上,我們可以把各種不同來源的信息,首先發送給Fluentd,接着Fluentd根據配置通過不同的插件把信息轉發到不同的地方,比如文件、SaaS Platform、數據庫,甚至可以轉發到另一個Fluentd。

總結一下,數據流殊途,同歸與Fluentd,Fluentd做一些諸如過濾、緩存、路由等工作,將其轉發到不同的最終接收方。

用Fluentd處理數據還能保證一定的實時性,其提供種類豐富的客戶端lib,很適合處理單位時間emit出log數量巨大的場景。從v10后,Fluentd 不支持 Windows。

其采用Ruby編寫,比較注重性能的地方采用C編寫,Ruby的創始人松本老師這樣評價Fluentd:

Fluentd proves you can achieve programmer happiness and performance at the same time. A great example of Ruby beyond the Web.

Heroku的聯合創始人Adam Wiggins說的挺有道理:

Logs are streams, not files. I love that Fluentd puts this concept front-and-center, with a developer-friendly approach for distributed systems logging.

更多信息請看 這里 

 

 

安裝

安裝前的准備工作

  1. 安裝 ntpd

    ntpd ,以d結尾,是一個守護進程,全稱是Network Time Protocol (NTP) daemon,它通過與一個Internet標准時鍾服務器同步來維護系統時鍾,同時也可以將本機做為一個時鍾服務器對外提供時鍾同步服務。更多信息請man一下ntpd。

    安裝ntpd是為了防止Fluentd在收集log的時候出現非法的時間戳。

增加系統文件描述符的最大數量

通過ulimit查看當前的文件描述符的最大數量:

$ ulimit -n
如果是1024,那是遠遠不夠的,將下面4行添加到 /etc/security/limits.conf 中,重啟機器。

root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536
之后用ulimit查看,應該是65536了。

 

(Optional)優化機器內核TCP/IP參數

如果Fluentd處於一個高負載的運行環境,比如一個機器中運行了多個Fluentd實例,那么最好將下面的參數添加到 /etc/sysctl.conf 中:

net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240    65535

  

然后執行 sysctl -或者重啟機器使之生效。

這個跟TCP/IP的細節有關系,我沒有深究,貌似是為了防止短連接數過多,機器處於 TIME_WAIT 狀態的TCP連接數過多,開啟快速回收與重用。具體請參考 這里 

 

安裝Fluentd

寫在前面

有 很多種方式 來安裝Fluentd,比如通過Ruby的Gem,以及Ubuntu的deb、OS X的Homebrew。

采用Ruby的Gem安裝比較簡單,安裝的是基本版的Fluentd,即不自帶 /etc/init.腳本,在運行時內存分配采用的是操作系統默認的方式;

而采用.rpm/.deb for Linux的方式安裝呢,安裝的是一個由 Treasure Data, Inc 維護的穩定版本Fluentd,又被稱為td-agent。為了保持一個良好的靈活性,Fluentd采用Ruby編寫,性能要求比較高的地方采用C編寫,考慮到一般的用戶可能安裝操作Ruby有困難,因此該公司維護並提供了一個穩定版本的Fluentd。該版本的Fluentd在內存分配上采用了着重避免內存碎片分配實現 jemalloc 。兩個版本的區別可以在這 查看 

那么我們到底選用哪種方式呢,根據官方的文檔。td-agent強調new features的穩定性,如果希望自己控制Fluentd的features,自己手動去更新,采用gem的方式安裝。如果是第一次使用Fluentd或者在大規模的生產環境使用,推薦安裝td-agent,每2-3個月,td-agent就會發布一個新的版本。

在Ubuntu 12.04上安裝Fluentd

注意 這種方式截止到筆者發稿僅支持一下兩個Ubuntu的版本:

  • Ubuntu 12.04 LTS / Precise
  • Ubuntu 10.04 LTS / Lucid

可以在 這里 查看最新進展。

  1. (Optional but Recommend)設置GPG Key

    deb包使用 Treasure Data GPG key 簽名,首先將 GPG key 導入apt:

    $ apt-key add /path/to/RPM-GPG-KEY-td-agent
  1. 執行下面的腳本

    echo "This script requires superuser access to install apt packages." echo "You will be prompted for your password by sudo." # clear any previous sudo permission sudo -k # run inside sudo sudo sh <<SCRIPT # add treasure data repository to apt echo "deb http://packages.treasure-data.com/precise/ precise contrib" > /etc/aptsources.list.d/treasure-data.list # update your sources apt-get update # install the toolbelt apt-get install -y --force-yes td-agent SCRIPT

    即安裝完畢。

    也可執行下面的的命令:

    $ curl -L http://toolbelt.treasuredata.com/sh/install-ubuntu-precise.sh | sh

    其實腳本內容就是上面的,我粘過去的。

  1. 啟動Fluentd的守護進程

    因為我們安裝的是td-agent,自帶 /etc/init.d/td-agent 腳本,通過該腳本啟動Fluentd服務。

    $ /etc/init.d/td-agent restart * Restarting td-agent td-agent $ /etc/init.d/td-agent status * ruby is running

    同時還支持以下命令:

    $ /etc/init.d/td-agent start $ /etc/init.d/td-agent stop $ /etc/init.d/td-agent restart $ /etc/init.d/td-agent status

    配置文件在: /etc/td-agent/td-agent.conf

  1. 測試

    默認在配置文件中td-agent在8888端口監聽,接收來自HTTP的log信息,並把其路由到stdout( /var/log/td-agent/td-agent.log ),可以用curl命令測試:

    $ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

    之后打開 /var/log/td-agent/td-agent.log ,可以見到已經輸出了信息:

后記

現在我們已經准備好使用Fluentd收集日志信息了。接下來就是配置和實際應用。

簡介

Fluentd是一個開源的數據收集器,專為處理數據流設計,有點像 syslogd ,但是使用JSON作為數據格式。它采用了插件式的架構,具有高可擴展性高可用性,同時還實現了高可靠的信息轉發。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM