中文指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/detailshtml
ELK Stack包含:ElasticSearch、Logstash、Kibanajava
ElasticSearch是一個搜索引擎,用來搜索、分析、存儲日誌。它是分佈式的,也就是說能夠橫向擴容,能夠自動發現,索引自動分片,總之很強大。node
文檔介紹: https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.htmllinux
Logstash用來採集日誌,把日誌解析爲json格式交給ElasticSearch。git
kibana 也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。github
Beats在這裏是一個輕量級日誌採集器,其實Beats家族有5個成員web
早期的ELK架構中使用Logstash收集、解析日誌,可是Logstash對內存、cpu、io等資源消耗比較高。相比 Logstash,Beats所佔系統的CPU和內存幾乎能夠忽略不計npm
x-pack對Elastic Stack提供了安全、警報、監控、報表、圖表於一身的擴展包,是收費的。json
2.1.1 yum安裝JDK [root@linux-node1 ~]# yum install -y java [root@linux-node1 ~]# java -version openjdk version "1.8.0_151" OpenJDK Runtime Environment (build 1.8.0_151-b12) OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode) 2.1.2 源碼安裝JDK 下載 [root@linux-node1 ~]# wget http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz 配置Java環境 [root@linux-node1 ~]# tar zxf jdk-8u151-linux-x64.tar.gz -C /usr/local/ [root@linux-node1 ~]# ln –s /usr/local/jdk1.8.0_91 /usr/local/jdk [root@linux-node1 ~]# vim /etc/profile export JAVA_HOME=/usr/local/jdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin [root@linux-node1 ~]# source /etc/profile [root@linux-node1 ~]# java -version 注:linux-node2節點上也安裝JDK
(安裝版本爲爲elasticsearch6.X)bootstrap
(1)源碼安裝elasticsearch: 安裝elasticsearch [root@linux-node1 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm [root@linux-node1 ~]# yum install -y elasticsearch-6.0.0.rpm 配置elasticsearch,linux-node2配置一個相同的節點,經過組播進行通訊,會經過cluster進行查找,若是沒法經過組播查詢,修改爲單播便可。 [root@linux-node1 ~]# vim /etc/elasticsearch/elasticsearch.yml cluster.name:elk-cluster #集羣名稱 node.name:elk-node1 #節點名稱,一個集羣以內節點的名稱不能重複 path.data:/data/elkdata #數據路徑 path.logs:/data/logs #日誌路徑 #bootstrap.memory_lock:true #鎖住es內存,保證內存不分配至交換分區,這裏暫時不配置。註釋掉 network.host:192.168.56.11 #網絡監聽地址 http.port:9200 #用戶訪問查看的端口,9300是組件訪問使用 discovery.zen,ping.unicast.hosts:["10.0.0.22","10.0.0.23"] #單播(配置一臺便可,生產可使用組播方式) [root@linux-node1 ~]# mkdir /data/{elkdata,logs} [root@linux-node1 ~]# chown elasticsearch.elasticsearch /data -R [root@linux-node1 ~]# systemctl start elasticsearch.service [root@linux-node1 ~]# netstat -tulnp |grep java tcp6 0 0 192.168.56.11:9200 :::* LISTEN 26866/java tcp6 0 0 192.168.56.11:9300 :::* LISTEN 26866/java 將配置文件拷貝到linux-node2 [root@linux-node1 ~]# scp /etc/elasticsearch/elasticsearch.yml 192.168.56.12:/etc/elasticsearch/ [root@linux-node2 ~]# vim /etc/elasticsearch/elasticsearch.yml 修改: node.name=elk-node2 network.host=192.168.56.12 [root@linux-node2 ~]# mkdir /data/{elkdata,logs} [root@linux-node2 ~]# chown elasticsearch.elasticsearch /data -R [root@linux-node2 ~]# systemctl start elasticsearch.service [root@linux-node2 ~]# netstat -tulnp |grep java tcp6 0 0 10.0.0.22:9200 :::* LISTEN 16346/java tcp6 0 0 10.0.0.23:9300 :::* LISTEN 16346/java
1.下載並安裝GPG key [root@linux-node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 2.添加yum倉庫 [root@linux-node1 ~]# vim /etc/yum.repos.d/es.repo [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md 3.安裝elasticsearch [root@hadoop-node1 ~]# yum install -y elasticsearch
3.1 可使用命令來查看elasticsearch的狀態內容
[root@linux-node1 ~]# curl http://10.0.0.22:9200/_cluster/health?pretty=true { "cluster_name" : "elk-cluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
3.2 檢查集羣的健康狀態
curl http://10.0.0.22:9200/_cluster/health?pretty 健康檢查 curl http://10.0.0.23:9200/_cluster/state?pretty 集羣詳細信息
插件做用:主要是作集羣管理的插件(Elasticsearch6.0不能使用命令直接安裝head插件)
Github下載地址:https://github.com/mobz/elasticsearch-head
4.1 安裝node
[root@linux-node1 ~]# wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x64.tar.xz [root@linux-node1 ~]# tar xf node-v8.10.0-linux-x64.tar.xz [root@linux-node1 ~]# mv node-v8.10.0-linux-x64 /usr/local/node [root@linux-node1 ~]# vim /etc/profile export NODE_HOME=/usr/local/node export PATH=$PATH:$NODE_HOME/bin [root@linux-node1 ~]# source /etc/profile [root@linux-node1 ~]# which node /usr/local/node/bin/node [root@linux-node1 ~]# node -v v8.10.0 [root@linux-node1 ~]# which npm /usr/local/node/bin/npm [root@linux-node1 ~]# npm -v 5.6.0
4.2 安裝grunt
(grunt是基於Node.js的項目構建工具,能夠進行打包壓縮、測試、執行等等的工做,head插件就是經過grunt啓動)
[root@linux-node1 ~]# npm install -g cnpm --registry=https://registry.npm.taobao.org [root@linux-node1 ~]# npm install -g grunt-cli --registry=https://registry.npm.taobao.org [root@linux-node1 ~]# grunt -version grunt-cli v1.2.0
4.3 修改head插件源碼
修改服務器監聽地址:Gruntfile.js [root@linux-node1 ~]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip [root@linux-node1 ~]# unzip master.zip [root@linux-node1 ~]# cd elasticsearch-head-master/ [root@linux-node1 elasticsearch-head-master]# vim Gruntfile.js 90 connect: { 91 server: { 92 options: { 93 hostname: '10.0.0.22', 94 port: 9100, 95 base: '.', 96 keepalive: true 97 } 98 } 99 }
4.4 修改鏈接地址:_site/app.js
[root@linux-node1 elasticsearch-head-master]# vim _site/app.js 4354 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://10.0.0.22:9200"; [root@linux-node1 elasticsearch-head-master]# cnpm install [root@linux-node1 elasticsearch-head-master]# grunt --version grunt-cli v1.2.0 grunt v1.0.1
4.5 運行head
在elasticsearch-head-master目錄下
[root@linux-node1 elasticsearch-head-master]# cnpm install #(安裝下載下來的包) [root@linux-node1 elasticsearch-head-master]# grunt --version grunt-cli v1.2.0 grunt v1.0.1 [root@linux-node1 elasticsearch-head-master]# vim /etc/elasticsearch/elasticsearch.yml 90 # ---------------------------------- Head -------------------------------------增長以下兩行: 91 # 92 http.cors.enabled: true 93 http.cors.allow-origin: "*" [root@linux-node1 elasticsearch-head-master]# systemctl restart elasticsearch [root@linux-node1 elasticsearch-head-master]# grunt server (node:2833) ExperimentalWarning: The http2 module is an experimental API. Running "connect:server" (connect) task Waiting forever... Started connect web server on http://10.0.0.22:9100
4.6 瀏覽器訪問:http://10.0.0.22:9100,能夠看到各個節點的狀態信息,如圖:
4.7 head插件使用
返回"概述"頁面,點擊"鏈接"
上圖中01234粗框是主分片,01234細框是副本分片,主分片和副本分片的數據一致,作備份。
理論上應該分別放入2臺主機,目前只用了一臺主機,因此圖中看到的副本分片是灰色,同時右上角的"集羣健康值"顯示黃色警告,10個分片只有5個。
備註:若是出現紅色,可能主分片和副本分片的數據同時丟失。
上圖中藍色「信息」按鈕,包含索引狀態和索引信息。藍色「動做」按鈕,包含刷新、關閉、刪除、快照、優化、測試分析器等功能。