第一章·ELKstack介紹及Elasticsearch部署

1、ELKstack課程大綱

-c 老男孩教育ELK課程大綱css

2、ELKstack簡介

什麼是ELK?

通俗來說,ELK是由Elasticsearch、Logstash、Kibana 三個開源軟件的組成的一個組合體,這三個軟件當中,每一個軟件用於完成不一樣的功能,ELK 又稱爲ELK stack,官方域名爲elastic.co,ELK stack的主要優勢有以下幾個:html

  • 1.處理方式靈活: elasticsearch是實時全文索引,具備強大的搜索功能
  • 2.配置相對簡單:elasticsearch所有使用JSON 接口,logstash使用模塊配置,kibana的配置文件部分更簡單。
  • 3.檢索性能高效:基於優秀的設計,雖然每次查詢都是實時,可是也能夠達到百億級數據的查詢秒級響應。
  • 4.集羣線性擴展:elasticsearch和logstash均可以靈活線性擴展
  • 5.前端操做絢麗:kibana的前端設計比較絢麗,並且操做簡單

什麼是Elasticsearch?

是一個高度可擴展的開源全文搜索和分析引擎,它可實現數據的實時全文搜索搜索、支持分佈式可實現高可用、提供API接口,能夠處理大規模日誌數據,好比Nginx、Tomcat、系統日誌等功能。前端

java


什麼是Logstash?

能夠經過插件實現日誌收集和轉發,支持日誌過濾,支持普通log、自定義json格式的日誌解析。node

linux


什麼是Kibana?

主要是經過接口調用elasticsearch的數據,並進行前端數據可視化的展示。
nginx

3、ELKstack部署及配置

環境準備
公網IP 內網IP 主機名 部署服務 用途
10.0.0.51 172.16.1.51 elkstack01 elasticsearch、JDK 存儲日誌的數據庫
10.0.0.52 172.16.1.52 elkstack02 elasticsearch、JDK 存儲日誌的數據庫
10.0.0.53 172.16.1.53 elkstack03 Logstash、JDK 收集日誌、過濾日誌
10.0.0.54 172.16.1.54 elkstack04 Redis、Kibana 消息隊列、日誌展現
10.0.0.55 172.16.1.55 nginx01 nginx、filebeat 修改nginx日誌格式爲json收集
10.0.0.56 172.16.1.56 tomcat01 tomcat、JDK、filebeat 修改tomcat日誌格式爲json收集

安裝包準備
安裝包名 用途
elasticsearch-5.3.0.rpm 存儲日誌的數據庫
elasticsearch-head.tar.gz elasticsearch的web界面插件
logstash-5.3.0.rpm 日誌收集、日誌分析工具
kibana-5.3.0-x86_64.rpm 日誌展現、日誌查詢工具
filebeat-5.3.2-x86_64.rpm 日誌收集工具(比Logstash輕量)
jdk-8u121-linux-x64.tar.gz JAVA容器(es、Logstash、tomcat須要)
nginx-1.10.3.tar.gz 測試收集nginx日誌
apache-tomcat-8.0.38.tar.gz 測試收集tomcat日誌
redis-3.2.8.tar.gz 消息隊列工具

Elasticsearch環境準備

關閉防火牆git

#CentOS6 關閉防火牆 [root@elkstack01 ~]# /etc/init.d/iptables stop #CentOS7 關閉防火牆 [root@elkstack01 ~]# systemctl stop firewalld 

關閉SELINUXgithub

#臨時關閉 [root@elkstack01 ~]# setenforce 0 setenforce: SELinux is disabled #永久關閉 [root@elkstack01 ~]# vim /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled ==> //原來是enforcing 改爲disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted 

設置epel源web

#CentOS6 下載epel源 [root@elkstack01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #CentOS7 下載epel源 [root@elkstack01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 

修改時區

#將時區修改成上海時區 [root@elkstack01 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp:是否覆蓋"/etc/localtime"? y 

設置時間同步

#同步服務器時間(切記保證集羣之間時間一致很是重要)
[root@elkstack01 ~]# ntpdate time1.aliyun.com 28 Feb 14:11:28 ntpdate[8904]: step time server 203.107.6.88 offset 3168820.831817 sec 

部署Elasticsearch

在elkstack01 和 elkstack02兩臺機器分別安裝elasticsearch,由於elasticsearch服務運行須要JAVA環境,因此兩臺服務器都須要安裝JAVA環境。

