fluentd-創(chuàng)新互聯(lián)

介紹

fluentd 是一個(gè)實(shí)時(shí)的數(shù)據(jù)收集系統(tǒng),不僅可以收集日志,還可以收集定期執(zhí)行的命令輸出和HTTP 請(qǐng)求內(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ìng)爭(zhēng)對(duì)手,根據(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"
}

其中:

  • tag:為數(shù)據(jù)流的標(biāo)記。 ?當(dāng) fluentd 中有數(shù)不清的 event 時(shí),tag 可以用于分組處理。
    • 比如說 tag 為 water 的,需要其中的?record 添加一個(gè) hostname?的 kv 值。
    • 又或者 tag 為 fire 的,不做任何處理,直接輸出到文件中的。
  • time: event 產(chǎn)生的時(shí)間,該字段通常由日志內(nèi)的時(shí)間字段解析出來。
  • record:?日志的內(nèi)容,為 JSON 格式。
source

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 消息。

很簡(jiǎn)單,但有缺陷,因此目前大多以 “消費(fèi)組模式”訂閱。

單消費(fèi)者模式缺陷如下(網(wǎng)上抄的,實(shí)際情況如何不清楚):

  • 如果存在多個(gè)單消費(fèi)者進(jìn)程同時(shí)訂閱相同的 topic,進(jìn)程之間無法協(xié)調(diào)和分配不同的分區(qū)。
  • 如果多個(gè)消費(fèi)者進(jìn)程中的某個(gè)進(jìn)程掛掉,其他進(jìn)程無法從該進(jìn)程原先訂閱位置進(jìn)行恢復(fù)。

配置如下:

# 插件類型 kafka
  @type kafka
  
  # 逗號(hào)分隔的 broker 列表,每個(gè) broker 需要指定 ip 和端口
  brokers:,:,..
  # 逗號(hào)分隔的 topic 列表
  topics# 輸入消息的格式,有 text、json、ltsv、msgpack 等幾種,默認(rèn) json
  format:default =>json
  # tag 增加前綴
  add_prefix# tag 增加后綴
  add_suffix

其中:

  • topic: 填寫的是想要消費(fèi) kafka 中 topic 的名字,可以同時(shí)消費(fèi)多個(gè) topic 。
  • tag: tag 的名字默認(rèn)是 topic 的名字,如果想要修改 tag ,可以使用 add_prefix 和 add_suffix 在 tag 的前后添加字符串。?
    • 例如:當(dāng)目標(biāo)?topic?名稱為?app_event?時(shí),tag?為?app_event?。使用add_prefix kafka,tag?就是kafka.app_event。

以上是最簡(jiǎn)單的配置,同時(shí)也是我用的配置。想要查看更復(fù)雜的配置,請(qǐng)移步:

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é)同工作。

配置如下:

# 插件類型 kafka_group
  @type kafka_group
  
  # 逗號(hào)分隔的 broker 列表,每個(gè) broker 需要指定 ip 和端口
  brokers:,:,..
  # 設(shè)定消費(fèi)者組名稱,必須設(shè)置
  consumer_group# 逗號(hào)分隔的 topic 列表
  topics# 輸入消息的格式,有 text、json、ltsv、msgpack 等幾種,默認(rèn) json
  format:default =>json
  # 如果為 true,添加 kafka 的消息頭到記錄中
  add_headers# tag 增加前綴
  add_prefix# tag 增加后綴
  add_suffixusername USERNAME
  password PASSWORD
  sasl_over_ssl false
  ssl_ca_certs_from_system false
  get_kafka_client_log false

match

match 定義數(shù)據(jù)的輸出目標(biāo),match 指令通過匹配 tag 字段來將事件輸出到其他的系統(tǒng)。

同樣 match 指令也必須指定 @type 參數(shù),該參數(shù)用來指定使用哪個(gè)輸出插件。

@type kafka2
# 插件類型 kafka2
  @type kafka2

  # 逗號(hào)分隔的 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 =>jsonflush_interval 10susername 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)是存儲(chǔ)和處理大量數(shù)據(jù)的。

既然要輸出到 hdfs 中,所以首先要安裝一些軟件或插件:

  • Fluentd
  • webhdfs 輸出插件 (out_webhdfs)
  • Apache 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
?
  • 部分指定了用于查找匹配標(biāo)簽的正則表達(dá)式。如果日志中的標(biāo)簽匹配,則使用相應(yīng)的匹配配置(即相應(yīng)地路由日志)。
  • flush_interval參數(shù)指定數(shù)據(jù)寫入HDFS的頻率。追加操作用于將傳入數(shù)據(jù)追加到path參數(shù)指定的文件中。 時(shí)間和主機(jī)名的占位符可以與path參數(shù)一起使用。這可以防止多個(gè)Fluentd實(shí)例將數(shù)據(jù)追加到同一個(gè)文件中,而追加操作必須避免這種情況。
  • 其他選項(xiàng)指定HDFS的NameNode 的主機(jī)和端口。

除了配置 fluentd 的配置外,還需要對(duì) hdfs 的配置做一些修改,將以下配置添加到?hdfs-site.xml 文件中,然后重新啟動(dòng)整個(gè)群集:

dfs.webhdfs.enabledtruedfs.support.appendtruedfs.support.broken.appendtrue

同時(shí)要確認(rèn) hdfs 用戶對(duì)指定為網(wǎng)絡(luò)文件系統(tǒng)輸出的路徑具有寫權(quán)限。

@type stdout

這個(gè)類型的插件,適用于 debug 時(shí)使用的。

在使用其他輸出插件時(shí),如果在目的接收端收不到日志,或收到的日志數(shù)據(jù)不準(zhǔn)確,可以先將日志輸出到 stdout 進(jìn)行查看。

它的配置很簡(jiǎn)單:

@type stdout

其中 pattern 要替換成需要匹配 tag 的正則表達(dá)式,如果想要匹配全部 tag,pattern 替換成?*.*

當(dāng)然,如果debug,還有一種方法,在任意一個(gè) 插件類型的下方,添加一個(gè) @log_level?debug ,控制臺(tái)就會(huì)輸出 debug 級(jí)別的日志,否則,默認(rèn)只輸出 info 級(jí)別的日志。

@type copy

match 匹配到第一個(gè) match,就直接輸出了,不會(huì)再繼續(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級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

文章標(biāo)題:fluentd-創(chuàng)新互聯(lián)
文章源于:http://bm7419.com/article24/ijsje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司網(wǎng)站建設(shè)、網(wǎng)站改版網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)