Fluentd初探 简介与安装
Fluentd是一個(gè)開源的數(shù)據(jù)收集器,專為處理數(shù)據(jù)流設(shè)計(jì),有點(diǎn)像?syslogd?,但是使用JSON作為數(shù)據(jù)格式。它采用了插件式的架構(gòu),具有高可擴(kuò)展性高可用性,同時(shí)還實(shí)現(xiàn)了高可靠的信息轉(zhuǎn)發(fā)。
據(jù)分(Y)析(Y),Fluentd是由Fluent+d得來,d生動形象地標(biāo)明了它是以一個(gè)守護(hù)進(jìn)程的方式運(yùn)行。官網(wǎng)上將其描述為data collector,在使用上,我們可以把各種不同來源的信息,首先發(fā)送給Fluentd,接著Fluentd根據(jù)配置通過不同的插件把信息轉(zhuǎn)發(fā)到不同的地方,比如文件、SaaS Platform、數(shù)據(jù)庫,甚至可以轉(zhuǎn)發(fā)到另一個(gè)Fluentd。
總結(jié)一下,數(shù)據(jù)流殊途,同歸與Fluentd,Fluentd做一些諸如過濾、緩存、路由等工作,將其轉(zhuǎn)發(fā)到不同的最終接收方。
用Fluentd處理數(shù)據(jù)還能保證一定的實(shí)時(shí)性,其提供種類豐富的客戶端lib,很適合處理單位時(shí)間emit出log數(shù)量巨大的場景。從v10后,Fluentd?不支持?Windows。
其采用Ruby編寫,比較注重性能的地方采用C編寫,Ruby的創(chuàng)始人松本老師這樣評價(jià)Fluentd:
Fluentd proves you can achieve programmer happiness and performance at the same time. A great example of Ruby beyond the Web.
Heroku的聯(lián)合創(chuàng)始人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.
更多信息請看?這里?。
安裝
安裝前的準(zhǔn)備工作
安裝?ntpd
ntpd?,以d結(jié)尾,是一個(gè)守護(hù)進(jìn)程,全稱是Network Time Protocol (NTP) daemon,它通過與一個(gè)Internet標(biāo)準(zhǔn)時(shí)鐘服務(wù)器同步來維護(hù)系統(tǒng)時(shí)鐘,同時(shí)也可以將本機(jī)做為一個(gè)時(shí)鐘服務(wù)器對外提供時(shí)鐘同步服務(wù)。更多信息請man一下ntpd。
安裝ntpd是為了防止Fluentd在收集log的時(shí)候出現(xiàn)非法的時(shí)間戳。
在Ubuntu下,apt-get即可安裝:
$ sudo apt-get install ntp之后查看ntpd是否啟動成功(pgrep返回進(jìn)程號):
$ pgrep ntpd增加系統(tǒng)文件描述符的最大數(shù)量
通過ulimit查看當(dāng)前的文件描述符的最大數(shù)量:
$ ulimit -n如果是1024,那是遠(yuǎn)遠(yuǎn)不夠的,將下面4行添加到?/etc/security/limits.conf?中,重啟機(jī)器。
root soft nofile 65536 root hard nofile 65536 * soft nofile 65536 * hard nofile 65536之后用ulimit查看,應(yīng)該是65536了。
(Optional)優(yōu)化機(jī)器內(nèi)核TCP/IP參數(shù)
如果Fluentd處于一個(gè)高負(fù)載的運(yùn)行環(huán)境,比如一個(gè)機(jī)器中運(yùn)行了多個(gè)Fluentd實(shí)例,那么最好將下面的參數(shù)添加到?/etc/sysctl.conf?中:
net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 10240 65535然后執(zhí)行?sysctl?-w?或者重啟機(jī)器使之生效。
這個(gè)跟TCP/IP的細(xì)節(jié)有關(guān)系,我沒有深究,貌似是為了防止短連接數(shù)過多,機(jī)器處于?TIME_WAIT?狀態(tài)的TCP連接數(shù)過多,開啟快速回收與重用。具體請參考?這里?。
安裝Fluentd
寫在前面
有?很多種方式?來安裝Fluentd,比如通過Ruby的Gem,以及Ubuntu的deb、OS X的Homebrew。
采用Ruby的Gem安裝比較簡單,安裝的是基本版的Fluentd,即不自帶?/etc/init.d?腳本,在運(yùn)行時(shí)內(nèi)存分配采用的是操作系統(tǒng)默認(rèn)的方式;
而采用.rpm/.deb for Linux的方式安裝呢,安裝的是一個(gè)由?Treasure Data, Inc?維護(hù)的穩(wěn)定版本Fluentd,又被稱為td-agent。為了保持一個(gè)良好的靈活性,Fluentd采用Ruby編寫,性能要求比較高的地方采用C編寫,考慮到一般的用戶可能安裝操作Ruby有困難,因此該公司維護(hù)并提供了一個(gè)穩(wěn)定版本的Fluentd。該版本的Fluentd在內(nèi)存分配上采用了著重避免內(nèi)存碎片分配實(shí)現(xiàn)?jemalloc?。兩個(gè)版本的區(qū)別可以在這?查看?。
那么我們到底選用哪種方式呢,根據(jù)官方的文檔。td-agent強(qiáng)調(diào)new features的穩(wěn)定性,如果希望自己控制Fluentd的features,自己手動去更新,采用gem的方式安裝。如果是第一次使用Fluentd或者在大規(guī)模的生產(chǎn)環(huán)境使用,推薦安裝td-agent,每2-3個(gè)月,td-agent就會發(fā)布一個(gè)新的版本。
在Ubuntu 12.04上安裝Fluentd
注意?這種方式截止到筆者發(fā)稿僅支持一下兩個(gè)Ubuntu的版本:
- Ubuntu 12.04 LTS / Precise
- Ubuntu 10.04 LTS / Lucid
可以在?這里?查看最新進(jìn)展。
(Optional but Recommend)設(shè)置GPG Key
deb包使用?Treasure Data GPG key?簽名,首先將?GPG key?導(dǎo)入apt:
$ apt-key add /path/to/RPM-GPG-KEY-td-agent執(zhí)行下面的腳本
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/apt、sources.list.d/treasure-data.list# update your sources apt-get update# install the toolbelt apt-get install -y --force-yes td-agentSCRIPT即安裝完畢。
也可執(zhí)行下面的的命令:
$ curl -L http://toolbelt.treasuredata.com/sh/install-ubuntu-precise.sh | sh其實(shí)腳本內(nèi)容就是上面的,我粘過去的。
啟動Fluentd的守護(hù)進(jìn)程
因?yàn)槲覀儼惭b的是td-agent,自帶?/etc/init.d/td-agent?腳本,通過該腳本啟動Fluentd服務(wù)。
$ /etc/init.d/td-agent restart * Restarting td-agent td-agent $ /etc/init.d/td-agent status * ruby is running同時(shí)還支持以下命令:
$ /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
測試
默認(rèn)在配置文件中td-agent在8888端口監(jiān)聽,接收來自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查看。
總結(jié)
以上是生活随笔為你收集整理的Fluentd初探 简介与安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一致 Hash 算法
- 下一篇: FaaS介绍