您當前的位置:首頁 > 遊戲

ELK+kafka+filebeat企業內部日誌分析系統

作者:由 梨木Pro 發表于 遊戲時間:2020-03-02

ELK+kafka+filebeat企業內部日誌分析系統

elk:日誌蒐集平臺

ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成:

ELK+kafka+filebeat企業內部日誌分析系統

1、元件介紹

1、Elasticsearch:

ElasticSearch是一個基於Lucene的開源分散式搜尋伺服器。

只搜尋和分析日誌

特點:分散式,零配置,自動發現,索引自動分片,索引副本機制等

。它提供了一個分散式多使用者能力的全文搜尋引擎。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,設計用於雲計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。 在elasticsearch中,所有節點的資料是均等的。

2、Logstash:

Logstash是一個完全開源工具,可以對你的日誌進行收集、過濾、分析,並將其儲存供以後使用

只收集和過濾日誌,和改格式

簡單來說logstash就是一根具備實時資料傳輸能力的管道,負責將資料資訊從管道的輸入端傳輸到管道的輸出端;與此同時這根管道還可以讓你根據自己的需求在中間加上濾網,Logstash提供裡很多功能強大的濾網以滿足你的各種應用場景。

② Logstash的事件(logstash將資料流中等每一條資料稱之為一個event)處理流水線有三個主要角色完成:inputs –> filters –> outputs:

logstash整個工作流分為三個階段:輸入、過濾、輸出。每個階段都有強大的外掛提供支援

Input 必須,負責產生事件(Inputs generate events),常用的外掛有

file 從檔案系統收集資料

syslog 從syslog日誌收集資料

redis 從redis收集日誌

beats 從beats family收集日誌(如:Filebeats)

Filter常用的外掛有, 可選,負責資料處理與轉換(filters modify )

grok是logstash中最常用的日誌解釋和結構化外掛。:grok是一種採用組合多個預定義的正則表示式,用來匹配分割文字並對映到關鍵字的工具。

mutate 支援事件的變換,例如重新命名、移除、替換、修改等

drop 完全丟棄事件

clone 克隆事件

output 輸出,必須,負責資料輸出(outputs ship elsewhere),常用的外掛有

elasticsearch 把資料輸出到elasticsearch

file 把資料輸出到普通的檔案

3、Kibana:

Kibana 是一個基於瀏覽器頁面的Elasticsearch前端展示工具,也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 介面,可以幫你彙總、分析和搜尋重要資料日誌。

ELK+kafka+filebeat企業內部日誌分析系統

2、環境介紹

安裝軟體主機名IP地址系統版本

Elasticsearch/mes-1-zk192。168。246。234centos7。4——3Gzookeeper/kafka/Logstashes-2-zk-log192。168。246。231centos7。4——2Ghead/Kibanaes-3-head-kib-zk-File192。168。246。235centos7。4——-2G

所有機器關閉防火牆,selinux

3、版本說明

Elasticsearch: 6。5。4 #https://artifacts。elastic。co/downloads/elasticsearch/elasticsearch-6。5。4。tar。gz

Logstash: 6。5。4 #https://artifacts。elastic。co/downloads/logstash/logstash-6。5。4。tar。gz

Kibana: 6。5。4 #https://artifacts。elastic。co/downloads/kibana/kibana-6。5。4-linux-x86_64。tar。gz

Kafka: 2。11-2。1 #https://archive。apache。org/dist/kafka/2。1。0/kafka_2。11-2。1。0。tgz

Filebeat: 6。5。4

相應的版本最好下載對應的外掛

相關地址:

官網地址:https://www。elastic。co

官網搭建:

https://www。

elastic。co/guide/index。

html

實施部署

1、 Elasticsearch部署

Elasticsearch最關鍵的就是提供強大的索引能力。

Elasticsearch索引的精髓:一切設計都是為了提高搜尋的效能

Elasticsearch優勢

1。橫向可擴充套件性:只需要增加伺服器,做一點兒配置,啟動一下Elasticsearch就可以併入叢集。

2。分片機制提供更好的分佈性:同一個索引分成多個分片, 分而治之的方式可提升處理效率。

3。高可用:提供複製( replica) 機制,一個分片可以設定多個複製,使得某臺伺服器在宕機的情況下,叢集仍舊可以照常執行,並會把伺服器宕機丟失的資料資訊複製恢復到其他可用節點上。

