- ELK stack權(quán)威指南
- 饒琛琳
- 1229字
- 2018-12-31 21:08:11
1.2 Hello World
與絕大多數(shù)IT技術(shù)介紹一樣,我們也以一個(gè)輸出“Hello World”的形式開(kāi)始學(xué)習(xí)Logstash。
1.命令行運(yùn)行
在終端中,像下面這樣運(yùn)行命令來(lái)啟動(dòng)Logstash進(jìn)程:
# bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
然后你會(huì)發(fā)現(xiàn)終端在等待你的輸入。沒(méi)問(wèn)題,敲入Hello World,回車(chē),看看會(huì)返回什么結(jié)果!
{“message” =>“Hello World”, “@version” =>“1”,“@timestamp” => “2014-08-07T10:30:59.937Z”, “host” =>“raochenlindeMacBook-Air.local”, }
沒(méi)錯(cuò)!就是這么簡(jiǎn)單。
2.完整示例
命令行運(yùn)行當(dāng)然不是什么特別方便的用法,所以絕大多數(shù)情況下,我們都是采用額外定義一個(gè)logstash.conf配置文件的方式來(lái)啟動(dòng)Logstash。下面是我們的第一個(gè)完整版logstash.conf的示例:
input { stdin { } } output { stdout { codec => rubydebug {} } elasticsearch { embedded => true } }
然后在終端上這樣運(yùn)行:
# bin/logstash -f logstash.conf
同樣,還是輸入一次Hello World。你會(huì)看到和上一次一樣的一段Ruby對(duì)象輸出。但事實(shí)上,這個(gè)完整示例可不止如此。打開(kāi)另一個(gè)終端,輸入下面一行命令:
# curl http://127.0.0.1:9200/_search?q=hello
你會(huì)看到終端上輸出下面這么一段內(nèi)容:
{“took”:15,“timed_out”:false,“_shards”:{“total”:27,“successful”:27,“failed”:0},“hits”:{“total”:1,“max_score”:0.095891505,“hits”:[{“_index”:“l(fā)ogstash-2015.08.22”,“_type”:“l(fā)ogs”,“_id”:“AU90s1eNgg_P5-w7SB32”,“_score”:0.095891505,“_source”:{“message”:“Hello World”,“@version”:“1”,“@timestamp”:“2014-08-07T10:30:59.937Z”,“host”:“raochenlindeMacBook-Air.local”}}]}}
如果你使用的是Logstash-1.5以下的版本,你還可以直接通過(guò)bin/logstash web命令,啟動(dòng)Kibana應(yīng)用,然后在瀏覽器上訪問(wèn)http://127.0.0.1:9292/地址,可以看到如圖1-1所示的效果。我們?cè)诮K端上輸入的數(shù)據(jù),就可以從頁(yè)面上任意搜索了。

圖1-1 Kibana上搜索的hello world
如果你使用的是Logstash-1.5以上版本,Logstash已經(jīng)不再自帶Kibana代碼,你就只能自己安裝部署一套Kibana程序了,相關(guān)內(nèi)容,可以稍后閱讀本書(shū)第三部分的介紹。
3.解釋
每位系統(tǒng)管理員都肯定寫(xiě)過(guò)很多類(lèi)似這樣的命令:cat randdata|awk'{print$2}'|sort|uniq-c|tee sortdata。這個(gè)管道符|可以算是Linux世界最偉大的發(fā)明之一(另一個(gè)是“一切皆文件”)。
Logstash就像管道符一樣!
你輸入(就像命令行的cat)數(shù)據(jù),然后處理過(guò)濾|(就像awk或者uniq之類(lèi))數(shù)據(jù),最后輸出(就像tee)到其他地方。
當(dāng)然實(shí)際上,Logstash是用不同的線(xiàn)程來(lái)實(shí)現(xiàn)這些的。如果你運(yùn)行top命令然后按下H鍵,你就可以看到下面這樣的輸出:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 21401 root 16 0 1249m 303m 10m S 18.6 0.2 866:25.46 |worker 21467 root 15 0 1249m 303m 10m S 3.7 0.2 129:25.59 >elasticsearch. 21468 root 15 0 1249m 303m 10m S 3.7 0.2 128:53.39 >elasticsearch. 21400 root 15 0 1249m 303m 10m S 2.7 0.2 108:35.80 <f?ile 21403 root 15 0 1249m 303m 10m S 1.3 0.2 49:31.89 >output 21470 root 15 0 1249m 303m 10m S 1.0 0.2 56:24.24 >elasticsearch.
如上例所示,Logstash很溫馨地給每類(lèi)線(xiàn)程都取了名字,輸入的叫<xx,過(guò)濾的叫|xx,輸出的叫>xx。
數(shù)據(jù)在線(xiàn)程之間以事件的形式流傳。不要叫行,因?yàn)長(zhǎng)ogstash可以處理多行事件。
Logstash會(huì)給事件添加一些額外信息。最重要的就是@timestamp,用來(lái)標(biāo)記事件的發(fā)生時(shí)間。因?yàn)檫@個(gè)字段涉及Logstash的內(nèi)部流轉(zhuǎn),所以必須是一個(gè)joda對(duì)象,如果你嘗試自己給一個(gè)字符串字段重命名為@timestamp的話(huà),Logstash會(huì)直接報(bào)錯(cuò)。所以,請(qǐng)使用logstash-filter-date插件來(lái)管理這個(gè)特殊字段。
此外,大多數(shù)時(shí)候,還可以見(jiàn)到另外幾個(gè):
□ host標(biāo)記事件發(fā)生在哪里。
□ type標(biāo)記事件的唯一類(lèi)型。
□ tags標(biāo)記事件的某方面屬性。這是一個(gè)數(shù)組,一個(gè)事件可以有多個(gè)標(biāo)簽。
你可以隨意給事件添加字段或者從事件里刪除字段。事實(shí)上事件就是一個(gè)Ruby對(duì)象,或者更簡(jiǎn)單地理解為就是一個(gè)哈希也行。
每個(gè)Logstash過(guò)濾插件,都會(huì)有四個(gè)方法叫add_tag、remove_tag、add_field和remove_field,它們?cè)诓寮^(guò)濾匹配成功時(shí)生效。
推薦閱讀
□ 官網(wǎng)上“the life of an event”文檔:http://logstash.net/docs/1.4.2/life-of-an-event
□ Elastic{ON}上《life of a logstash event》演講:https://speakerdeck.com/elastic/life-of-a-logstash-event
- GitLab CI/CD 從入門(mén)到實(shí)戰(zhàn)
- DevOps原理與實(shí)踐
- OpenNI體感應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)
- Spring開(kāi)發(fā)者的Quarkus實(shí)戰(zhàn)
- 從零基礎(chǔ)到精通Flutter開(kāi)發(fā)
- Knative最佳實(shí)踐
- Android插件化開(kāi)發(fā)指南
- Arduino項(xiàng)目開(kāi)發(fā):智能家居
- 服務(wù)端開(kāi)發(fā):技術(shù)、方法與實(shí)用解決方案
- 區(qū)塊鏈核心算法解析
- 軟件開(kāi)發(fā)大講堂·從入門(mén)到精通-第一輯(套裝共5冊(cè))
- 精益軟件度量——實(shí)踐者的觀察與思考
- 現(xiàn)代軟件工程
- Apache Cordova移動(dòng)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)
- MATLAB函數(shù)速查手冊(cè)(修訂版)