安裝JDK環境

下載地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

#解壓JDK安裝包 [root@elkstack01 ~]# tar xf jdk-8u121-linux-x64.tar.gz #將JDK安裝包移動到安裝目錄下 [root@elkstack01 ~]# mv jdk1.8.0_121 /usr/local/ #作軟連接(方便往後升級) [root@elkstack01 ~]# ln -s /usr/local/jdk1.8.0_121 /usr/local/jdk1.8 #添加環境變量 [root@elkstack01 ~]# vim /etc/profile.d/jdk1.8.sh export JAVA_HOME=/usr/local/jdk1.8 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin #加載環境變量 [root@elkstack01 ~]# source /etc/profile #檢查是否加載成功 [root@elkstack01 ~]# java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) 

安裝elasticsearch

下載地址: https://www.elastic.co/downloads/elasticsearch

#安裝elasticsearch使用yum localinstall 自動安裝依賴包 [root@elkstack01 ~]# yum localinstall -y elasticsearch-5.3.0.rpm 

修改配置文件

若是系統是CentOS6則作如下修改

#查看配置文件修改部份內容 [root@elkstack01 ~]# grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml #設置集羣名稱(想要其餘節點加入同一個集羣必須集羣名稱相同) cluster.name: elk-cluster #節點名稱(經過此配置項來區分集羣中的全部節點) node.name: elk01 #elasticsearch數據存放目錄 path.data: /data/elk/data #elasticsearch日誌存放目錄 path.logs: /data/elk/logs #CentOS6不支持內存鎖功能,因此要關閉內存鎖 bootstrap.memory_lock: false bootstrap.system_call_filter: false #elasticsearch監聽地址 network.host: 0.0.0.0 #elasticsearch服務端口 http.port: 9200 #配置全部集羣節點IP discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"] 

若是系統是CentOS7則作如下修改

#查看配置文件修改部份內容(CentOS7中配置) [root@elkstack01 ~]# grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml #設置集羣名稱(想要其餘節點加入同一個集羣必須集羣名稱相同) cluster.name: elk-cluster #節點名稱(經過此配置項來區分集羣中的全部節點) node.name: elk01 #elasticsearch數據存放目錄 path.data: /data/elk/data #elasticsearch日誌存放目錄 path.logs: /data/elk/logs #內存鎖設置(在CentOS7中支持內存鎖而且要修改啓動腳本) bootstrap.memory_lock: true #elasticsearch監聽地址 network.host: 0.0.0.0 #elasticsearch服務端口 http.port: 9200 #配置全部集羣節點IP discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"] #修改啓動腳本 [root@elkstack01 ~]# vim /usr/lib/systemd/system/elasticsearch.service #修改內存限制(去掉此行註釋) LimitMEMLOCK=infinity #從新加載啓動腳本 [root@elkstack01 ~]# systemctl reload-daemon 

建立目錄並受權

#建立數據目錄 [root@elkstack01 ~]# mkdir -p /data/elk/data #建立日誌目錄 [root@elkstack01 ~]# mkdir -p /data/elk/logs #受權 [root@elkstack01 ~]# chown -R elasticsearch.elasticsearch /data/elk/ 

優化文件描述符

#編輯limit文件 [root@elkstack01 ~]# vim /etc/security/limits.conf * soft memlock unlimited * hard memlock unlimited * soft nofile 131072 * hard nofile 131072 #編輯子配置文件(CentOS6) [root@elkstack01 ~]# vim /etc/security/limits.d/90-nproc.conf * soft nproc 2048 root soft nproc unlimited 

設置JVM最大最小內存限制

#編輯配置文件 [root@elkstack01 ~]# vim /etc/elasticsearch/jvm.options -Xms1g -Xmx1g 

啓停elasticsearch

#CentOS6 啓動、中止elasticsearch [root@elkstack01 ~]# /etc/init.d/elasticsearch start [root@elkstack01 ~]# /etc/init.d/elasticsearch stop #CentOS7 啓動、中止elasticsearch [root@elkstack01 ~]# systemctl start elasticsearch [root@elkstack01 ~]# systemctl stop elasticsearch #查看啓動進程 [root@elkstack01 ~]# ps -ef|grep java #查看端口 [root@elkstack01 ~]# netstat -lntup tcp 0 0 :::9200 :::* LISTEN 10872/java tcp 0 0 :::9300 :::* LISTEN 10872/java 

