ELK技術實戰-安裝Elk 5.x平臺

ELK技術實戰–瞭解Elk各組件   轉載  http://www.ywnds.com/?p=9776php

ELK技術實戰-部署Elk 2.x平臺html

ELK Stack是軟件集合Elasticsearch、Logstash、Kibana的簡稱,由這三個軟件及其相關的組件能夠打造大規模日誌實時處理系統。java

其中,Elasticsearch 是一個基於 Lucene 的、支持全文索引的分佈式存儲和索引引擎,主要負責將日誌索引並存儲起來,方便業務方檢索查詢。node

Logstash是一個日誌收集、過濾、轉發的中間件,主要負責將各條業務線的各種日誌統一收集、過濾後,轉發給 Elasticsearch 進行下一步處理。linux

Kibana是一個可視化工具,主要負責查詢 Elasticsearch 的數據並以可視化的方式展示給業務方,好比各種餅圖、直方圖、區域圖等。nginx

所謂「大規模」,指的是 ELK Stack 組成的系統以一種水平擴展的方式支持天天收集、過濾、索引和存儲 TB 規模以上的各種日誌。git

一般,各種文本形式的日誌都在處理範圍,包括但不限於 Web 訪問日誌,如 Nginx/Apache Access Log 。github

基於對日誌的實時分析,能夠隨時掌握服務的運行情況、統計 PV/UV、發現異常流量、分析用戶行爲、查看熱門站內搜索關鍵詞等。web

版本跳躍redis

ELK在5.0版本之後(從2.x版本直接所有升級爲5.x版本),Elastic公司將原來的ELK Stack稱之爲Elastic Stack,緣由是引入了Beats套件。

Elastic Products全家福:

ELK技術實戰-安裝Elk 5.x平臺

Elastic Stack平臺搭建

對於ELK部署使用而言,下面是一個再常見不過的架構了,以下圖:

ELK技術實戰-安裝Elk 5.x平臺

上圖是ELK Stack實際應用中典型的一種架構,其中:

1)filebeat:部署在具體的業務機器上,經過定時監控的方式獲取增量的日誌,並轉發到Kafka消息系統暫存。

2)Kafka:以高吞吐量的特徵,做爲一個消息系統的角色,接收從filebeat收集轉發過來的日誌,一般以集羣的形式提供服務。

3)logstash:而後,Logstash從Kafka中獲取日誌,並經過Input-Filter-Output三個階段的處理,更改或過濾日誌,最終輸出咱們感興趣的數據。一般,根據Kafka集羣上分區(Partition)的數量,1:1肯定Logstash實例的數量,組成Consumer Group進行日誌消費。

4)elasticsearch:最後,Elasticsearch存儲並索引Logstash轉發過來的數據,並經過Kibana查詢和可視化展現,達到實時分析日誌的目的。

Elasticsearch/Kibana還能夠經過安裝x-pack插件實現擴展功能,好比監控Elasticsearch集羣狀態、數據訪問受權等。

咱們一步步安裝部署Elastic Stack系統的各個組件,而後以網站訪問日誌爲例進行數據實時分析。

首先,到ELK 官網下載須要用到的Filebeat/Logstash/Elasticsearch/Kibana軟件安裝包。(推薦下載編譯好的二進制可執行文件,直接解壓執行就能夠部署)

1. 系統環境

2. 軟件下載

 

這裏我下載是我所使用的軟件版本(都是當前最新版),若是你想使用舊一點或者更新一點的版本能夠自行下載。

 

3. 安裝Nginx

這裏咱們部署ELK以前,須要一個產生日誌的源,這裏呢就選項Nginx服務器。

默認狀況下,CentOS的官方資源是沒有php-fpm和Nginx的,須要安裝第三方資源庫便可。(此步驟可省略)

 

安裝啓動nginx(關於nginx能夠看本博客也有詳細介紹)

 

 

nginx的訪問日誌格式定義,默認以下:

在/etc/nginx/conf.d/default.conf中添加以下一行,定義nginx日誌使用的格式,以及日誌文件的位置。

 

而後從新啓動nginx

 

4. 安裝JAVA

因爲kafka/logstash/elastisearch的運行依賴於Java環境, 而Logstash 1.5以上版本依賴java版本不能低於java 1.7,所以推薦使用最新版本的Java。由於咱們只須要Java的運行環境,因此能夠只安裝JRE,不過這裏我依然使用JDK。因爲我使用的是CentOS7系統,java版本是1.8,符合需求,我就使用yum直接安裝了。

 

查看JAVA版本

若是java -version沒有問題,就不須要設置環境變量。通常使用yum安裝的jdk不須要設置JAVA_HOME環境變量。若是你是使用二進制版本安裝的jdk,那麼可能須要設置一下JAVA_HOME環境變量,具體的JAVA_HOME環境變量設置根據安裝路徑不一樣而不一樣。

5. 安裝部署Kafka

確認已安裝java運行環境,直接解壓Kafka便可使用。

解壓後,編輯配置文件:

kafka須要依賴zookeeper,因此須要先啓動zookeeper。

