官术网_书友最值得收藏!

1.3 配置語法

Logstash社區(qū)通常習(xí)慣用Shipper、Broker和Indexer來描述數(shù)據(jù)流中不同進程各自的角色。如圖1-2所示。

圖1-2 Logstash角色說明

不過我見過很多運用場景里都沒有用Logstash作為Shipper,或者說沒有用Elasticsearch作為數(shù)據(jù)存儲,也就是說也沒有Indexer。所以,我們其實不需要這些概念。只需要學(xué)好怎么使用和配置Logstash進程,然后把它運用到你的日志管理架構(gòu)中最合適它的位置就夠了。

1.3.1 語法

Logstash設(shè)計了自己的DSL——有點像Puppet的DSL,或許因為都是用Ruby語言寫的吧——包括區(qū)域、注釋、數(shù)據(jù)類型(布爾值、字符串?dāng)?shù)值、數(shù)組、哈希),條件判斷、字段引用等。

1.區(qū)段(section)

Logstash用{}來定義區(qū)域。區(qū)域內(nèi)可以包括插件區(qū)域定義,你可以在一個區(qū)域內(nèi)定義多個插件。插件區(qū)域內(nèi)則可以定義鍵值對設(shè)置。示例如下:

input {
    stdin {}
    syslog {}
}

2.數(shù)據(jù)類型

Logstash支持少量的數(shù)據(jù)值類型:

□ 希爾值(bool)

debug => true

字符串(string)

host =>“hostname”

數(shù)值(number)

port => 514

數(shù)組(array)

match => [“datetime”, “UNIX”, “ISO8601”]

哈希(hash)

options => {
    key1 =>“value1”,
    key2 =>“value2”
}

如果你用的版本低于1.2.0,哈希的語法跟數(shù)組是一樣的,像下面這樣寫:

match => [ “f?ield1”, “pattern1”, “f?ield2”, “pattern2” ]

3.字段引用(field reference)

字段是Logstash::Event對象的屬性。我們之前提過事件就像一個哈希一樣,所以你可以想象字段就像一個鍵值對。

如果你想在Logstash配置中使用字段的值,只需把字段的名字寫在中括號[]里就行了,這就叫“字段引用”。

對于“嵌套字段”(也就是多維哈希表,或者叫哈希的哈希),每層的字段名都寫在[]里就可以了。比如,你可以從geoip里這樣獲取longitude值(是的,這是個笨辦法,實際上有單獨的字段專門存這個數(shù)據(jù)的):

[geoip][location][0]

小知識

Logstash的數(shù)組也支持倒序下標(biāo),即[geoip][location][-1]可以獲取數(shù)組最后一個元素的值。

Logstash還支持變量內(nèi)插,在字符串里使用字段引用的方法是這樣:

“the longitude is %{[geoip][location][0]}”

4.條件判斷(condition)

Logstash從1.3.0版開始支持條件判斷和表達式。

表達式支持下面這些操作符:

·equality, etc: ==, !=, <, >, <=, >=
·regexp: =~, !~
·inclusion: in, not in
·boolean: and, or, nand, xor
·unary: !()

通常來說,你都會在表達式里用到字段引用。比如:

if “_grokparsefailure” not in [tags] {
} else if [status] !~ /^2\d\d/ and [url] == “/noc.gif” {
} else {
}

1.3.2 命令行參數(shù)

Logstash提供了一個shell腳本叫l(wèi)ogstash方便快速運行,下面介紹它支持的參數(shù):

1.-e

意即“執(zhí)行”。我們在“Hello World”的時候已經(jīng)用過這個參數(shù)了。事實上你可以不寫任何具體配置,直接運行bin/logstash-e''可達到相同效果。這個參數(shù)的默認(rèn)值是下面這樣:

input {
    stdin { }
}
output {
    stdout { }
}

2.--config或-f

意即“文件”。真實運用中,我們會寫很長的配置,甚至可能超過shell所能支持的1024個字符長度。所以我們必把配置固化到文件里,然后通過bin/logstash-fagent.conf這樣的形式來運行。

此外,Logstash還提供一個方便我們規(guī)劃和書寫配置的小功能。你可以直接用bin/logstash-f/etc/logstash.d/來運行。Logstash會自動讀取/etc/logstash.d/目錄下所有的文本文件,然后在自己內(nèi)存里拼接成一個完整的大配置文件,再去執(zhí)行。

3.--configtest或-t

意即“測試”。用來測試Logstash讀取到的配置文件語法是否能正常解析。Logstash配置語法是用grammar.treetop定義的。尤其是使用了上一條提到的讀取目錄方式的讀者,尤其要提前測試。

4.--log或-l

意即“日志”。Logstash默認(rèn)輸出日志到標(biāo)準(zhǔn)錯誤。生產(chǎn)環(huán)境下你可以通過bin/logstash-l logs/logstash.log命令來統(tǒng)一存儲日志。

5.--filterworkers或-w

意即“工作線程”。Logstash會運行多個線程。你可以用bin/logstash-w 5這樣的方式強制Logstash為“過濾插件”(Logstash目前還不支持輸入插件的多線程,輸出插件的多線程則是在配置內(nèi)設(shè)置)運行5個線程。

警告

Logstash目前不支持對過濾器線程的監(jiān)測管理。如果filterworker掛掉,Logstash會處于一個無filter的僵死狀態(tài)。這種情況在使用filter/ruby自己寫代碼時非常需要,很容易碰上NoMethodError:undefined method'*'for nil:NilClass錯誤。需要妥善處理,提前判斷。


6.--pluginpath或-P

可以寫自己的插件,然后用bin/logstash--pluginpath/path/to/own/plugins加載它們。

警告

如果你使用的Logstash版本在1.5.0-rc3到1.5.3之間,該參數(shù)一度被取消,請閱讀本書稍后插件開發(fā)章節(jié),改用本地gem插件安裝形式。


7.--verbose

輸出一定的調(diào)試日志。如果你使用的Logstash版本低于1.3.0,則用bin/logstash-v來代替。

8.--debug

輸出更多的調(diào)試日志。如果你使用的Logstash版本低于1.3.0,則用bin/logstash-vv來代替。

主站蜘蛛池模板: 通江县| 天津市| 勐海县| 廉江市| 浦县| 巩义市| 抚远县| 竹北市| 东阿县| 淳安县| 阿坝| 安阳市| 莎车县| 辽中县| 抚州市| 犍为县| 民勤县| 交口县| 濉溪县| 当雄县| 蒙自县| 娄烦县| 益阳市| 乐昌市| 黄大仙区| 庐江县| 阜新市| 卢龙县| 垣曲县| 元朗区| 博湖县| 麻城市| 开封市| 应用必备| 阜康市| 兴宁市| 山东省| 武功县| 高密市| 桃园县| 三门峡市|