fluentd 是一個(gè)實(shí)時(shí)的數(shù)據(jù)收集系統(tǒng),不僅可以收集日志,還可以收集定期執(zhí)行的命令輸出和HTTP 請求內(nèi)容。
創(chuàng)新互聯(lián):自2013年起為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為超過千家公司企業(yè)提供了專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)和網(wǎng)站推廣服務(wù), 定制開發(fā)由設(shè)計(jì)師親自精心設(shè)計(jì),設(shè)計(jì)的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。數(shù)據(jù)被收集后按照用戶配置的解析規(guī)則,形成一個(gè)個(gè)?event,event 格式如下:
tag = xxx
time = xxx
record = {
"key1": "value1",
"key2": "value2"
}
其中:
source 定義數(shù)據(jù)源,是 fluentd 的輸入端,流入 fluentd 的配置都是在 source 中的,一個(gè) fluentd 中可以有多個(gè)數(shù)據(jù)源,因此,一個(gè) fluentd 中可以有多個(gè) source 。
一個(gè) source 由一個(gè)輸入插件和插件的配置組成,也就意味著,一個(gè) source 中只能有一種類型的輸入。
輸入插件輸入插件有很多,具體的可以去官網(wǎng)查看,很詳細(xì)。鏈接如下:
Fluentd
在這里,只是總結(jié)一下,我自己使用的插件:
@type 'kafka'該插件是以“單消費(fèi)者”模式訂閱 kafka 消息。
單消費(fèi)者模式:每個(gè) kafka 輸入插件獨(dú)立地訂閱 kafka 消息。
很簡單,但有缺陷,因此目前大多以 “消費(fèi)組模式”訂閱。
單消費(fèi)者模式缺陷如下(網(wǎng)上抄的,實(shí)際情況如何不清楚):
配置如下:
其中:
以上是最簡單的配置,同時(shí)也是我用的配置。想要查看更復(fù)雜的配置,請移步:
GitHub - fluent/fluent-plugin-kafka: Kafka input and output plugin for Fluentd
GitHub - zendesk/ruby-kafka: A Ruby client library for Apache Kafka
@type 'kafka_group'插件以“消費(fèi)者組”模式訂閱 kafka 消息。消費(fèi)者組模式解決了單消費(fèi)者模式存在的幾個(gè)缺點(diǎn),可以同時(shí)啟動(dòng)多個(gè) Fluentd 進(jìn)程協(xié)同工作。
配置如下:
matchmatch 定義數(shù)據(jù)的輸出目標(biāo),match 指令通過匹配 tag 字段來將事件輸出到其他的系統(tǒng)。
同樣 match 指令也必須指定 @type 參數(shù),該參數(shù)用來指定使用哪個(gè)輸出插件。
@type kafka2# 插件類型 kafka2
@type kafka2
# 逗號分隔的 broker 列表,每個(gè) broker 需要指定 ip 和端口
brokers :,:,.. # Set brokers directly
# 默認(rèn) topic,若未設(shè)置 topic_key,則 topic 取此處的值
default_topic (string) :default =>nil
# 設(shè)置輸出消息格式,支持 json、ltsv、msgpack或其他輸出插件,默認(rèn)是 json@type (json|ltsv|msgpack|attr:|) :default =>json flush_interval 10s username USERNAME
password PASSWORD
sasl_over_ssl false
ssl_ca_certs_from_system false
get_kafka_client_log false
default_topic:將要輸出到 kafka 中的 topic 名字
buffer: 緩存配置,一般只配?flush_interval ,代表間隔一定時(shí)間去輸出一次。
@type webhdfs該插件是用于將日志輸出到 hdfs 中的。
HDFS (Hadoop)是存儲和處理大量數(shù)據(jù)的。
既然要輸出到 hdfs 中,所以首先要安裝一些軟件或插件:
輸出目的地將是WebHDFS。輸出配置應(yīng)該如下所示:
@type webhdfs
? host namenode.your.cluster.local
? port 50070
? path "/log/%Y%m%d_%H/access.log.#{Socket.gethostname}"
? flush_interval 10s
?
除了配置 fluentd 的配置外,還需要對 hdfs 的配置做一些修改,將以下配置添加到?hdfs-site.xml 文件中,然后重新啟動(dòng)整個(gè)群集:
dfs.webhdfs.enabled true dfs.support.append true dfs.support.broken.append true
同時(shí)要確認(rèn) hdfs 用戶對指定為網(wǎng)絡(luò)文件系統(tǒng)輸出的路徑具有寫權(quán)限。
@type stdout這個(gè)類型的插件,適用于 debug 時(shí)使用的。
在使用其他輸出插件時(shí),如果在目的接收端收不到日志,或收到的日志數(shù)據(jù)不準(zhǔn)確,可以先將日志輸出到 stdout 進(jìn)行查看。
它的配置很簡單:
@type stdout
其中 pattern 要替換成需要匹配 tag 的正則表達(dá)式,如果想要匹配全部 tag,pattern 替換成?*.*
當(dāng)然,如果debug,還有一種方法,在任意一個(gè) 插件類型的下方,添加一個(gè) @log_level?debug ,控制臺就會輸出 debug 級別的日志,否則,默認(rèn)只輸出 info 級別的日志。
@type copymatch 匹配到第一個(gè) match,就直接輸出了,不會再繼續(xù)匹配下一個(gè) match,如果需要將日志同時(shí)輸出到兩個(gè)地方,就需要用輸出插件中的 copy 搞搞。
具體配置如下:
@type copy@type file
path /var/log/fluent/myapp1
... ... ...
fluentd 生命周期在 fluentd 中有以下幾個(gè)類型: source、 parser、filter、output 四種。
parse 和 filter 用于解析和過濾,在我的這次項(xiàng)目中沒有用到。
在 fluentd 中,數(shù)據(jù)的流向如下:
source ->parser ->filter ->output
從? source 數(shù)據(jù)源進(jìn)來,流過所有的 parser 和 filter ,最后優(yōu)先匹配到一個(gè) output 輸出出去。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