4。使用簡單:共需一條命令就可以下載檔案,然後很快就能搭建一一個站內搜尋引擎。

Elasticsearch儲存結構

Elasticsearch是檔案儲存,Elasticsearch是面向文件型資料庫,一條資料在這裡就是一個文件

系統型別:Centos7。5 節點IP:172。16。246。234 軟體版本:jdk-8u191-linux-x64。tar。gz、elasticsearch-6。5。4。tar。gz 示例節點:172。16。246。234

1、安裝配置jdk8

ES執行依賴jdk8 ——-三臺機器都操作,先上傳jdk1。8

[root@mes-1 ~]# tar xzf jdk-8u191-linux-x64。tar。gz -C /usr/local/

[root@mes-1 ~]# cd /usr/local/

[root@mes-1 local]# mv jdk1。8。0_191/ java

[root@mes-1 local]# echo ‘

JAVA_HOME=/usr/local/java

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME PATH

’ >>/etc/profile

[root@mes-1 ~]# source /etc/profile

2、安裝配置ES----只在第一臺操作操作下面的部分

(1)建立執行ES的普通使用者

[root@mes-1 ~]# useradd elsearch

[root@mes-1 ~]# echo “123456” | passwd ——stdin “elsearch”

(2)安裝配置ES

[root@mes-1 ~]# tar xzf elasticsearch-6。5。4。tar。gz -C /usr/local/

[root@mes-1 ~]# cd /usr/local/elasticsearch-6。5。4/config/

[root@mes-1 config]# ls

elasticsearch。yml log4j2。properties roles。yml users_roles

jvm。options role_mapping。yml users

[root@mes-1 config]# cp elasticsearch。yml elasticsearch。yml。bak

[root@mes-1 config]# vim elasticsearch。yml ——找個地方新增如下內容

cluster。name: elk

node。name: elk01

node。master: true

node。data: true

path。data: /data/elasticsearch/data

path。logs: /data/elasticsearch/logs

bootstrap。memory_lock: false

bootstrap。system_call_filter: false

network。host: 0。0。0。0

http。port: 9200

#discovery。zen。ping。unicast。hosts: [“192。168。246。234”, “192。168。246。231”,“192。168。246。235”]

#discovery。zen。minimum_master_nodes: 2

#discovery。zen。ping_timeout: 150s

#discovery。zen。fd。ping_retries: 10

#client。transport。ping_timeout: 60s

http。cors。enabled: true

http。cors。allow-origin: “*”

配置項含義:

cluster。name 叢集名稱,各節點配成相同的叢集名稱。

node。name 節點名稱,各節點配置不同。

node。master 指示某個節點是否符合成為主節點的條件。

node。data 指示節點是否為資料節點。資料節點包含並管理索引的一部分。

path。data 資料儲存目錄。

path。logs 日誌儲存目錄。

bootstrap。memory_lock

bootstrap。system_call_filter

network。host 繫結節點IP。

http。port 埠。

discovery。zen。ping。unicast。hosts 提供其他 Elasticsearch 服務節點的單點廣播發現功能。

discovery。zen。minimum_master_nodes 叢集中可工作的具有Master節點資格的最小數量,具有master資格的節點的數量。

discovery。zen。ping_timeout 節點在發現過程中的等待時間。

discovery。zen。fd。ping_retries 節點發現重試次數。

http。cors。enabled 用於允許head外掛訪問ES。

http。cors。allow-origin 允許的源地址。

(3)設定JVM堆大小

[root@mes-1 config]# vim jvm。options ——將

-Xms1g ——修改成 -Xms2g

-Xmx1g ——修改成 -Xms2g

或者:

推薦設定為4G,請注意下面的說明:

sed -i ‘s/-Xms1g/-Xms4g/’ /usr/local/elasticsearch-6。5。4/config/jvm。options

sed -i ‘s/-Xmx1g/-Xmx4g/’ /usr/local/elasticsearch-6。5。4/config/jvm。options

注意: 確保堆記憶體最小值(Xms)與最大值(Xmx)的大小相同,防止程式在執行時改變堆記憶體大小。 堆記憶體大小不要超過系統記憶體的50%

(4)建立ES資料及日誌儲存目錄

