前言
上一篇 基于docker部署的微服務(wù)架構(gòu)(六): 日志統(tǒng)一輸出到kafka中間件 中,已經(jīng)把分散在各個項目中的日志集中輸出到了 kafka 中間件,可以在 kafka 中查看所有項目的日志舍败。這種在控制臺查看日志的方式很不方便,也不直觀氯哮,搜索功能也很弱掂碱,不能滿足日志統(tǒng)計分析的需求。下邊來搭建 ELK 日志統(tǒng)計分析系統(tǒng)春感,通過 kibana 提供的web頁面來查看日志砌创。
簡單介紹下 ELK , ELK 是 elasticsearch鲫懒、 logstash嫩实、kibana 的簡稱,這三種工具各司其職窥岩,一起協(xié)作完成日志統(tǒng)計分析的功能甲献。
- logstash 日志收集管道,把日志導(dǎo)入到 elasticsearch
- elasticsearch 存儲日志颂翼,并提供基于 Lucene 的全文檢索功能
- kibana 提供日志數(shù)據(jù)展示界面和各種統(tǒng)計圖表
之前已經(jīng)把日志都輸出到 kafka 的 basic-log topic 下晃洒,只需要使用 logstash 把 kafka 中的數(shù)據(jù)導(dǎo)入到 elasticsearch 即可。
搭建ELK
啟動 elasticsearch 的 docker 容器:
elasticsearch 容器比較簡單朦乏,只需要掛載一個數(shù)據(jù)卷用來存儲數(shù)據(jù)即可球及。
運行 docker pull elasticsearch:5.0.1
下載 elasticsearch 目前最新的鏡像文件。
在宿主機(jī)上創(chuàng)建掛載目錄 mkdir -p /elasticsearch/data
呻疹,用于存儲數(shù)據(jù)吃引。
運行
docker run -d --name elasticsearch \
--volume /etc/localtime:/etc/localtime \
--volume /elasticsearch/data:/usr/share/elasticsearch/data \
--publish 9200:9200 \
--publish 9300:9300 \
elasticsearch:5.0.1
啟動 elasticsearch 容器。
啟動時如果報 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
刽锤,修改配置文件 vim /etc/sysctl.conf
镊尺,增加 vm.max_map_count=655360
。保存之后運行 sysctl -p
并思。重新啟動 elasticsearch 容器庐氮。
啟動 logstash 的 docker 容器:
logstash 容器需要使用自定義的鏡像,用 CMD 指定加載配置文件宋彼,才能在啟動容器的時候使用 -d
參數(shù)運行在后臺旭愧。直接在 docker run -d
的時候指定配置文件,在容器啟動之后會自動退出宙暇,不知道是不是 bug输枯,但是使用自定義鏡像可以解決這個問題。
運行 docker pull logstash:5.0.1-1
下載 logstash 目前最新的鏡像文件占贫。
在宿主機(jī)上創(chuàng)建掛載目錄 mkdir -p /logstash/config-dir
桃熄,用于存放 logstash 的配置文件。
在目錄中創(chuàng)建 logstash.conf 配置文件,文件內(nèi)容:
input {
kafka {
bootstrap_servers => "kafka:9092"
group_id => "logstash"
topics => ["basic-log"]
}
}
output {
stdout {}
elasticsearch {
hosts => ["elasticsearch:9200"]
}
}
配置文件配置了一個 input 數(shù)據(jù)輸入源瞳收,從 kafka 的 basic-log topic 讀取數(shù)據(jù)碉京。
配置了兩個 output 輸出源:
- stdout 控制臺輸出,把從 input 讀取的數(shù)據(jù)輸出到 logstash 控制臺
- elasticsearch 把從 input 讀取的數(shù)據(jù)輸出到 elasticsearch
這里的 kafka 和 elasticsearch 通過 docker 的 --link
連接螟深。
創(chuàng)建 Dockerfile 文件谐宙,指定加載 logstash.conf 配置文件,Dockerfile 文件內(nèi)容:
FROM logstash:5.0.1-1
CMD ["-f", "/config-dir/logstash.conf"]
在 Dockerfile 所在的目錄運行 docker build -t my-logstash:5.0.1-1 .
界弧,創(chuàng)建自定義的 logstash 鏡像 my-logstash凡蜻,使用 my-logstash 鏡像就可以通過 -d
參數(shù)讓容器運行在后臺了。
在 elasticsearch 容器已經(jīng)啟動的情況下垢箕,運行
docker run -d --name logstash \
--volume /etc/localtime:/etc/localtime \
--volume /logstash/config-dir:/config-dir \
--link kafka \
--link elasticsearch \
my-logstash:5.0.1-1
因為配置了 stdout 輸出划栓,容器啟動之后,可以通過 docker logs -f logstash容器ID
查看從 kafka 中讀取的日志數(shù)據(jù)条获。
最后只需要再啟動 kibana 就可以在web頁面中查看日志數(shù)據(jù)了忠荞。
啟動 kibana 的 docker 容器:
kibana 容器只需要連接 elasticsearch 即可。
運行 docker pull kibana:5.0.1
下載 kibana 目前最新的鏡像文件帅掘。
在 elasticsearch 容器已經(jīng)啟動的情況下委煤,運行
docker run -d --name kibana \
--volume /etc/localtime:/etc/localtime \
--link elasticsearch \
--publish 5601:5601
kibana 容器啟動成功之后,就可以訪問 http://宿主機(jī)IP:5601 打開 kibana 的頁面了修档。
可以在 kibana 中看到所有的日志數(shù)據(jù)碧绞。