1. 程式人生 > 資料庫 >ELK(FIlebeat+Redis+Logstash+Elasticse)之部署

ELK(FIlebeat+Redis+Logstash+Elasticse)之部署

Centos7部署ELK日誌收集系統
一、ELK概述

ELK是一組開源軟體的簡稱,其包括Elasticsearch、Logstash 和 Kibana。ELK最近幾年發展迅速,已經成為目前最流行的集中式日誌解決方案。

Elasticsearch: 能對大容量的資料進行接近實時的儲存,搜尋和分析操作。 本專案中主要通過Elasticsearch儲存所有獲取的日誌。

Logstash: 資料收集引擎,它支援動態的的從各種資料來源獲取資料,並對資料進行過濾,分析,豐富,統一格式等操作,然後儲存到使用者指定的位置。

Kibana: 資料分析與視覺化平臺,對Elasticsearch儲存的資料進行視覺化分析,通過表格的形式展現出來。

Filebeat: 輕量級的開源日誌檔案資料蒐集器。通常在需要採集資料的客戶端安裝Filebeat,並指定目錄與日誌格式,Filebeat就能快速收集資料,併發送給logstash進行解析,或是直接發給Elasticsearch儲存。

Redis:NoSQL資料庫(key-value),也資料輕型訊息佇列,不僅可以對高併發日誌進行削峰還可以對整個架構進行解耦

傳統ELK的經典框架:
在這裡插入圖片描述
單一的架構,logstash作為日誌蒐集器,從資料來源採集資料,並對資料進行過濾,格式化處理,然後交由Elasticsearch儲存,kibana對日誌進行視覺化處理。

新型ELK框架:
在這裡插入圖片描述
Filebeats是一種輕量級的日誌蒐集器,其不佔用系統資源,自出現之後,迅速更新了原有的elk架構。Filebeats將收集到的資料傳送給Logstash解析過濾,在Filebeats與Logstash傳輸資料的過程中,為了安全性,可以通過ssl認證來加強安全性。之後將其傳送到Elasticsearch儲存,並由kibana視覺化分析。

二、新型ELK搭建詳細過程
實驗環境:
主機:
10.254.254.202 部署程式:filebeat
10.254.254.201 部署程式:redis,logstash,elasticsearch,kibana

下面是搭建過程中所需程式安裝包:
https://pan.baidu.com/s/1w02WtUAqh9yX4TChyMLa5Q 密碼:g0p9

1.客戶端部署filebeat

1)下載和安裝key檔案

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

1)建立yum原始檔

[root@localhost ~]# vim /etc/yum.repos.d/elk-elasticsearch.repo
[elastic-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

3)安裝啟動

yum  -y  install  filebeat
systemctl  start  filebeat
systemctl  status  filebeat

4)修改配置檔案使filebeat獲取的日誌進入redis:
****注:此處演示獲取spring cloud框架中eureka日誌,其他程式日誌都可相同方法獲取

vm /etc/filebeat/filebeat.yml
#修改的內容有一家幾個欄位
enabled:true
paths:程式日誌路徑
output.redis:日誌輸出地方
hosts:redis所在伺服器IP
port:redis埠
key:redis中的key(可以用來指定redis獲取到的資料的名稱)
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
2.原始碼安裝redis

1)解壓redis程式包:

tar zxf redis-3.2.9.tar.gz –C /usr/local
2)編譯redis:

cd /usr/local/redis-3.2.9
make && make install
ln –s /usr/local/redis-3.2.9 /usr/local/redis
注:redis安裝時有的缺少語言環境會出錯,有的會出現奇奇怪怪的問題,只要複製Error到往上搜索下就能輕易解決,在此不多做解釋
3)修改redis配置檔案:

vim /usr/local/redis/redis.conf

修改內容如下:
daemonize yes #開啟後臺執行
timeout 120 #超時時間
bind 0.0.0.0 #任何地址IP都可以登入redis
protected-mode no #關閉redis保護機制否則在沒有密碼校驗情況下redis遠端登入失敗

