Fluentd是一個日志收集系統,它的特點在於其各部分均是可定制化的,你可以通過簡單的配置,將日志收集到不同的地方。
目前開源社區已經貢獻了下面一些存儲插件:MongoDB, Redis, CouchDB,AmazonS3, Amazon SQS, Scribe, 0MQ, AMQP, Delayed, Growl等等。
安裝
此版本采用: Installingtd-agent for Redhat and CentOS
Fluentd是由Ruby和C編寫的,需要ruby進行,然而安裝td-agent 是fluentd 的易安裝版本,不用考慮太多的依賴關系。
1.首先please create /etc/yum.repos.d/td.repo with the followingcontents.
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0
Then,you can install via yum command.
2. $ yumupdate
$ yuminstall td-agent
3. 安裝完成后,可使用以下方式啟動關閉服務。
$ /etc/init.d/td-agent start
$ /etc/init.d/td-agent stop
$/etc/init.d/td-agent restart
4.默認的/etc/td-agent/td-agent.conf為td-agent的配置文件
/var/log/td-agent/td-agent.log為td-agent的日志文件
5. 查看td-agent的安裝
6.查看ruby fluent插件的列表:ruby的安裝路徑在/usr/lib64/fluent/ruby/
fluent-plugin-tail-ex:為輸入擴展插件,支持對文件路徑、日期的擴展
fluent-plugin-tail-multiline:為輸入擴展插件,支持多行數據的收集,能夠更好的收集異常信息。
5. 插件安裝
兩種安裝方法:
1) 可以本地安裝,下載gem安裝包 https://rubygems.org/gems,推薦此方法
2) ruby庫遠程安裝
兩種方法的安裝命令為:$ /usr/lib64/fluent/ruby/bin/gem install 插件名稱
6. 配置
首先我們編輯配置文件/etc/td-agent/td-agent.conf 中的source來設置日志來源
type tail
format apache
path /var/log/apache2/access_log
pos_file /var/log/apache2/access_log.pos
tag mongo.apache
其中:
type tail: tail方式是 Fluentd 內置的輸入方式,其原理是不停地從源文件中獲取增量日志,與linx命令tail相似,也可以使用其他輸入方式如http、forward等輸入,也可以使用輸入插件,將 tail 改為相應的插件名稱 如: type tail_ex ,注意tail_ex為下划線。
format apache: 指定使用 Fluentd 內置的 Apache 日志解析器。可以自己配置表達式。
path /var/log/apache2/access_log: 指定收集日志文件位置。
Pos_file /var/log/apache2/access_log.pos:強烈建議使用此參數,access_log.pos文件可以自動生成,要注意access_log.pos文件的寫入權限,因為要將access_log上次的讀取長度寫入到該文件,主要保證在fluentd服務宕機重啟后能夠繼續收集,避免日志數據收集丟失,保證數據收集的完整性。
tag mongo.apache: 指定tag,tag被用來對不同的日志進行分類,與后面的標簽match相匹配。
下面再來編輯輸出配置,配置日志收集后存儲到MongoDB中,也可以輸出到其他組件如文件,轉發等。
# plugin type
type mongo
# mongodb db + collection
database apache
collection access
# mongodb host + port
host localhost
port 27017
# interval
flush_interval 10s
match標簽后面可以跟正則表達式以匹配我們指定的tag,只有匹配成功的tag對應的日志才會運用里面的配置。配置中的其它項都比較好理解,看注釋就可以了,其中flush_interval是用來控制多長時間將日志寫入MongoDB一次。
# TCP input
type forward
port 24224
# HTTP input
type http
port 8888
# Log Forwarding
type forward
# primary host
host 192.168.0.1
port 24224
# use secondary host
host 192.168.0.2
port 24224
standby
# use longer flush_interval to reduce CPU usage.
# note that this is a trade-off against latency.
flush_interval 60s
8.fluent對java的支持:fluent-logger-javais a Java library, to record events via Fluentd, from Java application.
import java.util.HashMap;
import java.util.Map;
import org.fluentd.logger.FluentLogger;
public class Main {
private static FluentLogger LOG = FluentLogger.getLogger("app", "192.168.0.1", 24224);
public static void main(String[] args) {
// ...
Map data = new HashMap();
data.put("from", "aaa");
data.put("to", "bbb");
LOG.log("follow", data); //...
FluentLogger.close();
}
}
配置fluentd服務器端/etc/td-agent/td-agent.conf
添加:
##必須啟動tcp端口,端口號為24224,不加port屬性默認為24224
type tcp
port 24224
##app.** 與java中的app匹配
##匹配輸出到/var/log/td-agent/td-agent.log
type stdout
查看td-agent.log輸出結果:
2013-06-06 12:56:01 +0800 app.follow: {"to":"bbb","from":"aaa"}