前言
隨著業(yè)務(wù)的擴(kuò)張,跑web機(jī)器越來越多,傳統(tǒng)方式如果想看網(wǎng)站的分析報(bào)告,需要從各個web機(jī)器獲取日志,然后通過awk等命令行進(jìn)行輸出。
而目前的主流方式是使用elk的方式對日志集中獲取并展示
- elasticsearch 一個
Nosql數(shù)據(jù)庫,專門存儲日志信息,暫時可以理解成Mysql。對比資料 - logstash 一個可以通過各種方式獲取日志的開源軟件
- kibana 將數(shù)據(jù)從數(shù)據(jù)庫中查詢出來并通過圖表展示
數(shù)據(jù)流向

- 安裝在各個web服務(wù)器的
logstash收集日志數(shù)據(jù) -
logstash將日志數(shù)據(jù)發(fā)送給elasticsearch數(shù)據(jù)庫 -
kibana查詢elasticsearch數(shù)據(jù)庫并展示數(shù)據(jù)
大致的系統(tǒng)性認(rèn)知
這個視頻有5集,全程可以2倍速度觀看,大致可以了解各個軟件是干什么的,怎么運(yùn)行的。以及學(xué)習(xí)python使用logstash傳送數(shù)據(jù)
手把手搭建一個elk
# 簡直不要太簡單
git clone https://github.com/deviantony/docker-elk.git
cd docker-elk
docker-compose up -d
等docker拉取鏡像并啟動之后。。。
[kui.xiong@xm11-112 docker-elk]$ dc ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------------------------
homekuixiongdockerelk_elasticsearch_1 /usr/local/bin/docker-entr ... Up 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp
homekuixiongdockerelk_kibana_1 /usr/local/bin/kibana-docker Up 0.0.0.0:5601->5601/tcp
homekuixiongdockerelk_logstash_1 /usr/local/bin/docker-entr ... Up 0.0.0.0:5000->5000/tcp, 5044/tcp, 0.0.0.0:9600->9600/tcp
稍微等kibana加載完,進(jìn)入http://localhost:5601即可看到kibana界面
如果碰到需要輸入賬戶密碼的情況,可參照readme的修改密碼教程修改密碼
搭建完成后,可以試著進(jìn)入搭建的kibana看看如何使用的,順便推幾個數(shù)據(jù)上去練練手。
到目前為止,可以對elk有個稍微清晰的認(rèn)知。但是如果要自己搭建一個真正的elk,肯定要學(xué)會logstash是如何使用的,以下介紹logstash是如何使用的
安裝logstash
由于剛剛logstash的鏡像操作有些不方便,所以我在另一個虛擬機(jī)安裝一個logstash,然后發(fā)送數(shù)據(jù)到本地的elasticsearch端口上
安裝步驟
使用logstash
非常詳細(xì)的logstash中文使用說明(有些配置新版的logstash不兼容,請以官方文檔為準(zhǔn))
使用心得
使用logstash一般只需配置兩個文件
-
logstash.yml是全局的logstash配置文件,啟動logstash時加載的 -
test.conf單個logstash監(jiān)聽配置,放在任何地方口可以
配置任何logstash任務(wù)只需跟這兩個文件有關(guān)
參考示例
將控制臺輸入的數(shù)據(jù)推送到遠(yuǎn)端elasticsearch中,我們將全部配置只放在單個配置中
/tmp/config/test.conf
input {
stdin {
add_field => {"key" => "value"}
codec => "plain"
tags => ["add"]
type => "std"
}
}
output {
elasticsearch {
hosts => "eshost:9200"
user => "elastic"
password => "password"
}
}
運(yùn)行命令
logstash -f /tmp/config/test.conf
接著在鍵盤上隨便敲,就會將數(shù)據(jù)發(fā)給elasticsearch,接著在kibana上呈現(xiàn)

單個傳入的json數(shù)據(jù)
{
"_index": "logstash-2019.07.30-000001",
"_type": "_doc",
"_id": "kSI0RmwBEDGCNjTu4LWH",
"_version": 1,
"_score": null,
"_source": {
"message": "example\n",
"@version": "1",
"@timestamp": "2019-07-31T04:06:06.091Z",
"host": "hostname",
"key": "value",
"type": "std",
"tags": [
"add"
]
},
"fields": {
"@timestamp": [
"2019-07-31T04:06:06.091Z"
]
},
"sort": [
1564545966091
]
}
grok介紹
你可以用grok插件將日志的數(shù)據(jù)提取出來插入進(jìn)elasticsearch中,主要使用了正則表達(dá)式
grok測試工具 注意工具中預(yù)制的可能已經(jīng)啟用,請謹(jǐn)慎使用