网友写的ELK安装步骤
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
https://my.oschina.net/itblog/blog/547250
摘要: 前段時(shí)間研究的Log4j+Kafka中,有人建議把Kafka收集到的日志存放于ES(ElasticSearch,一款基于Apache Lucene的開源分布式搜索引擎)中便于查找和分析,在研究此方案可行性的時(shí)候,我發(fā)現(xiàn)ELK(ElasticSearch, Logstash, Kibana)平臺(tái)恰好可以同時(shí)實(shí)現(xiàn)日志收集、日志搜索和日志分析的功能,于是又去學(xué)習(xí)了一番。之后發(fā)現(xiàn)如果使用這三者,收集日志也可以不再使用Kafka了,Logstash就可以幫我們完成。當(dāng)然,雖然Logstash也支持使用Kafka作為數(shù)據(jù)源輸入,但是使用這三者就沒有必要再增加系統(tǒng)復(fù)雜度了。
ELK平臺(tái)介紹
在搜索ELK資料的時(shí)候,發(fā)現(xiàn)這篇文章比較好,于是摘抄一小段:
以下內(nèi)容來自:http://baidu.blog.51cto.com/71938/1676798
日志主要包括系統(tǒng)日志、應(yīng)用程序日志和安全日志。系統(tǒng)運(yùn)維和開發(fā)人員可以通過日志了解服務(wù)器軟硬件信息、檢查配置過程中的錯(cuò)誤及錯(cuò)誤發(fā)生的原因。經(jīng)常分析日志可以了解服務(wù)器的負(fù)荷,性能安全性,從而及時(shí)采取措施糾正錯(cuò)誤。
通常,日志被分散的儲(chǔ)存不同的設(shè)備上。如果你管理數(shù)十上百臺(tái)服務(wù)器,你還在使用依次登錄每臺(tái)機(jī)器的傳統(tǒng)方法查閱日志。這樣是不是感覺很繁瑣和效率低下。當(dāng)務(wù)之急我們使用集中化的日志管理,例如:開源的syslog,將所有服務(wù)器上的日志收集匯總。
集中化管理日志后,日志的統(tǒng)計(jì)和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實(shí)現(xiàn)檢索和統(tǒng)計(jì),但是對(duì)于要求更高的查詢、排序和統(tǒng)計(jì)等要求和龐大的機(jī)器數(shù)量依然使用這樣的方法難免有點(diǎn)力不從心。
開源實(shí)時(shí)日志分析ELK平臺(tái)能夠完美的解決我們上述的問題,ELK由ElasticSearch、Logstash和Kiabana三個(gè)開源工具組成。官方網(wǎng)站:https://www.elastic.co/products
-
Elasticsearch是個(gè)開源分布式搜索引擎,它的特點(diǎn)有:分布式,零配置,自動(dòng)發(fā)現(xiàn),索引自動(dòng)分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動(dòng)搜索負(fù)載等。
-
Logstash是一個(gè)完全開源的工具,他可以對(duì)你的日志進(jìn)行收集、過濾,并將其存儲(chǔ)供以后使用(如,搜索)。
-
Kibana 也是一個(gè)開源和免費(fèi)的工具,它Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要數(shù)據(jù)日志。
----------------------------摘抄內(nèi)容結(jié)束-------------------------------
畫了一個(gè)ELK工作的原理圖:
如圖:Logstash收集AppServer產(chǎn)生的Log,并存放到ElasticSearch集群中,而Kibana則從ES集群中查詢數(shù)據(jù)生成圖表,再返回給Browser。
?
ELK平臺(tái)搭建
系統(tǒng)環(huán)境
System: Centos release 6.7 (Final)
ElasticSearch: 2.1.0
Logstash: 2.1.1
Kibana: 4.3.0
Java: openjdk version ?"1.8.0_65"
注:由于Logstash的運(yùn)行依賴于Java環(huán)境, 而Logstash 1.5以上版本不低于java 1.7,因此推薦使用最新版本的Java。因?yàn)槲覀冎恍枰狫ava的運(yùn)行環(huán)境,所以可以只安裝JRE,不過這里我依然使用JDK,請(qǐng)自行搜索安裝。
ELK下載:https://www.elastic.co/downloads/
?
ElasticSearch
配置ElasticSearch:
tar?-zxvf?elasticsearch-2.1.0.tar.gz cd?elasticsearch-2.1.0安裝Head插件(Optional):
./bin/plugin?install?mobz/elasticsearch-head然后編輯ES的配置文件:
vi?config/elasticsearch.yml修改以下配置項(xiàng):
cluster.name=es_cluster node.name=node0 path.data=/tmp/elasticsearch/data path.logs=/tmp/elasticsearch/logs #當(dāng)前hostname或IP,我這里是centos2 network.host=centos2 network.port=9200其他的選項(xiàng)保持默認(rèn),然后啟動(dòng)ES:
./bin/elasticsearch可以看到,它跟其他的節(jié)點(diǎn)的傳輸端口為9300,接受HTTP請(qǐng)求的端口為9200。
使用ctrl+C停止。當(dāng)然,也可以使用后臺(tái)進(jìn)程的方式啟動(dòng)ES:
./bin/elasticsearch?&然后可以打開頁面localhost:9200,將會(huì)看到以下內(nèi)容:
返回展示了配置的cluster_name和name,以及安裝的ES的版本等信息。
剛剛安裝的head插件,它是一個(gè)用瀏覽器跟ES集群交互的插件,可以查看集群狀態(tài)、集群的doc內(nèi)容、執(zhí)行搜索和普通的Rest請(qǐng)求等。現(xiàn)在也可以使用它打開localhost:9200/_plugin/head頁面來查看ES集群狀態(tài):
可以看到,現(xiàn)在,ES集群中沒有index,也沒有type,因此這兩條是空的。
?
Logstash
Logstash的功能如下:
其實(shí)它就是一個(gè)收集器而已,我們需要為它指定Input和Output(當(dāng)然Input和Output可以為多個(gè))。由于我們需要把Java代碼中Log4j的日志輸出到ElasticSearch中,因此這里的Input就是Log4j,而Output就是ElasticSearch。
配置Logstash:
tar?-zxvf?logstash-2.1.1.tar.gz cd?logstash-2.1.1編寫配置文件(名字和位置可以隨意,這里我放在config目錄下,取名為log4j_to_es.conf):
mkdir?config vi?config/log4j_to_es.conf輸入以下內(nèi)容:
#?For?detail?structure?of?this?file #?Set:?https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html input?{#?For?detail?config?for?log4j?as?input,?#?See:?https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.htmllog4j?{mode?=>?"server"host?=>?"centos2"port?=>?4567} } filter?{#Only?matched?data?are?send?to?output. } output?{#?For?detail?config?for?elasticsearch?as?output,?#?See:?https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.htmlelasticsearch?{action?=>?"index"?????? #The?operation?on?EShosts??=>?"centos2:9200" #ElasticSearch?host,?can?be?array.index??=>?"applog"????? #The?index?to?write?data?to.} }logstash命令只有2個(gè)參數(shù):
因此使用agent來啟動(dòng)它(使用-f指定配置文件):
./bin/logstash?agent?-f?config/log4j_to_es.conf到這里,我們已經(jīng)可以使用Logstash來收集日志并保存到ES中了,下面來看看項(xiàng)目代碼。
?
Java項(xiàng)目
照例先看項(xiàng)目結(jié)構(gòu)圖:
pom.xml,很簡單,只用到了Log4j庫:
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>log4j.properties,將Log4j的日志輸出到SocketAppender,因?yàn)楣倬W(wǎng)是這么說的:
log4j.rootLogger=INFO,console#?for?package?com.demo.elk,?log?would?be?sent?to?socket?appender. log4j.logger.com.demo.elk=DEBUG,?socket#?appender?socket log4j.appender.socket=org.apache.log4j.net.SocketAppender log4j.appender.socket.Port=4567 log4j.appender.socket.RemoteHost=centos2 log4j.appender.socket.layout=org.apache.log4j.PatternLayout log4j.appender.socket.layout.ConversionPattern=%d?[%-5p]?[%l]?%m%n log4j.appender.socket.ReconnectionDelay=10000#?appender?console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d?[%-5p]?[%l]?%m%n注意:這里的端口號(hào)需要跟Logstash監(jiān)聽的端口號(hào)一致,這里是4567。
Application.java,使用Log4j的LOGGER打印日志即可:
package?com.demo.elk;import?org.apache.log4j.Logger;public?class?Application?{private?static?final?Logger?LOGGER?=?Logger.getLogger(Application.class);public?static?void?main(String[]?args)?throws?Exception?{for?(int?i?=?0;?i?<?10;?i++)?{LOGGER.error("Info?log?["?+?i?+?"].");Thread.sleep(500);}} }用Head插件查看ES狀態(tài)和內(nèi)容
運(yùn)行Application.java,先看看console的輸出(當(dāng)然,這個(gè)輸出只是為了做驗(yàn)證,不輸出到console也可以的):
再來看看ES的head頁面:
切換到Browser標(biāo)簽:
單擊某一個(gè)文檔(doc),則會(huì)展示該文檔的所有信息:
可以看到,除了基礎(chǔ)的message字段是我們的日志內(nèi)容,Logstash還為我們增加了許多字段。而在https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html中也明確說明了這一點(diǎn):
上面使用了ES的Head插件觀察了ES集群的狀態(tài)和數(shù)據(jù),但這只是個(gè)簡單的用于跟ES交互的頁面而已,并不能生成報(bào)表或者圖表什么的,接下來使用Kibana來執(zhí)行搜索并生成圖表。
?
Kibana
配置Kibana:
tar?-zxvf?kibana-4.3.0-linux-x86.tar.gz cd?kibana-4.3.0-linux-x86 vi?config/kibana.yml修改以下幾項(xiàng)(由于是單機(jī)版的,因此host的值也可以使用localhost來代替,這里僅僅作為演示):
server.port:?5601 server.host:?“centos2” elasticsearch.url:?http://centos2:9200 kibana.index:?“.kibana”啟動(dòng)kibana:
./bin/kibana用瀏覽器打開該地址:
為了后續(xù)使用Kibana,需要配置至少一個(gè)Index名字或者Pattern,它用于在分析時(shí)確定ES中的Index。這里我輸入之前配置的Index名字applog,Kibana會(huì)自動(dòng)加載該Index下doc的field,并自動(dòng)選擇合適的field用于圖標(biāo)中的時(shí)間字段:
點(diǎn)擊Create后,可以看到左側(cè)增加了配置的Index名字:
接下來切換到Discover標(biāo)簽上,注意右上角是查詢的時(shí)間范圍,如果沒有查找到數(shù)據(jù),那么你就可能需要調(diào)整這個(gè)時(shí)間范圍了,這里我選擇Today:
接下來就能看到ES中的數(shù)據(jù)了:
執(zhí)行搜索看看呢:
點(diǎn)擊右邊的保存按鈕,保存該查詢?yōu)閟earch_all_logs。接下來去Visualize頁面,點(diǎn)擊新建一個(gè)柱狀圖(Vertical Bar Chart),然后選擇剛剛保存的查詢search_all_logs,之后,Kibana將生成類似于下圖的柱狀圖(只有10條日志,而且是在同一時(shí)間段的,比較丑,但足可以說明問題了:) ?):
你可以在左邊設(shè)置圖形的各項(xiàng)參數(shù),點(diǎn)擊Apply Changes按鈕,右邊的圖形將被更新。同理,其他類型的圖形都可以實(shí)時(shí)更新。
點(diǎn)擊右邊的保存,保存此圖,命名為search_all_logs_visual。接下來切換到Dashboard頁面:
單擊新建按鈕,選擇剛剛保存的search_all_logs_visual圖形,面板上將展示該圖:
如果有較多數(shù)據(jù),我們可以根據(jù)業(yè)務(wù)需求和關(guān)注點(diǎn)在Dashboard頁面添加多個(gè)圖表:柱形圖,折線圖,地圖,餅圖等等。當(dāng)然,我們可以設(shè)置更新頻率,讓圖表自動(dòng)更新:
如果設(shè)置的時(shí)間間隔夠短,就很趨近于實(shí)時(shí)分析了。
到這里,ELK平臺(tái)部署和基本的測試已完成。
?
參考:
http://baidu.blog.51cto.com/71938/1676798
http://blog.csdn.net/cnweike/article/details/33736429
轉(zhuǎn)載于:https://my.oschina.net/qiangzigege/blog/845430
總結(jié)
以上是生活随笔為你收集整理的网友写的ELK安装步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SVG做圆环进度
- 下一篇: notepad 替换行收尾字符串或在行首