[root@mes-1 ~]# mkdir -p /data/elasticsearch/data (/data/elasticsearch)

[root@mes-1 ~]# mkdir -p /data/elasticsearch/logs (/log/elasticsearch)

(5)修改安裝目錄及儲存目錄許可權

[root@mes-1 ~]# chown -R elsearch:elsearch /data/elasticsearch

[root@mes-1 ~]# chown -R elsearch:elsearch /usr/local/elasticsearch-6。5。4

3、系統最佳化

(1)增加最大檔案開啟數

永久生效方法: echo “* - nofile 65536” >> /etc/security/limits。conf

(2)增加最大程序數

[root@mes-1 ~]# vim /etc/security/limits。conf ——-在檔案最後面新增如下內容

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

更多的引數調整可以直接用這個

(3)增加最大記憶體對映數

[root@mes-1 ~]# vim /etc/sysctl。conf ——-新增如下

vm。max_map_count=262144

vm。swappiness=0

[root@mes-1 ~]# sysctl -p

啟動如果報下列錯誤

memory locking requested for elasticsearch process but memory is not locked

elasticsearch。yml檔案

bootstrap。memory_lock : false

/etc/sysctl。conf檔案

vm。swappiness=0

錯誤:

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

意思是elasticsearch使用者擁有的客串建檔案描述的許可權太低,知道需要65536個

解決:

切換到root使用者下面,

vim /etc/security/limits。conf

在最後新增

* hard nofile 65536

* hard nofile 65536

重新啟動elasticsearch,還是無效?

必須重新登入啟動elasticsearch的賬戶才可以,例如我的賬戶名是elasticsearch,退出重新登入。

另外*也可以換為啟動elasticsearch的賬戶也可以,* 代表所有,其實比較不合適

啟動還會遇到另外一個問題,就是

max virtual memory areas vm。max_map_count [65530] is too low, increase to at least [262144]

意思是:elasticsearch使用者擁有的記憶體許可權太小了,至少需要262114。這個比較簡單,也不需要重啟,直接執行

# sysctl -w vm。max_map_count=262144

就可以了

4、啟動ES

[root@mes-1 ~]# su - elsearch

Last login: Sat Aug 3 19:48:59 CST 2019 on pts/0

[root@mes-1 ~]$ cd /usr/local/elasticsearch-6。5。4/

[root@mes-1 elasticsearch-6。5。4]$ 。/bin/elasticsearch #先啟動看看報錯不,需要多等一會

終止之後

[root@mes-1 elasticsearch-6。5。4]$ nohup 。/bin/elasticsearch & #放後臺啟動

[1] 11462

nohup: ignoring input and appending output to ‘nohup。out’

[root@mes-1 elasticsearch-6。5。4]$ tail -f nohup。out #看一下是否啟動

或者:

su - elsearch -c “cd /usr/local/elasticsearch-6。5。4 && nohup bin/elasticsearch &”

測試:瀏覽器訪問http://172。16。246。234:9200

ELK+kafka+filebeat企業內部日誌分析系統

9200與9300埠號的區別

9300埠: ES節點之間通訊使用,是TCP協議埠號,ES叢集之間通訊埠號。

9200埠: ES節點和外部通訊使用,暴露介面埠號。瀏覽器訪問時使用

5.安裝配置head監控外掛(Web前端)----只需要安裝一臺就可以了。192.168.246.235

(1)安裝node

[root@es-3-head-kib ~]# wget https://npm。taobao。org/mirrors/node/latest-v4。x/node-v4。4。7-linux-x64。tar。gz

[root@es-3-head-kib ~]# tar -zxf node-v4。4。7-linux-x64。tar。gz –C /usr/local

[root@es-3-head-kib ~]# vim /etc/profile #新增如下變數

NODE_HOME=/usr/local/node-v4。4。7-linux-x64

PATH=$NODE_HOME/bin:$PATH

export NODE_HOME PATH

[root@es-3-head-kib ~]# source /etc/profile

[root@es-3-head-kib ~]# node ——version #檢查node版本號

v4。4。7

(2)下載head外掛

[root@es-3-head-kib ~]# wget https://github。com/mobz/elasticsearch-head/archive/master。zip

[root@es-3-head-kib ~]# cp master。zip /usr/local/

[root@es-3-head-kib ~]# unzip -d /usr/local/ master。zip