:此處是做演示,如果是線上部署elk建議開啟持久化機制,保證資料不丟失

4)啟動filebeat看看redis是否能接收到資料:
啟動filebeat:

systemctl start filebeat

5)進入redis檢視是否有資料:

#執行命令:
keys * : #檢視所有key,此操作為慢查詢,若redis跑了大量線上業務請不要進行此操做
lrange eureka-log 0 -1:#查詢key所有資料,若filebeat啟動時間過長請勿進行此操作

在這裡插入圖片描述
在這裡插入圖片描述
3.安裝jdk

1)解壓jdk安裝包並建立軟連線:

tar zxf /usr/local/src/jdk-8u131-linux-x64.tar.gz –C /usr/local/
ln -s /usr/local/jdk1.8.0_91/ /usr/local/jdk

2)配置環境變數:

vim /etc/profile
#修改內容如下:
JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export CLASSPATH=.: J A V A H O M E / l i b : JAVA_HOME/lib: JAVAH​OME/lib:JRE_HOME/lib: C L A S S P A T H e x p o r t P A T H = CLASSPATH export PATH= CLASSPATHexportPATH=PATH: J A V A H O M E / b i n : JAVA_HOME/bin: JAVAH​OME/bin:JRE_HOME/bin
重新載入環境變數:

source /etc/profile

3)檢視jdk是否安裝成功:

java -version
在這裡插入圖片描述
4.安裝Elasticsearch:

1)解壓安裝包並改名:

unzip elasticsearch-5.6.3.zip -d /usr/local/
mv /usr/local/ elasticsearch-5.6.3 /usr/local/elasticsearh
2)修改ES配置檔案:

vim /usr/local/elasticsearch/config/elasticsearch.yml

#這裡指定的是叢集名稱,需要修改為對應的,開啟了自發現功能後,ES會按照此叢集名稱進行叢集發現
cluster.name: my-application
node.name: node-1

#目錄需要手動建立
path.data: /opt/elk/data
path.logs: /opt/elk/logs

#ES監聽地址任意IP都可訪問
network.host: 0.0.0.0
http.port: 9200

#若是叢集,可在裡面引號中新增,逗號隔開
discovery.zen.ping.unicast.hosts: [“192.168.3.205”]

··nable cors,保證_site類的外掛可以訪問es
http.cors.enabled: true #手動新增
http.cors.allow-origin: “*” #手動新增

Centos6不支援SecComp,而ES5.2.0預設bootstrap.system_call_filter為true進行檢測,所以導致檢測失敗,失敗後直接導致ES不能啟動
bootstrap.memory_lock: false #手動新增
bootstrap.system_call_filter: false #手動新增

:ES啟動的時候回佔用特別大的資源所以需要修改下系統引數,若不修改資源啟動會異常退出

3)修改系統引數:
vim /etc/sysctl.conf
#新增引數
vm.max_map_count=655360
重新載入配置:

sysctl –p
4)修改資源引數:
vim /etc/security/limits.conf
#修改

  • soft nofile 65536
  • hard nofile 131072
  • soft nproc 65536
  • hard nproc 131072

5)設定使用者資源引數:
vim /etc/security/limits.d/20-nproc.conf
#新增
elk soft nproc 65536

6)建立使用者並賦權:

useradd elk
groupadd elk
useradd elk -g elk
建立資料和日誌目錄並修改目錄許可權:
mkdir –pv /opt/elk/{data,logs}
chown –R elk:elk /opt/elk
chown –R elk:elk /usr/local/elasticsearch
切換使用者並後臺啟動ES:(elk使用者修改了資源引數,如不切位elk使用者啟動會暴斃)
su elk
nohup /usr/local/elasticsearch/bin/elasticsearch >> /dev/null 2>&1 &

7)檢視ES狀況:
方法一、
curl ‘http://[ES IP]:9200/_search?pretty’
方法二、
#網頁訪問:
http://[ES IP]:9200/_search?pretty

5.安裝logstash:
1)解壓並建立軟連線:

