種一棵樹最好的時間是十年前,其次是如今。html
簡介
- Elasticsearch: Elasticsearch(ES)是一個基於Lucene構建的開源、分佈式、RESTful接口的搜索和數據分析引擎。
- Logstash: Logstash 是開源的服務器端數據處理管道,可以同時從多個來源採集數據,轉換數據,而後將數據發送到您最喜歡的 「存儲庫」 中。(咱們的存儲庫固然是 Elasticsearch。)
- Kibana: Kibana 是一款開源的數據分析和可視化平臺,它是 Elastic Stack 成員之一,設計用於和 Elasticsearch 協做。您可使用 Kibana 對 Elasticsearch 索引中的數據進行搜索、查看、交互操做。您能夠很方便的利用圖表、表格及地圖對數據進行多元化的分析和呈現。
總結:Logstash收集數據,Elasticsearch檢索數據,Kibana展現數據node
安裝
ELK安裝最好都選擇相同版本,以避免引發沒必要要的問題。這裏使用的是6.4.2版本。es6
- Elasticsearch安裝須要JDK環境,要保證環境變量JAVA_HOME正確設置。這裏使用JDK1.8
ES JDK 0.90 1.6 ---------------- 1.3 1.7 ... 1.7 2.4 1.7 ---------------- 5.0 1.8 ... 1.8 ---------------------
- 下載Elasticsearch,官網下載地址 https://www.elastic.co/downloads/elasticsearch,解壓縮後運行
-
cd elasticsearch-6.4.2/bin ./elasticsearch
訪問 http://localhost:9200bootstrap
-
{ "name" : "scdPPo5", "cluster_name" : "elasticsearch", "cluster_uuid" : "h7RwJiCNTiiA5TZYOCLL8g", "version" : { "number" : "6.4.2", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "04711c2", "build_date" : "2018-09-26T13:34:09.098244Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
配置文件服務器
-
elasticsearch/config/elasticsearch.yml 主配置文件 elasticsearch/config/jvm.options jvm參數配置文件 elasticsearch/config/log4j2.properties 日誌配置文件
主配置文件elasticsearch.yml配置詳細說明網絡
-
################################### Cluster ################################### # 表明一個集羣,集羣中有多個節點,其中有一個爲主節點,這個主節點是能夠經過選舉產生的,主從節點是對於集羣內部來講的. # es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於集羣外部來講的,由於從外部來看es集羣,在邏輯上是個總體,你與任何一個節點的通訊和與整個es集羣通訊是等價的。 # cluster.name能夠肯定你的集羣名稱,當你的elasticsearch集羣在同一個網段中elasticsearch會自動的找到具備相同cluster.name的elasticsearch服務. # 因此當同一個網段具備多個elasticsearch集羣時cluster.name就成爲同一個集羣的標識. # cluster.name: es6.2 #################################### Node ##################################### # 節點名稱同理,可自動生成也可手動配置. # node.name: node-1 # 容許一個節點是否能夠成爲一個master節點,es是默認集羣中的第一臺機器爲master,若是這臺機器中止就會從新選舉master. 任何主節點的節點(默認狀況下全部節點)均可以被主選舉過程選爲主節點。 # node.master: true # 容許該節點存儲數據(默認開啓) # node.data: true # 注意:主節點必須有權訪問該data/目錄(就像data節點同樣 ),由於這是集羣狀態在節點從新啓動之間持續存在的位置。 # 容許該節點爲攝取節點(默認開啓) # node.ingest:true # 配置爲true將主節點和數據節點標記爲「是有意義的」 # 開啓跨羣集搜索(默認啓用) # search.remote.connect:true # 配置文件中給出了三種配置高性能集羣拓撲結構的模式,以下: # 1. 若是你想讓節點從不選舉爲主節點,只用來存儲數據,可做爲負載器 # node.master: false # node.data: true # node.ingest: true #默認true # 2. 若是想讓節點成爲主節點,且不存儲任何數據,並保有空閒資源,可做爲協調器 # node.master: true # node.data: false # node.ingest: true # 3. 若是想讓節點既不稱爲主節點,又不成爲數據節點,那麼可將他做爲搜索器,從節點中獲取數據,生成搜索結果等 # node.master: false # node.data: false # node.ingest: true #################################### Paths #################################### # 數據存儲位置(單個目錄設置) # path.data: /var/data/elasticsearch #path.data應將該設置配置爲在Elasticsearch主目錄以外定位數據目錄,以便在不刪除數據的狀況下刪除主目錄! # 日誌文件的路徑 # path.logs: /var/log/elasticsearch #################################### 網絡設置 #################################### # 節點將綁定到此主機名或IP地址 # network.host: 127.0.0.1 # 綁定到傳入HTTP請求的端口 # http.port: 9200 # 接受單個值或範圍。若是指定了範圍,則節點將綁定到範圍中的第一個可用端口。默認爲9200-9300 #################################### TCP傳輸 #################################### # 端口綁定節點之間的通訊。 # transport.tcp.port: 9300 # 接受單個值或範圍。若是指定了範圍,則節點將綁定到範圍中的第一個可用端口。默認爲9300-9400 # transport.publish_port: 9300 # 與此節點通訊時,羣集中其餘節點應使用的端口。當羣集節點位於代理或防火牆以後而且transport.tcp.port不能從外部直接尋址時頗有用。默認爲經過分配的實際端口 transport.tcp.port # transport.bind_host: 127.0.0.1 # 將傳輸服務綁定到的主機地址。默認爲transport.host(若是設置)或network.bind_host # transport.publish_host: 127.0.0.1 # 發佈集羣中要鏈接到的節點的主機地址。默認爲transport.host(若是設置)或network.publish_host # transport.host: 127.0.0.1 # 用於設置transport.bind_host和transport.publish_host默認爲transport.host或network.host # transport.tcp.connect_timeout: 30s # 套接字鏈接超時設置(以時間設置格式)。默認爲30s # transport.tcp.compress: false # 設置是否壓縮tcp傳輸時的數據,默認爲false,不壓縮。 # transport.ping_schedule: 5s # 安排常規ping消息以確保鏈接保持活動狀態。默認爲5s在傳輸客戶端和-1(禁用) #################################### 高級網絡設置 #################################### #該network.host設置中的說明一般使用的網絡設置 是快捷方式設定所述綁定的主機和發佈主機在同一時間。在高級用例中,例如在代理服務器後運行時,可能須要將這些設置設置爲不一樣的值: # 綁定到哪一個網絡接口以偵聽傳入請求 # network.bind_host: 127.0.0.1 # 點能夠綁定到多個接口,例如兩個網卡,或站點本地地址和本地地址。默認爲 network.host。 # network.publish_host: 127.0.0.1 # 發佈主機是節點通告集羣中其餘節點的單個接口,以便這些節點能夠鏈接到它。目前,Elasticsearch節點可能會綁定到多個地址,但只發佈一個。若是未指定,則默認爲「最佳」地址network.host,按IPv4 / IPv6堆棧首選項排序,而後按可訪問性排序。若是您將其設置爲 network.host多個綁定地址,但依賴於特定地址進行節點間通訊,則應該明確設置 network.publish_host。transport.tcp.port #################################### 高級TCP設置 #################################### # 任何使用TCP的組件(如HTTP和 傳輸模塊)都共享如下設置: # network.tcp.no_delay: true # 啓用或禁用TCP無延遲 設置。默認爲true。 # network.tcp.keep_alive: true # 啓用或禁用TCP保持活動狀態。默認爲true。 # network.tcp.reuse_address: true # 地址是否應該重複使用。默認爲true在非Windows機器上。 # network.tcp.send_buffer_size # TCP發送緩衝區的大小(以大小單位指定)。默認狀況下不明確設置。 # network.tcp.receive_buffer_size # TCP接收緩衝區的大小(以大小單位指定)。默認狀況下不明確設置。 ################################### Memory #################################### # bootstrap.memory_lock: true # 設置爲true來鎖住內存。由於內存交換到磁盤對服務器性能來講是致命的,當jvm開始swapping時es的效率會下降,因此要保證它不swap ###################### 使用head等插件監控集羣信息,須要打開如下配置項 ########### # http.cors.enabled: true # http.cors.allow-origin: "*" # http.cors.allow-credentials: true ################################### Gateway ################################### # 如下靜態設置(必須在每一個主節點上設置)控制剛剛選擇的主服務器在嘗試恢復羣集狀態和羣集數據以前應等待的時間,修改後須要重啓生效 # gateway.expected_nodes: 0 # 預計在集羣中的(數據或主節點)數量。只要預期的節點數加入羣集,恢復本地碎片就會開始。默認爲0 # gateway.expected_master_nodes: 0 # 預計將在羣集中的主節點的數量。一旦預期的主節點數加入羣集,就會當即開始恢復本地碎片。默認爲0 # gateway.expected_data_nodes: 0 # 預計將在羣集中的數據節點的數量。只要預期數量的節點加入羣集,就會開始恢復本地碎片。默認爲0 # gateway.recover_after_time: 5m # 設置初始化恢復過程的超時時間,超時時間從上一個配置中配置的N個節點啓動後算起。默認爲5m ################################## Discovery ################################## #### 該配置十分重要,沒有正確配置,可能沒法構成集羣 # 這是一個集羣中的主節點的初始列表,當節點(主節點或者數據節點)啓動時使用這個列表進行探測 # discovery.zen.ping.unicast.hosts: ["host1:port", "host2:port", "host3:port"] # 默認爲["127.0.0.1", "[::1]"] # discovery.zen.ping.unicast.hosts.resolve_timeout: 5s # 在每輪ping中等待DNS查找的時間量。指定爲 時間單位。默認爲5秒 # discovery.zen.ping_timeout: 3s # 肯定節點將多久決定開始選舉或加入現有的羣集以前等待,默認3s # discovery.zen.join_timeout: # 一旦一個節點決定加入一個現有的已造成的集羣,它將發送一個加入請求給主設備,默認值是ping超時的20倍。 # discovery.zen.minimum_master_nodes: 2 # 爲防止數據丟失,配置discovery.zen.minimum_master_nodes設置(默認設置1)相當重要, 以便每一個符合主節點的節點都知道 爲了造成羣集而必須可見的主節點的最小數量。 爲了解釋,假設您有一個由兩個主節點組成的集羣。網絡故障會中斷這兩個節點之間的通訊。每一個節點都會看到一個主節點的節點......自己。隨着minimum_master_nodes設置爲默認1,這是足以造成一個集羣。每一個節點將本身選爲新的主人(認爲另外一個主人資格的節點已經死亡),結果是兩個集羣,或者是一個分裂的大腦。直到一個節點從新啓動後,這兩個節點纔會從新加入。任何已寫入從新啓動節點的數據都將丟失。 如今想象一下,您有一個具備三個主節點資格的節點的集羣,並 minimum_master_nodes設置爲2。若是網絡拆分將一個節點與其餘兩個節點分開,則具備一個節點的一側不能看到足夠的主節點,而且會意識到它不能將本身選爲主節點。具備兩個節點的一側將選擇一個新的主控(若是須要)並繼續正常工做。一旦網絡拆分解決,單個節點將從新加入羣集並再次開始提供服務請求。 該設置應該設置爲符合主數據節點的法定數量: (master_eligible_nodes / 2)+ 1 換句話說,若是有三個符合條件的節點,則最小主節點應設置爲(3 / 2) + 1或2。
2.下載Logstash,官網下載地址 https://www.elastic.co/downloads/logstash,解壓縮後運行app
-
cd logstash-6.4.2 bin/logstash -e 'input{stdin{}} output{stdout{}}'
3.下載Kibana,官網下載地址 https://www.elastic.co/downloads/kibana,解壓縮後cors
-
cd kibana-6.4.2/bin ./kibana
在kibana啓動前確保elasticsearch啓動成功jvm
-
訪問http://localhost:5601運行kibanaelasticsearch