啓動Kafka Server:(指定 JMX_PORT 端口,能夠經過 Kafka-manager 獲取統計信息)

6. 安裝部署Filebeat

把filebeat解壓後就可使用了,是否是很簡單。

開啓日誌增量監控 ,添加filebeat輸出源爲kafka(修改filebeat.yml文件):

上述配置表示,Filebeat按期監控:/var/log/nginx/目錄下全部以.log結尾的文件,而且將增量日誌轉發到Kafka集羣。filebeat支持file、tcp、udp等輸入方式,輸出方式支持kafka,file,redis,elasticsearch、logstash等。

而後,後臺啓動Filebeat進程:

這時候,在瀏覽器上訪問Nginx服務器並生成訪問日誌後,Filebeat 會及時的將日誌轉發到 Kafka 集羣。

咱們這個時候能夠查一下kafka的隊列信息,能夠看到有elk-log的。

具體深刻kafka須要單獨學習了,若是嫌麻煩可使用Redis比較簡單。

7. 安裝配置Logstash


把logstash解壓後就可使用了,是否是很簡單。和全部的編程語言同樣,咱們以一個輸出 「hello world」 的形式開始咱們的logstash學習。

 

7.1 開始使用logstash

在終端中,像下面這樣運行命令來啓動 Logstash進程:

執行完命令,而後你會發現終端在等待你的輸入。沒問題,敲入hello world,而後回車,logstash會返回如下結果!

輸出沒有問題,就證實能夠正式來使用logstash了。

解釋一下命令含義

每位系統管理員都確定寫過不少相似這樣的命令:cat randdata | awk ‘{print $2}’ | sort | uniq -c | tee sortdata。這個管道符|能夠算是Linux世界最偉大的發明之一(另外一個是「一切皆文件」)。Logstash就像管道符同樣!你輸入(就像命令行的 cat )數據,而後處理過濾(就像 awk 或者 uniq 之類)數據,最後輸出(就像 tee )到其餘地方。

Logstash會給事件添加一些額外信息。最重要的就是@timestamp,用來標記事件的發生時間。由於這個字段涉及到Logstash的內部流轉,因此必須是一個job對象,若是你嘗試本身給一個字符串字段重命名爲@timestamp的話,Logstash會直接報錯。因此,請使用filters/date插件來管理這個特殊字段。

此外,大多數時候,還能夠見到另外幾個:

host – 標記事件發生在哪裏。

type – 標記事件的惟一類型。

tags – 標記事件的某方面屬性,這是一個數組,一個事件能夠有多個標籤。

你能夠隨意給事件添加字段或者從事件裏刪除字段。事實上事件就是一個 Ruby對象,或者更簡單的理解爲就是一個哈希也行。

小貼士:每一個logstash過濾插件,都會有四個方法叫add_tag, remove_tag, add_field和remove_field。它們在插件過濾匹配成功時生效。

Logstash的運行方式爲主程序+配置文件。Collect,Enrich和Transport的行爲在配置文件中定義。配置文件的格式有點像json。

下面來建立一個logstash_index.conf文件:

如上配置文件,input定義了從Redis中讀取數據;而output我是輸出到了本地的elasticsearch中存儲。

Logstash傳遞的每條數據都帶有元數據,如@version,@timestamp,host等等,有些能夠修改,有些不容許修改。host記錄的是當前的主機信息。Logstash可能不會去獲取主機的信息或者獲取的不許,這裏建議替換成本身定義的主機標識,以保證最終的日誌輸出能夠有完美的格式。

另外我這裏添加了elasticsearch的用戶名和密碼,由於後面我使用了x-pack插件,默認用戶名是elastic,密碼是changeme。

啓動Logstash:

8. 安裝使用Elastcearch

同Logstash同樣,解壓完就可使用了。可是注意使用elasticsearch不能使用root用戶,因此這裏我建立了一個elk用戶,把elasticsearch.2.3.2目錄及子目錄的屬主和屬組改成elk用戶了。

修改elasticsearch配置文件,添加以下幾行(注意開啓network.host):

指定文檔和日誌的存儲路徑以及監聽的地址和端口。注意,應當保證有足夠的磁盤空間來存儲文檔,不然ES將拒絕寫入新數據。

建立elasticsearch須要的數據目錄和日誌目錄。

啓動elasticsearch

 

若是啓動Elasticsearch出現如下錯誤提示:

錯誤1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

解決:打開/etc/security/limits.conf文件,添加如下兩行代碼並保存:

錯誤2:memory locking requested for elasticsearch process but memory is not locked

解決:修改elasticsearch.yml文件

錯誤3:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解決:修改內核配置

錯誤4:os::commit_memory(0x00000001006cd000, 77824, 0) failed; error=’Cannot allocate memory’ (errno=12)

解決:提供內存不足,增大主機內存或減少elasticsearch的內存大小

JVM默認配置參數:

而後使用curl訪問http://localhost:9200/?pretty

若是能夠看到相似上面的返回,則說明ES單機運行沒有問題了。

安裝x-pack插件

