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 就安裝成功了。