tar /usr/local/src/logstash-5.3.1.tar.gz –C /usr/local/
ln –s /usr/local/logstash-5.3.1 /usr/local/logstash

2)測試
在此建立主配檔案進行測試:

vim /usr/local/logstash/config/logstash-simple.conf
#內容如下:
input { stdin { } }
output {
stdout { codec=> rubydebug }
}
使用logstash引數-f讀取配置檔案進行測試:

/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash-simple.conf
在這裡插入圖片描述
3)正式建立配置檔案獲取redis日誌的資料:
配置檔案如下:
vim /usr/local/logstash/config/redis-spring.conf

input {
redis {
port => “6379”
host => “10.254.254.201”
data_type => “list”
type => “log”
key => “filebeat”
}
}
output {
elasticsearch {
hosts => “10.254.254.201:9200”
index => “logstash1-%{+YYYY.MM.dd}”
}
}

通過配置檔案啟動服務檢視效果:

nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/redis-spring.conf &
在這裡插入圖片描述
此時我們再去檢視reids中key:(此時已經沒有資料了,資料已經被logstash取完)
在這裡插入圖片描述
4)使用curl 檢視ES是否接受到資料
curl http://10.254.254.201:9200/_search?pretty
在這裡插入圖片描述
此時說明我們logstash從redis中取資料,在把資料推到ES中是ok的!

6.安裝ES外掛:(elasticsearch-head)

:head安裝需要從國外網站拉去東西,可能網速過慢導致安裝失敗(可以多試幾次),下面有幾種方法安裝:

方法一、
匯入node-v8.2.1.tar.gz phantomjs-2.1.1-linux-x86_64.tar.bz2 安裝包
安裝node:
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure && make && make install

安裝phantomjs:
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin/
cp phantomjs /usr/local/bin/

匯入es-head程式包並解壓:
unzip master.zip –d /usr/local/
cd elasticsearch-head/
npm install
npm run start &

檢視埠狀態:(埠預設9100)
netstat –anpt | grep 9100

方法二、
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
netstat –anpt | grep 9100

方法三、
拉映象:
docker push mobz/elasticsearch-head:5
啟動映象:
docker run -p 9100:9100 mobz/elasticsearch-head:5
web訪問測試:
http://IP:9100
Elasticsearch-head安裝成功Web訪問結果如下:
在這裡插入圖片描述
需要手動連線到es如圖。

檢視剛剛從logstash推到ES中的資料:
在這裡插入圖片描述
7.安裝kibana
1)解壓並安裝kibana:

tar -zxvf /usr/local/kibana-5.3.1-linux-x86_64.tar.gz -C /usr/local/

2)修改kibana配置檔案:

vim /usr/local/kibana-5.3.1-linux-x86_64/config/kibana.yml
修改內容如下:
server.port: 5601 #開啟預設埠5601
server.host: “192.168.3.205” #kibana站點IP
elasticsearch.url: http://192.168.3.205:9200 #只想ES服務所在IP Port
kibana.index: “.kibana”

3)後臺啟動kibana:

nohup /usr/local/kibana-5.3.1-linux-x86_64/bin/kibana >> /dev/null 2>&1 &
檢視埠監聽:

netstat –anot | grep 5601
結果如:(此結果表示kibana啟動成功)

4)使用Web訪問kibana:

http://[Kibana IP]:5601
初次訪問結果如:(剛訪問的時候沒有建立索引所以沒有看不到資料)
在這裡插入圖片描述
根據logstash配置檔案中index設定索引:
首先檢視logstash中的index:
在這裡插入圖片描述
Kibana中建立index:
下面按照1,2,3,4順序進行設定:
在這裡插入圖片描述
此時我們在返回Discover在裡面我們就可以看到資料了:
在這裡插入圖片描述
(有的時候es服務許可權設定正常,java版本也正常,每次啟動都報錯:Permission denied。此時需要檢視es安裝所有目錄遞迴許可權,最好是把服務放在/usr/local下)

至此我們的ELK就安裝OK了!!!!!!!!!!!