x-pack是elasticsearch的一個擴展包,將安全,警告,監視,圖形和報告功能捆綁在一個易於安裝的軟件包中,雖然x-pack被設計爲一個無縫的工做,可是你能夠輕鬆的啓用或者關閉一些功能。

ES若是是一個集羣,須要在每個節點上安裝(包括kibana)。

用戶和權限管理

x-pack安裝以後有一個超級用戶elastic ,其默認的密碼是changeme,擁有對全部索引和數據的控制權,可使用該用戶建立和修改其餘用戶,固然這裏能夠經過kibana的web界面進行用戶和用戶組的管理。

ELK技術實戰-安裝Elk 5.x平臺

X-pack的elk之間的數據傳遞保護

安裝完x-pack以後,咱們就能夠用咱們所建立的用戶來保護elk之間的數據傳遞

1:kibana<——>elasticsearch

在kibana.yml文件中配置:

2:logstash<——>elasticsearch

這裏若是不進行相關配置的話,elk之間的數據傳遞就會出現問題。

安裝Cerebro

Cerebro時一個第三方的Elasticsearch集羣管理軟件,能夠方便地查看集羣狀態:

下載地址(下載二進制版):https://github.com/lmenezes/cerebro

啓動進程:

能夠在瀏覽器查看,須要輸入elasticsearch的用戶和密碼(若是安裝了x-pack)。

ELK技術實戰-安裝Elk 5.x平臺

能夠在管理後臺修改模板,優化索引配置,例如:

ELK技術實戰-安裝Elk 5.x平臺

安裝head插件

因爲elasticsearch 5.0版本變化較大,目前elasticsearch 5.0暫時不支持直接安裝head插件,可是head做者提供了另外一種安裝方法。推薦使用docker直接安裝elasticsearch-head。

Docker須要自行安裝便可,另外因爲elasticsearch安裝了x-pack,因此elasticsearch有密碼。head鏈接elasticsearch須要帳號密碼。

8. 安裝kibana

Kibana安裝跟logstash、elasticsearch同樣不須要安裝,解壓就能用。

安裝x-pack

調整配置文件,主要配置一下下面三個參數:

啓動Kibana

 

而後打開瀏覽器輸入IP加端口5601便可訪問,界面以下(須要輸入用戶密碼了):

ELK技術實戰-安裝Elk 5.x平臺

默認帳號:elastic

默認密碼:changeme

x-pack安裝以後有一個超級用戶elastic ,其默認的密碼是changeme,擁有對全部索引和數據的控制權,可使用該用戶建立和修改其餘用戶。

初次訪問Kibana的時候,須要配置一個默認的ES索引,通常填寫.monitoring*便可,這是由於在上述安裝x-pack後,會自動開始監控Elasticsearch集羣的狀態,並將監控結果以.monitoring*命名索引文件。

ELK技術實戰-安裝Elk 5.x平臺

ELK技術實戰-安裝Elk 5.x平臺

添加logstash索引(Management->index Patterns->+)

ELK技術實戰-安裝Elk 5.x平臺

看日誌已經出來了。

ELK技術實戰-安裝Elk 5.x平臺

ELK的搭建已經基本完成,接下來就是搭建elasticsearch集羣,以及使用kibana了。

X-PACK使用

x-pack的監控功能

X-Pack監控組件使您可以經過Kibana輕鬆監控Elasticsearch,您能夠實時查看集羣運行情況和性能,以及分析過去的集羣,索引和節點指標。 此外,您能夠監控Kibana自己的性能。在羣集上安裝X-Pack時,監視代理會在每一個節點上運行,以從Elasticsearch收集索引指標。 經過在Kibana中安裝X-Pack,您能夠經過一組專用儀表板查看監視數據。

ELK技術實戰-安裝Elk 5.x平臺

ELK技術實戰-安裝Elk 5.x平臺

x-pack的Graph

https://www.elastic.co/guide/en/x-pack/current/graph-getting-started.html

Redis當隊列配置

ELK技術實戰-安裝Elk 5.x平臺

若是嫌使用kafka當隊列太麻煩,能夠把Kafka換成Redis便可,配置以下:

filebeat配置

logstash配置

查看Redis隊列信息

Redis要自行安裝了。

Nginx日誌輸出爲JSON格式

把Nginx日誌的格式輸出成JSON格式展現在Kibana面板,生產環境中基本都是這麼使用。

配置Nginx

主要修改nginx的訪問日誌格式,這裏定義成json格式,以便後面logstash更好的處理,建議生產環境也這樣使用。在主配置/etc/nginx/nginx.conf文件中添加以下內容(註釋其餘日誌格式):

在/etc/nginx/conf.d/default.conf中添加以下一行,定義nginx日誌使用的格式,以及日誌文件的位置。

 

而後從新啓動nginx

 

配置Logstash

修改Indexer角色的配置文件:logstash_indexer.conf

刪除elasticsearch老的數據

而後重啓logstash_indexer.conf和elastisearch便可,繼續刷新Nginx日誌。

打開Kibana,應該會讓你從新建立索引,若是沒有問題會出現JSON格式的日誌。

參考:http://www.jianshu.com/p/f3658d267b5d

相關文章
相關標籤/搜索