ELK(ElasticSearch+Logstash+Kibana)+redis日誌收集分析系統
日誌主要包括系統日誌、應用程式日誌和安全日誌。系統運維和開發人員可以通過日誌瞭解伺服器軟硬體資訊、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日誌可以瞭解伺服器的負荷,效能安全性,從而及時採取措施糾正錯誤。
通常,日誌被分散的儲存不同的裝置上。如果你管理數十上百臺伺服器,你還在使用依次登入每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日誌管理,例如:開源的syslog,將所有伺服器上的日誌收集彙總。
集中化管理日誌後,日誌的統計和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。
開源實時日誌分析ELK平臺能夠完美的解決我們上述的問題,ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。官方網站:https://www.elastic.co
Elasticsearch是個開源分散式搜尋引擎,它的特點有:分散式,零配置,自動發現,索引自動分片,索引副本機制,restful風格介面,多資料來源,自動搜尋負載等。
Logstash是一個完全開源的工具,他可以對你的日誌進行收集、分析,並將其儲存供以後使用(如,搜尋)
kibana也是一個開源和免費的工具,他Kibana可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 介面,可以幫助您彙總、分析和搜尋重要資料日誌。
開源實時日誌分析ELK平臺部署流程:
1、安裝Logstash依賴包JDK
Logstash的執行依賴於Java執行環境, Logstash 1.5以上版本不低於java 7推薦使用最新版本的Java。由於我們只是執行Java程式,而不是開發,下載JRE即可。首先,在Oracle官方下載新版jre,下 載地址:http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
#tar-zxfjdk-8u45-linux-x64.tar.gz-C/usr/local/ 設定環境變數/etc/profile,新增一下程式碼 exportJAVA_HOME=/usr/local/jdk1.8.0_45 exportPATH=$PATH:$JAVA_HOME/bin exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH #source/etc/profile 測試是否安裝成功 #java-version
2、安裝Logstash (日誌收集、分析,並將其儲存供以後使用)
下載並安裝Logstash,安裝logstash只需將它解壓的對應目錄即可,例如:/usr/local下:
下載地址https://www.elastic.co/downloads/logstash
#https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz #tar–zxflogstash-2.4.0.tar.gz-C/usr/local/
安裝完成後執行如下命令啟動logstash:
普通方式啟動
#logstash-e'input{stdin{}}output{stdout{}}' Settings:Defaultpipelineworkers:2 Pipelinemainstarted 等待輸入:helloworld 2016-09-06T06:22:50.326Zlocalhost.localdomainhelloworld 我們可以看到,我們輸入什麼內容logstash按照某種格式輸出,其中-e引數引數允許Logstash直接通過命令列接受設定。這點尤其快速的幫助我們反覆的測試配置是否正確而不用寫配置檔案。使用CTRL-C命令可以退出之前執行的Logstash。
使用-e引數在命令列中指定配置是很常用的方式,不過如果需要配置更多設定則需要很長的內容。
這種情況,我們首先建立一個簡單的配置檔案,並且指定logstash使用這個配置檔案。
例如:在logstash安裝目錄下建立一個“基本配置”測試檔案logstash-test.conf,檔案內容如下:
#catlogstash-test.conf input{stdin{}} output{stdout{codec=>rubydebug}}
Logstash使用input和output定義收集日誌時的輸入和輸出的相關配置,本例中input定義了一個叫"stdin"的input,output定義一個叫"stdout"的output。
無論我們輸入什麼字元,Logstash都會按照某種格式來返回我們輸入的字元,其中output被定義為"stdout"並使用了codec引數來指定logstash輸出格式。
開啟debug模式啟動
使用logstash的-f引數來讀取配置檔案然後啟動,執行如下開始進行測試:(debug方式啟動)
#/usr/local/logstash-2.3.4/bin/logstashagent-f/usr/local/logstash-2.3.4/conf/logstash-test.conf Logstashstartupcompleted TueJul1418:07:07EDT2015helloWorld#該行是執行echo“`date`helloWorld”後輸出的結果,直接貼上到該位置,然後會輸出下面結果 { "message"=>"TueSep614:25:52CST2016helloworld", "@version"=>"1", "@timestamp"=>"2016-09-06T06:26:31.270Z", "host"=>"localhost.localdomain" }
2.1、logstash輸出資訊到redis資料庫中
剛才我們是將資訊直接顯示在螢幕上了,現在我們將logstash的輸出資訊儲存到redis資料庫中,
logstash輸出資訊儲存到redis資料庫中,redis其實就充當一個訊息佇列,並不作為儲存,等待elasticsearch的消費
前提是本地安裝有redis資料庫,那麼下一步我們就是安裝redis資料庫.
#cat/usr/local/logstash-2.3.4/conf/logstash_index_redis.conf將資訊儲存到redis input{stdin{}} output{ stdout{codec=>rubydebug} redis{ host=>'10.2.8.45' port=>6379 data_type=>'list' key=>'logstash' } }
logstash的預設埠號9301
# netstat -tnlp |grep 9301
服務端的redis收集日誌配置檔案
#catlogstash_index_redis.conf從redis讀取資訊,並且傳送到elasticsearch input{ redis{ host=>"10.2.8.45" port=>6379 data_type=>"list" key=>"logstash" codec=>"json" } } output{ stdout{codec=>rubydebug} elasticsearch{hosts=>"10.2.8.45"} }
客戶端將收集的資訊儲存到redis的配置檔案
#catlogstash_agent.conf input{ file{ path=>["/var/log/messages","/var/log/*.log"] type=>"system" start_position=>beginning } } output{ stdout{codec=>rubydebug} redis{ host=>"10.2.8.45" port=>6379 data_type=>"list" key=>"logstash" } #elasticsearch{hosts=>"10.2.8.45"} }
3、安裝Elasticsearch
下載地址 https://www.elastic.co/downloads/elasticsearch
建立啟動elasticsearch的普通使用者(預設情況下不能使root使用者啟動elasticsearch)
#groupaddelk #useraddelasticsearch-gelk
安裝
#tarzxvfhttps://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.0/elasticsearch-2.4.0.tar.gz-C/usr/local/ #修改配置檔案/usr/local/elasticsearch-2.3.5/config/elasticsearch.yml network.host:10.2.8.45#埠繫結ip地址 http.port:9200
啟動(注意! 預設是不能使用root使用者啟動,要使用普通使用者)
#su-elasticsearch #nohup/usr/local/elasticsearch-2.3.5/bin/elasticsearch>nohup& #netstat-anp|grep:9200 #curlhttp://localhost:9200#檢視當前elastcisearch狀態
接下來我們在logstash安裝目錄下建立一個用於測試logstash使用elasticsearch作為logstash的後端的測試檔案logstash_elasticsearch.conf,
該檔案中定義了stdout和elasticsearch作為output,這樣的“多重輸出”即保證輸出結果顯示到螢幕上,同時也輸出到elastisearch中。
#cat/user/local/logstash-2.3.4/conf.d/logstash_elasticsearch.conf input{stdin{}}#手動輸入內容 output{ elasticsearch{hosts=>"localhost"}#輸出到elasticsearch stdout{codec=>rubydebug}#輸出到螢幕上 }
執行如下命令
#logstashagent-f/user/local/logstash-2.3.4/conf.d/logstash_elasticsearch.conf hellologstash#輸入 輸出如下結果 { "message"=>"hellologstash", "@version"=>"1", "@timestamp"=>"2016-09-06T06:49:39.654Z", "host"=>"localhost.localdomain" }
我們可以使用curl命令傳送請求來檢視ES是否接收到了資料:
#curlhttp://localhost:9200/_search?pretty
至此,已經成功利用Elasticsearch和Logstash來收集日誌資料了
3.1、安裝elasticsearch外掛
Elasticsearch-kopf外掛可以查詢Elasticsearch中的資料,安裝elasticsearch-kopf,只要在你安裝Elasticsearch的目錄中執行以下命令即可:
#cd/usr/local/elasticsearch-2.3.5/bin #./plugininstalllmenezes/elasticsearch-kopf
執行外掛安裝後會提示失敗,很有可能是網路等情況.. 若下載失敗可以手動下載該軟體,不通過外掛安裝命令... #cd/usr/local/elasticsearch-2.3.5/plugins #wgethttps://github.com/lmenezes/elasticsearch-kopf/archive/master.zip #unzipmaster.zip #mvelasticsearch-kopf-masterkopf 安裝完成後在plugins目錄下可以看到kopf目錄 瀏覽器訪問kopf頁面訪問elasticsearch儲存的資料http://10.2.8.45:9200/_plugin/kopf/
4、安裝Kibana
#wgethttps://download.elastic.co/kibana/kibana/kibana-4.6.0-linux-x86_64.tar.gz 修改配置檔案/usr/local/kibana-4.6.0-linux-x86_64/config/kibana.yml elasticsearch.url:" 啟動(後臺啟動) #nohup/usr/local/kibana-4.6.0-linux-x86_64/bin/kibana>nohup.out& 預設埠5601 #netstat-tnlp|grep5601
ELK預設埠 logstash9301 elasticsearch92009300 kibana5601
瀏覽器訪問 http://10.2.8.45:5601
頁面錯誤提示:
1、ThisversionofKibanarequiresElasticsearch^2.4.0onallnodes.Ifoundthefollowingincompatiblenodesinyourcluster:[email protected]:9200(10.2.8.45) 說明是Kibana版本和elasticsearch的版本不匹配,檢視官網,安裝匹配版本 2、unabletofetchmapping.這就說明logstash沒有把日誌寫入到elasticsearch。 檢查logstash與elasticsearch之間的通訊是否有問題,一般問題就在這。修改完成後重啟應用
然後點選“Discover”,可以搜尋和瀏覽Elasticsearch中的資料,預設搜尋的是最近15分鐘的資料。可以自定義選擇時間。
到此,說明你的ELK平臺安裝部署完成。
客戶端安裝
客戶端只需要安裝logstash即可,安裝方法如上1和2(必須要安裝jdk)
然後在/usr/local/logstash-2.3.4/conf/新增logstash_agent.conf配置檔案(可按需修改)
#catlogstash_agent.conf input{ file{ path=>["/var/log/messages","/var/log/*.log"]#要收集的日誌檔案 type=>"system"#自定義型別,會在kibana中顯示 start_position=>beginning } } output{ stdout{codec=>rubydebug} redis{ host=>"10.2.8.45" port=>6379 data_type=>"list" key=>"logstash" } #elasticsearch{hosts=>"10.2.8.45"} } 後臺執行 #nohup/usr/local/logstash-2.3.4/bin/logstashagent-f/usr/local/logstash-2.3.4/conf/logstash_agent.conf>/usr/local/logstash-2.3.4/logstash.log2>&1& 檢視程序 #ps-ef|grepjava
轉載於:https://blog.51cto.com/liumissyou/1850973