驗證啓動elasticsearch後的頁面

打開瀏覽器訪問地址:http://10.0.0.51:9200/

{
  #此節點名稱 "name" : "elk01", #此集羣名稱 "cluster_name" : "elk-cluster", #集羣的uuid "cluster_uuid" : "XFsbUh_AT2y5jyZLGOAZ3w", "version" : { #elasticsearch版本 "number" : "5.3.0", "build_hash" : "3adb13b", "build_date" : "2017-03-23T03:31:50.652Z", #建立快照 "build_snapshot" : false, #Lucene語法版本(基於Lucene作日誌搜索) "lucene_version" : "6.4.1" }, #口號 "tagline" : "You Know, for Search" } 

其餘節點安裝並加入集羣

安裝其餘節點,步驟和上面同樣,修改配置文件時,直接將elk01節點的配置文件scp(拷貝)過去,而後在配置文件中講節點名稱修改後啓動便可。

#發送配置文件到其餘節點 [root@elkstack01 ~]# scp /etc/elasticsearch/elasticsearch.yml 172.16.1.52:/etc/elasticsearch/ #修改其餘節點配置文件 [root@elkstack02 ~]# vim /etc/elasticsearch/elasticsearch.yml #此行節點名稱惟一便可 node.name: elk02 

操做完成後,一樣啓動elasticsearch而且訪問9200端口,檢查是否安裝成功。

訪問地址:http://10.0.0.52:9200/

如上圖所示:能夠看到節點名稱是不同的。


安裝elasticsearch插件

插件是爲了完成不一樣的功能,官方提供了一些插件但大部分是收費的,另外也有一些開發愛好者提供的插件,能夠實現對elasticsearch集羣的狀態監控與管理配置等功能,咱們如今要安裝的是Elasticsearch的head插件,此插件提供elasticsearch的web界面功能。

安裝Elasticsearch的head插件時,要安裝npm,npm的全稱是Node Package Manager,是隨同NodeJS一塊兒安裝的包管理和分發工具,它很方便讓JavaScript開發者下載、安裝、上傳以及管理已經安裝的包。

在Elasticsearch 5.x版本之後再也不支持直接安裝head插件,而是須要經過啓動一個服務方式。
Github地址:https://github.com/mobz/elasticsearch-head

#安裝npm(只須要在一個節點安裝便可,若是前端還有nginx作反向代理能夠每一個節點都裝) [root@elkstack01 ~]# yum install -y npm #進入下載head插件代碼目錄 [root@elkstack01 src]# cd /usr/local/ #從GitHub上克隆代碼到本地 [root@elkstack01 local]# git clone git://github.com/mobz/elasticsearch-head.git #克隆完成後,進入elasticsearch插件目錄 [root@elkstack01 local]# cd elasticsearch-head/ #清除緩存 [root@elkstack01 elasticsearch-head]# npm cache clean -f #使用npm安裝n模塊(不一樣的項目js腳本所需的node版本可能不一樣,因此就須要node版本管理工具) [root@elkstack01 elasticsearch-head]# npm install -g n #安裝最新版本n模塊 [root@elkstack01 elasticsearch-head]# n stable #生成grunt [root@elkstack01 elasticsearch-head]# npm install grunt -save #確認生成grunt文件 [root@elkstack01 elasticsearch-head]# ll node_modules/grunt #執行安裝grunt [root@elkstack01 elasticsearch-head]# npm install #後臺啓動head插件(切記,必須在插件目錄下執行啓動命令) [root@elkstack01 elasticsearch-head]# npm run start & #驗證端口是否啓動成功 [root@elkstack01 elasticsearch-head]# netstat -lntup tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11293/grunt #啓動成功後,修改elasticsearch配置文件 [root@elkstack01 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml #添加以下兩行,開啓跨域訪問支持(添加在配置文件最後便可) http.cors.enabled: true http.cors.allow-origin: "*" #重啓elasticsearch [root@elkstack01 elasticsearch-head]# /etc/init.d/elasticsearch restart 

若是啓動成功了,則打開瀏覽器,訪問:http://10.0.0.51:9100/

安裝成功界面以下:

安裝n模塊遇到報錯SSL認證問題,解決方案以下。

#取消npm的ssl驗證 [root@elkstack01 elasticsearch-head]# npm config set strict-ssl false
相關文章
相關標籤/搜索