[root@es-3-head-kib ~]# cd /usr/local

或者

unzip –d /usr/local elasticsearch-head-master。zip

(3)安裝grunt

[root@es-3-head-kib ~]# cd elasticsearch-head-master/

[root@mes-3-head-kib elasticsearch-head-master]# npm config set registry https://registry。npm。taobao。org #更換一個映象,如果不更換下載會很慢

[root@mes-3-head-kib elasticsearch-head-master]# npm install -g grunt-cli #時間會很長

[root@es-3-head-kib elasticsearch-head-master]# grunt ——version #檢查grunt版本號

(4)修改head原始碼

[root@es-3-head-kib elasticsearch-head-master]# vim /usr/local/elasticsearch-head-master/Gruntfile。js (95左右)

ELK+kafka+filebeat企業內部日誌分析系統

新增hostname,注意在上一行末尾新增逗號,hostname 不需要新增逗號 [root@es-3-head-kib elasticsearch-head-master]# vim /usr/local/elasticsearch-head-master/_site/app。js (4359左右)

如果在一臺機器上面可以不修改下面的操作。保持原來的就可以了

如果是叢集需要修改如下資訊:

ELK+kafka+filebeat企業內部日誌分析系統

原本是http://localhost:9200 ,如果head和ES不在同一個節點,注意修改成ES的IP地址

(5)下載head必要的檔案

[root@es-3-head-kib ~]# wget https://github。com/Medium/phantomjs/releases/download/v2。1。1/phantomjs-2。1。1-linux-x86_64。tar。bz2

[root@es-3-head-kib ~]# yum -y install bzip2

[root@es-3-head-kib ~]# tar -jxf phantomjs-2。1。1-linux-x86_64。tar。bz2 -C /tmp/ #解壓

(6)執行head

[root@es-3-head-kib ~]# cd /usr/local/elasticsearch-head-master/

[root@es-3-head-kib elasticsearch-head-master]# npm config set registry https://registry。npm。taobao。org #先執行這條命令更換一個映象

[root@es-3-head-kib elasticsearch-head-master]# npm install

。。。

grunt-contrib-jasmine@1。0。3 node_modules/grunt-contrib-jasmine

├── sprintf-js@1。0。3

├── lodash@2。4。2

├── es5-shim@4。5。13

├── chalk@1。1。3 (escape-string-regexp@1。0。5, supports-color@2。0。0, ansi-styles@2。2。1, strip-ansi@3。0。1, has-ansi@2。0。0)

├── jasmine-core@2。99。1

├── rimraf@2。6。3 (glob@7。1。4)

