Fluented,Kubernetes和谷歌云平臺(tái)——處理日志流的解決方案

來(lái)源:簡(jiǎn)書(shū)
作者:瑞恩老濕
時(shí)間:2020-07-24
2724
也許你對(duì)Fluentd的統(tǒng)一日志記錄層已經(jīng)有所耳聞??赡苣銓?duì)日志是流不是文件這個(gè)概念也已經(jīng)很熟悉,所以現(xiàn)在就讓我們用這個(gè)方法來(lái)思考日志層。

也許你對(duì)Fluentd的統(tǒng)一日志記錄層已經(jīng)有所耳聞??赡苣銓?duì)日志是流不是文件這個(gè)概念也已經(jīng)很熟悉,所以現(xiàn)在就讓我們用這個(gè)方法來(lái)思考日志層。

事實(shí)上,最后導(dǎo)致決定性的一點(diǎn)就是fluentd是如何被配置的。全部都是關(guān)于我們?nèi)绾翁幚韘tream的不同元素的:我們從哪里得到數(shù)據(jù),當(dāng)我們獲取到的時(shí)候用它來(lái)做什么,我們將處理過(guò)的數(shù)據(jù)發(fā)送到哪里,以及它們?cè)诎l(fā)送過(guò)程中的時(shí)候,我們要如何處理它。在這篇博客中,我們會(huì)回顧一下這些概念,并且將他們運(yùn)用到以下案例中:

1、日志從Docker容器中輸出命令(但是當(dāng)容器中止的時(shí)候,要保持配置)

2、處理JSON日志

3、通過(guò)等級(jí)將信息進(jìn)行分類(lèi)

4、將數(shù)據(jù)流分離到兩個(gè)目的地

ia_200000002.jpg

事實(shí)證明,谷歌云平臺(tái)和Kubernetes默認(rèn)設(shè)置下已經(jīng)包括了fluentd日志層輸出,這樣的話,你就可以精確地做這些事情,但是首先,讓我們來(lái)看一下fluentd.conf文件中的指令:

1、source指令確定輸入源

2、match指令確定輸出目的地

3、filter指令確定event處理管道

4、system指令設(shè)置系統(tǒng)范圍的配置

5、label指令將內(nèi)部路由的輸出和過(guò)濾器分組

6、include指令包括其他文件

基本方案(用于日志記錄Docker標(biāo)準(zhǔn)輸出命令)

現(xiàn)在對(duì)于我們的目標(biāo)來(lái)說(shuō),我們主要會(huì)考慮source和match指令。以下是一個(gè)樣本,為日志記錄命令配置,命令是從一個(gè)容器直接到Treasure Data(而且,因?yàn)槲覀兊呐渲檬窃赨buntu主機(jī)上,所以它不會(huì)和Docker容器一起中止!)。

ia_200000003.jpg

那么,發(fā)生了什么呢?

我們的source指令告訴我們正在使用forwardinput plugin,這就告訴fluentd要監(jiān)聽(tīng)TCP socket來(lái)接收event流。

我們有兩個(gè)match指令。當(dāng)我們啟動(dòng)容器的時(shí)候,最后一個(gè)假定我們已經(jīng)設(shè)置了我們的日志記錄選項(xiàng):

--log-opt fluentd-tag=td.docker.{{.Name}}

這條指令告訴我們使用標(biāo)準(zhǔn)輸出plugin來(lái)打印events到標(biāo)準(zhǔn)輸出。

然而,它不僅第一條指令,也是最有趣的一條?,F(xiàn)在假定一樣的日志記錄選項(xiàng),我們將所有標(biāo)記有td.*.*的東西都匹配好,并且使用td日志output plugin,將每個(gè)console輸出作為單個(gè)記錄輸出,發(fā)送到一個(gè)名為docker的Treasure Data數(shù)據(jù)庫(kù),在這里,表格也同樣是Docker容器的名字:

auto_create_table在第一個(gè)實(shí)例上創(chuàng)建表格。

buffer_type file將緩沖區(qū)寫(xiě)入一個(gè)文件。

buffer_path在我們的Docker容器上指定緩沖文件路徑。

flush_interval 5s在刷新緩沖區(qū)時(shí)設(shè)置了一個(gè)5秒的間隔,并且寫(xiě)進(jìn)了Treasure Data表格。

是不是開(kāi)始明白這是怎么運(yùn)作的了?想要了解更多關(guān)于fluentd配置和參數(shù),點(diǎn)擊這里查看更多文章:https://docs.fluentd.org/articles/config-file

日志記錄結(jié)果到谷歌云平臺(tái)

ia_200000004.jpg

準(zhǔn)備好查看fluentd是怎么用谷歌云平臺(tái)來(lái)運(yùn)行的了嗎?讓我們來(lái)看一些不一樣的場(chǎng)景。多虧了Kubernetes團(tuán)隊(duì),使得這些配置(以及跟這些很相似的配置)在github上實(shí)現(xiàn)可用。

處理JSON日志

ia_200000005.jpg

在這里,我們跟蹤JSON上的日志,并將日志記錄結(jié)果到Kubernetes上。我們要處理一下時(shí)間戳,所以我們已經(jīng)包括了time_key和time_format指令。最后,我們用Kubernetes和適當(dāng)?shù)莫?dú)特后綴來(lái)標(biāo)注數(shù)據(jù)流。我們同樣也已經(jīng)指定位置文件,并且設(shè)置read_from_head為真。這就使得我們要停止并且重啟處理if,由于某些原因,我們的stream就被打斷了。

通過(guò)不同的層面來(lái)分類(lèi)信息

ia_200000006.jpg

我們可以追蹤不同的信息,使用常規(guī)表達(dá)方式來(lái)查找部分信息,比如格式,層次(嚴(yán)重性),信息,錯(cuò)誤(如果有錯(cuò)誤的話)和狀態(tài)碼。注意,我們必須在輸出上解析時(shí)間。再一次,我們使用位置文件來(lái)保持我們?cè)趕tream中的位置。我們應(yīng)該包括一個(gè)match部分來(lái)路由數(shù)據(jù)到一個(gè)特定的目的地。

將數(shù)據(jù)流分離到兩個(gè)不同的目的地

ia_200000007.jpg

在這里,我們解析自動(dòng)定量日志,管理我們的緩沖區(qū),查詢(xún)和區(qū)塊大小。在這兩個(gè)目的地(也就是,GCP和Kubernetes)的案例中,我們一直在重新嘗試。

What's next?

你能夠自己創(chuàng)建最簡(jiǎn)單的日志記錄基礎(chǔ)設(shè)施嗎?讓Fluentd來(lái)!

fluentd.org

這個(gè)網(wǎng)站上有不下于200個(gè)輸入,也還有其它插件。這里的話,你可以看到他們通過(guò)人氣降序排列的

fluentd.org/plugins/all

如果想要通過(guò)分類(lèi)了解plug-ins,點(diǎn)擊上面這個(gè)網(wǎng)址

fluentd.org/plugins

最后,在這個(gè)網(wǎng)站上可以獲取Treasure Data(你可以在treasuredata.com上注冊(cè)一個(gè)賬號(hào),有14天的試用期)

原文鏈接:點(diǎn)擊前往 >
版權(quán)說(shuō)明:本文內(nèi)容來(lái)自于簡(jiǎn)書(shū),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家