01 - elasticsearch介紹和安裝(7.x)


ELKstack簡介
什么是ELK?
通俗來講,ELK是由Elasticsearch、Logstash、Kibana 三個開源軟件的組成的一個組合體,這三個軟件當中,每個軟件用於完成不同的功能,ELK 又稱為ELK stack,官方域名為elastic.co,ELK stack的主要優點有如下幾個:

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

---------------------------- -----------------------------------------------------------------------------------------------------
這三個服務分別有什么功能:
1:Elasticsearch
是一個高度可擴展的開源全文搜索和分析引擎,它可實現數據的實時全文搜索搜索、支持分布式可實現高可用、提供API接口,可以處理大規模日志數據,比如Nginx、Tomcat、系統日志等功能。
2:logstash
可以通過插件實現日志收集和轉發,支持日志過濾,支持普通log、自定義json格式的日志解析。
3:Kibana
主要是通過接口調用elasticsearch的數據,並進行前端數據可視化的展現。

--------------------------------------------------------------------------------------------------------------------------------
常見架構圖:

 

 

根據架構我們需要准備如下機器,部署一下elk:

 

環境准備

公網IP

內網IP

主機名

部署服務

用途

192.168.6.124

172.16.1.124

elkstack01

elasticsearch、JDK

存儲日志的數據庫

192.168.6.125

172.16.1.125

elkstack02

elasticsearch、JDK

存儲日志的數據庫

192.168.6.126

172.16.1.126

elkstack03

Logstash、JDK

收集日志、過濾日志

192.168.6.127

172.16.1.127

elkstack04

Redis、Kibana

消息隊列、日志展示

192.168.6.128

172.16.1.128

nginx01

nginx、filebeat

修改nginx日志格式為json收集

192.168.6.129

172.16.1.129

tomcat01

tomcat、JDK、filebeat

修改tomcat日志格式為json收集

 

設置時間同步:
注意:elk(切記保證集群之間時間一致非常重要)
echo '*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null'   >> /var/spool/cron/root

------------------------------------------------------------------------------------------------------------------------------------

部署elasticsearch

在elkstack01 和 elkstack02兩台機器分別安裝elasticsearch,因為elasticsearch服務運行需要JAVA環境,所以兩台服務器都需要安裝JAVA環境。

注意:
如果你只是在虛擬機安裝測試,內存至少要大於2G,否則可能會導致elasticsearch 起不來。並且服務啟動會很慢,需要耐心等待一分鍾左右。

安裝JDK環境
下載地址: http://www.oracle.com/technetwork/java/javase/downloads/
建議下載rpm包安裝,如果下載tar包,需要在/etc/profile 里面配置環境變量。

1:安裝jdk
[root@elkstack01 tools]# rpm -ivh jdk-8u221-linux-x64.rpm

2: 檢查jdk是否安裝成功
[root@elkstack01 tools]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

 

2019-9-6 追加:

<官網說elasticsearch7.x內置了jdk ,經過后來測試,發現的確是內置jdk了。因此沒必要安裝jdk,當然安裝也不影響>

-------------------------------------------------------------------------------------------------------------

3:安裝elasticsearch - 使用yum localinstall 自動安裝依賴包
下載地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/
[root@elkstack01 tools]# yum localinstall -y elasticsearch-7.1.1-x86_64.rpm

4:修改elasticsearch.yml配置文件 - (CentOS7中配置)
[root@elkstack01 ~]# grep -v “#” /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.seed_hosts: ["192.168.6.124",  "192.168.6.125"]

#配置master 主節點競選
cluster.initial_master_nodes: ["elk01", "elk02"]

2019-9-6 追加:

注意中括號內的,號 后面一定要有空格,否則會導致集群發現不了。很多人粗心會忘記這個空格,導致查不出來錯誤。

######################################################

6:修改啟動腳本 ,在server標簽下面增加一句
[root@elkstack01 ~]# vim /usr/lib/systemd/system/elasticsearch.service
#修改內存限制
LimitMEMLOCK=infinity
重新加載啟動腳本
[root@elkstack01 ~]# systemctl reload-daemon

7:創建目錄並授權
創建數據目錄
[root@elkstack01 ~]# mkdir -p /data/elk/data
創建日志目錄
[root@elkstack01 ~]# mkdir -p /data/elk/logs
授權
[root@elkstack01 ~]# chown -R elasticsearch.elasticsearch /data/elk/

8:優化文件描述符
編輯limit文件:
[root@elkstack01 ~]# vim /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 131072
* hard nofile 131072

9: 編輯子配置文件(CentOS6 - 是 90-nproc.conf)
* soft nproc 2048
root soft nproc unlimited

10: 設置JVM最大最小內存限制
編輯配置文件
[root@elkstack01 ~]# vim /etc/elasticsearch/jvm.options
-Xms1g
-Xmx1g

11: 啟停elasticsearch (centos6 /etc/init.d/啟動)
[root@elkstack01 ~]# systemctl start elasticsearch
[root@elkstack01 ~]# systemctl stop elasticsearch
查看啟動進程
[root@elkstack01 ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6185/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6397/master
tcp6 0 0 :::9200 :::* LISTEN 6793/java
tcp6 0 0 :::9300 :::* LISTEN 6793/java
tcp6 0 0 :::22 :::* LISTEN 6185/sshd
tcp6 0 0 ::1:25 :::* LISTEN 6397/master

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

 

 

{
"name" : "elk02",  - #此節點名稱
"cluster_name" : "elk-cluster",  #此集群名稱
"cluster_uuid" : "_na_", #此集群uuid
"version" : {
"number" : "7.0.0", #版本號
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "b7e28a7",
"build_date" : "2019-04-05T22:55:32.697037Z",
"build_snapshot" : false, #創建快照
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.7.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search" #注釋 口號
}

---------------------------------------------------------------------------------------------------------------------------------
在elkstack02 上面也按照如上步驟,安裝。

[root@elkstack01 ~]# scp /etc/elasticsearch/elasticsearch.yml 192.168.6.125:/etc/elasticsearch/

[root@elkstack02 ~]# vim /etc/elasticsearch/elasticsearch.yml
#此行節點名稱唯一即可
node.name: elk02
操作完成后,同樣啟動elasticsearch並且訪問9200端口,檢查是否安裝成功。

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

 

 

2019-9-6 追加:  

使用curl方式,查看集群狀態,下面會介紹使用插件看集群狀態。

[root@elk124 ~]# curl -X GET "192.168.6.124:9200/_cat/nodes"
192.168.6.124 9 96 1 0.00 0.29 0.45 mdi - node-2
192.168.6.126 7 95 1 0.01 0.16 0.22 mdi * node-3
172.16.1.125 7 95 1 0.01 0.14 0.20 mdi - node-1

[root@elk124 ~]# curl -X GET "192.168.6.124:9200/_cat/health?pretty"

1567778441 14:00:41 my-application green 3 3 0 0 0 0 0 0 - 100.0%
 

-----------------------------------------------------------------------------------------------------------------------------------
安裝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]# systemctl restart elasticsearch.service

如果啟動成功了,則打開瀏覽器,訪問:http://192.168.6.124:9100/

 

 

備注:
如果安裝n模塊遇到報錯SSL認證問題,解決方案如下。
#取消npm的ssl驗證
[root@elkstack01 elasticsearch-head]# npm config set strict-ssl false

到此 elasticsearch 就安裝成功了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM