書名: ELK stack權(quán)威指南作者名: 饒琛琳本章字?jǐn)?shù): 1509字更新時間: 2018-12-31 21:08:11
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來代替。
- 精通COBOL:大型機商業(yè)編程技術(shù)詳解(修訂版)
- 大前端三劍客:Vue+React+Flutter
- 軟件工程基礎(chǔ)教程
- 軟件需求與可視化模型(微軟技術(shù)叢書)
- Netty權(quán)威指南
- 數(shù)字化轉(zhuǎn)型架構(gòu):方法論與云原生實踐
- Spring Cloud微服務(wù)架構(gòu)實戰(zhàn)
- 學(xué)校沒教的軟件工程課
- 微服務(wù)架構(gòu)原理與開發(fā)實戰(zhàn)
- 每天5分鐘玩轉(zhuǎn)OpenStack
- CATIA V5 從入門到精通(第二版)
- 全棧Monorepo開發(fā)實戰(zhàn)(Vue 3+Fastify+Deno+pnpm)
- 嵌入式軟件調(diào)試技術(shù)
- 構(gòu)建移動網(wǎng)站與APP:ionic移動開發(fā)入門與實戰(zhàn) (跨平臺移動開發(fā)叢書)
- AR與VR開發(fā)實戰(zhàn)