└── grunt-lib-phantomjs@1。1。0 (eventemitter2@0。4。14, semver@5。7。0, temporary@0。0。8, phan

[root@es-3-head-kib elasticsearch-head-master]# nohup grunt server &

(7)測試

訪問http://172。16。246。235:9100

ELK+kafka+filebeat企業內部日誌分析系統

叢集中節點的分類

主節點:首先要將節點設定為候選主節點,候選主節點的設定方法是設定node。mater為true,預設情況下,node。mater和node。data的值都為true。在叢集啟動後各個節點會在候選節點中選舉一個主節點。主節點負責建立索引、刪除索引、分配分片、追蹤叢集中的節點狀態等工作。

資料節點:負責資料的儲存和相關具體操作,比如搜尋。所以,資料節點對機器配置要求比較高,首先需要有足夠的磁碟空間來儲存資料,其次資料操作對系統CPU、Memory和IO的效能消耗都很大。通常隨著叢集的擴大,需要增加更多的資料節點來提高可用性。

客戶端節點:負責請求的分發和彙總,本身並不儲存資料。從而更好的實現負載均衡。

協調節點:這是一個節點的角色,不管是主節點、資料節點還是客戶端節點,只要請求是由哪個節點進行分發和彙總,那麼該節點就是承擔了協調節點的角色。協調節點對處理器和執行記憶體要求比較高,客戶端節點只能作為協調節點。

分片

主分片(Primary Shard):是elasticsearch的最小儲存單元,一個index中的資料通常會儲存在多個分片中。預設情況下,elasticsearch會為每個index分為5個分片。分片並不是越多越好,雖然分片查詢時並行的,但是請求的分發和結果的合併都需要消耗時間和效能的,所以在資料量比較少的情況下,分片太多反而會降低效率。分片在建立index的時候就已經分配好,並且無法修改。

複製分片(Replica Shard):主要是進行資料冗餘來提高系統的可靠性。

叢集狀態

Red,表示有主分片沒有分配,某些資料不可用。

Yellow,表示主分片都已分配,資料都可用,但是有複製分片沒有分配。

Green,表示主分片和複製分片都已分配,一切正常。

2、 Kibana部署

系統型別:Centos7。5 節點IP:192。168。246。235 D 軟體版本:nginx-1。14。2、kibana-6。5。4-linux-x86_64。tar。gz

1. 安裝配置Kibana

(1)安裝

[root@es-3-head-kib ~]# tar zvxf kibana-6。5。4-linux-x86_64。tar。gz -C /usr/local/

(2)配置

[root@es-3-head-kib ~]# cd /usr/local/kibana-6。5。4-linux-x86_64/config/

[root@es-3-head-kib config]# vim kibana。yml

server。port: 5601

server。host: “192。168。246。235”

elasticsearch。url: “http://192。168。246。234:9200”

kibana。index: “。kibana”

配置項含義:

server。port kibana服務埠,預設5601

server。host kibana主機IP地址,預設localhost

elasticsearch。url 用來做查詢的ES節點的URL,預設http://localhost:9200

kibana。index kibana在Elasticsearch中使用索引來儲存儲存

dashboards,預設。kibana

其他配置項可參考:

https://www。

elastic。co/guide/en/kib

ana/6。5/settings。html

(3)啟動

[root@es-3-head-kib config]# cd 。。

[root@es-3-head-kib kibana-6。5。4-linux-x86_64]# nohup 。/bin/kibana &

[1] 12054

[root@es-3-head-kib kibana-6。5。4-linux-x86_64]# nohup: ignoring input and appending output to ‘nohup。out’

2. 安裝配置Nginx反向代理

(1)配置YUM源:

[root@es-3-head-kib ~]# rpm -ivh

http://

nginx。org/packages/cent

os/7/noarch/RPMS/nginx-release-centos-7-0。el7。ngx。noarch。rpm

(2)安裝:

[root@es-3-head-kib ~]# yum install -y nginx 注意:httpd-tools用於生成nginx認證訪問的使用者密碼檔案

(3)配置反向代理

[root@es-3-head-kib ~]# cd /etc/nginx/conf。d/

[root@es-3-head-kib conf。d]# cp default。conf nginx。conf

[root@es-3-head-kib conf。d]# mv default。conf default。conf。bak

[root@es-3-head-kib conf。d]# vim nginx。conf

[root@es-3-head-kib conf。d]# cat nginx。conf

server {

listen 80;

server_name 192。168。246。235;

#charset koi8-r;

# access_log /var/log/nginx/host。access。log main;

# access_log off;

location / {

proxy_pass http://192。168。246。235:5601;

proxy_set_header Host $host:5601;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Via “nginx”;

}

location /head/{

proxy_pass http://192。168。246。235:9100;

proxy_set_header Host $host:9100;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Via “nginx”;

}

}

(4)配置nginx

1。將原來的log_format註釋掉,新增json格式的配置資訊,如下:

[root@es-3-head-kib conf。d]# vim /etc/nginx/nginx。conf

log_format json ‘{“@timestamp”:“$time_iso8601”,’

‘“@version”:“1”,’

‘“client”:“$remote_addr”,’

‘“url”:“$uri”,’

‘“status”:“$status”,’

‘“domain”:“$host”,’

‘“host”:“$server_addr”,’

‘“size”:$body_bytes_sent,’

‘“responsetime”:$request_time,’

‘“referer”: “$http_referer”,’

‘“ua”: “$http_user_agent”’

‘}’;

2。引用定義的json格式的日誌:

access_log /var/log/nginx/access_json。log json;

ELK+kafka+filebeat企業內部日誌分析系統

(5)啟動nginx

root@es-3-head-kib ~]# systemctl start nginx

瀏覽器訪問http://192。168。246。235 剛開始沒有任何資料,會提示你建立新的索引。

ELK+kafka+filebeat企業內部日誌分析系統

ELK+kafka+filebeat企業內部日誌分析系統

標簽: Root  head  Elasticsearch  kib  節點