ELK日誌平臺分析(Elasticsearch安裝配置+logstash數據採集+Kibana數據可視化+xpack安全驗證)

1.Elasticsearch

官網:https://www.elastic.co/cn/

1.1 Elasticsearch介紹

Elasticsearch 是一個開源的分佈式搜索分析引擎,建立在一個全文搜索引擎庫 Apache Lucene基礎之上。
Elasticsearch 不僅僅是Lucene,並且也不僅僅只是一個全文搜索引擎:
一個分佈式的實時文檔存儲,每個字段可以被索引與搜索
一個分佈式實時分析搜索引擎

能勝任上百個服務節點的擴展,並支持 PB 級別的結構化或者非結構化數據
基礎模塊:

cluster:管理集羣狀態,維護集羣層面的配置信息。
alloction:封裝了分片分配相關的功能和策略。
discovery:發現集羣中的節點,以及選舉主節點。
gateway:對收到master廣播下來的集羣狀態數據的持久化存儲。
indices:管理全局級的索引設置。
http:允許通過JSON over
HTTP的方式訪問ES的API。
transport:用於集羣內節點之間的內部通信。

engine:封裝了對Lucene的操作及translog的調用。

elasticsearch應用場景:
• 信息檢索
• 日誌分析
• 業務數據分析
• 數據庫加速
• 運維指標監控


1.2 Elasticsearch的安裝與配置

可參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html
實驗環境:給2G內存
server1:172.25.0.1
server2:172.25.0.2
server3:172.25.0.3

1.安裝軟件並修改配置文件

yum install -y elasticsearch-7.6.1.rpm 安裝軟件
vim /etc/elasticsearch/elasticsearch.yml修改配置文件

cluster.name: my-es                   #集羣名稱
node.name: server7                   #主機名需要解析
path.data: /var/lib/elasticsearch #數據目錄
path.logs: /var/log/elasticsearch #日誌目錄
bootstrap.memory_lock: true     #鎖定內存分配
network.host: 172.25.0.1            #主機ip
http.port: 9200                   #http服務端口
discovery.seed_hosts: ["server1"]
cluster.initial_master_nodes: ["server1"]

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


2.修改系統限制

vim /etc/security/limits.conf

elasticsearch    soft    memlock         unlimited
elasticsearch    hard    memlock         unlimited
elasticsearch    -       nofile          65536 ##要將elasticsearch用戶的最大打開文件數設置爲65535
elasticsearch    -       nproc           4096 ## 確保Elasticsearch用戶可以創建的線程數至少爲4096

在這裏插入圖片描述
vim /etc/elasticsearch/jvm.options

-Xms1g ###Xmx設置不超過物理RAM的50%,以確保有足夠的物理RAM留給內核文件系統緩存。但不要超過32G。
-Xmx1g

在這裏插入圖片描述
swapoff -a禁用swap
vim /etc/fstab

#UUID=2a714265-f92d-4429-87da-9f09e32e6ff2 swap                    swap    defaults        0 0 ##避免開機自啓

在這裏插入圖片描述
也可以:
echo 0 >/proc/sys/vm/swappiness

在這裏插入圖片描述


3.修改systemd啓動文件

vim /usr/lib/systemd/system/elasticsearch.service

[Service]
LimitMEMLOCK=infinity

在這裏插入圖片描述
systemctl daemon-reload
systemctl start elasticsearch

在這裏插入圖片描述


4.elasticsearch插件安裝

unzip elasticsearch-head-master.zip
在這裏插入圖片描述
在這裏插入圖片描述
yum install -y nodejs-9.11.2-1nodesource.x86_64.rpmhead插件本質上是一個nodejs的工程,因此需要安裝node
在這裏插入圖片描述
在這裏插入圖片描述


5.更換npm的yum源(要求虛擬機可上網)

tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2
cp phantomjs-2.1.1-linux-x86_64//bin/phantomjs /usr/local/bin
yum install -y fontconfig-2.13.0-4.3.el7.x86_64解決依賴性
cd elasticsearch-head-master必須在這個目錄中
npm install --registry=https://registry.npm.taobao.org更換npm的yum源

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


6.修改es主機ip和端口

vim /root/elasticsearch-head-master/_site/app.js

"http://172.25.0.1:9200";

在這裏插入圖片描述


7.啓動head插件

cd /root/elasticsearch-head-master
npm run start &在目錄中後臺啓動head插件

在這裏插入圖片描述
在這裏插入圖片描述


8.修改ES跨域主持

vim /etc/elasticsearch/elasticsearch.yml修改ES跨域主持

http.cors.enabled: true # 是否支持跨域
http.cors.allow-origin: "*"    # *表示支持所有域名

systemctl restart elasticsearch.service重啓ES服務
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


9.創建索引

在這裏插入圖片描述
在這裏插入圖片描述


1.3 配置Elasticsearch集羣

將server2與server3加入集羣
vim /etc/elasticsearch/elasticsearch.yml修改配置文件**

cluster.name: my-es
node.name: server2 ##server3寫server3
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 172.25.0.2 ##server3的IP寫172.25.0.3
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["server1", "server2", "server3"] ##server1中也需要改
cluster.initial_master_nodes: ["server1", "server2", "server3"]

vim /etc/security/limits.conf

elasticsearch    soft    memlock         unlimited
elasticsearch    hard    memlock         unlimited
elasticsearch    -       nofile          65536
elasticsearch    -       nproc           4096123

vim /usr/lib/systemd/system/elasticsearch.service

[Service]
LimitMEMLOCK=infinity1
systemctl daemon-reload

systemctl start elasticsearch.service
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


1.4 Elasticsearch中的節點角色與優化

1.Elasticsearch中的節點角色

Master : 主要負責集羣中索引的創建、刪除以及數據的Rebalance等操作。Master不負責數據的索引和檢索,所以負載較輕。當Master節點失聯或者掛掉的時候,ES集羣會自動從其他Master節點選舉出一個Leader。
Data Node: 主要負責集羣中數據的索引和檢索,一般壓力比較大。
Coordinating Node: 原來的Client node的,主要功能是來分發請求和合並結果的。所有節點默認就是Coordinating node,且不能關閉該屬性。
Ingest Node: 專門對索引的文檔做預處理


2.Elasticsearch節點的優化

在生產環境下,如果不修改elasticsearch節點的角色信息,在高數據量,高併發的場景下集羣容易出現腦裂等問題。
默認情況下,elasticsearch集羣中每個節點都有成爲主節點的資格,也都存儲數據,還可以提供查詢服務。

節點角色是由以下屬性控制:
node.master: false|true
node.data: true|false
node.ingest: true|false
search.remote.connect: true|false
默認情況下這些屬性的值都是true。

node.master:這個屬性表示節點是否具有成爲主節點的資格
注意:此屬性的值爲true,並不意味着這個節點就是主節點。因爲真正的主節點,是由多個具有主節點資格的節點進行選舉產生的。
node.data:這個屬性表示節點是否存儲數據。
node.ingest: 是否對文檔進行預處理。
search.remote.connect:是否禁用跨集羣查詢

第一種組合:(默認)
node.master: true
node.data: true
node.ingest: true
search.remote.connect: true
這種組合表示這個節點即有成爲主節點的資格,又存儲數據。

如果某個節點被選舉成爲了真正的主節點,那麼他還要存儲數據,這樣對於這個節點的壓力就比較大了。
測試環境下這樣做沒問題,但實際工作中不建議這樣設置。

第二種組合:(Data node)
node.master: false
node.data: true
node.ingest: false
search.remote.connect: false
這種組合表示這個節點沒有成爲主節點的資格,也就不參與選舉,只會存儲數據。
這個節點稱爲data(數據)節點。在集羣中需要單獨設置幾個這樣的節點負責存儲數據。後期提供存儲和查詢服務。

第三種組合:(master node)
node.master: true
node.data: false
node.ingest: false
search.remote.connect: false
這種組合表示這個節點不會存儲數據,有成爲主節點的資格,可以參與選舉,有可能成爲真正的主節點。
這個節點我們稱爲master節點。

第四種組合:(Coordinating Node)
node.master: false
node.data: false
node.ingest: false
search.remote.connect: false
這種組合表示這個節點即不會成爲主節點,也不會存儲數據,這個節點的意義是作爲一個協調節點,主要是針對海量請求的時候可以進行負載均衡。

第五種組合:(Ingest Node)
node.master: false
node.data: false
node.ingest: true
search.remote.connect: false
這種組合表示這個節點即不會成爲主節點,也不會存儲數據,這個節點的意義是ingest節點,對索引的文檔做預處理。

vim /etc/elasticsearch/elasticsearch.yml
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
生產集羣中可以對這些節點的職責進行劃分,建議集羣中設置3臺以上的節點作爲master節點,這些節點只負責成爲主節點,維護整個集羣的狀態。再根據數據量設置一批data節點,這些節點只負責存儲數據,後期提供建立索引和查詢索引的服務,這樣的話如果用戶請求比較頻繁,這些節點的壓力也會比較大。所以在集羣中建議再設置一批協調節點,這些節點只負責處理用戶請求,實現請求轉發,負載均衡等功能。

節點需求:
master節點:普通服務器即可(CPU、內存 消耗一般)
data節點:主要消耗磁盤、內存。
path.data: data1,data2,data3
這樣的配置可能會導致數據寫入不均勻,建議只指定一個數據路徑,磁盤可以使用raid0陣列,而不需要成本高的ssd。
Coordinating節點:對cpu、memory要求較高。


2.logstash數據採集

2.1 logstash介紹

Logstash是一個開源的服務器端數據處理管道。
logstash擁有200多個插件,能夠同時從多個來源採集數據,轉換數據,然後將數據發送到您最喜歡的 “存儲庫” 中。(大多都是Elasticsearch。)
Logstash管道有兩個必需的元素,輸入和輸出,以及一個可選元素過濾器。

在這裏插入圖片描述
1.輸入:採集各種樣式、大小和來源的數據
Logstash 支持各種輸入選擇 ,同時從衆多常用來源捕捉事件。
能夠以連續的流式傳輸方式,輕鬆地從日誌、指標、Web 應用、數據存儲以及各種 AWS 服務採集數據。

在這裏插入圖片描述
2.過濾器:實時解析和轉換數據
數據從源傳輸到存儲庫的過程中,Logstash 過濾器能夠解析各個事件,識別已命名的字段以構建結構,並將它們轉換成通用格式,以便更輕鬆、更快速地分析和實現商業價值。

功能:
利用 Grok 從非結構化數據中派生出結構
IP 地址破譯出地理座標
將 PII 數據匿名化,完全排除敏感字段
簡化整體處理,不受數據源、格式或架構的影響

3.輸出:選擇存儲庫,導出數據
logstash 提供衆多輸出選擇,您可以將數據發送到您要指定的地方,並且能夠靈活地解鎖衆多下游用例。

在這裏插入圖片描述


2.2 logstash的安裝與配置

實驗環境:
server4:172.25.0.4

rpm -ivh jdk-8u171-linux-x64.rpm
rpm -ivh logstash-7.6.1.rpm 安裝logstash

在這裏插入圖片描述
標準輸入到標準輸出:
/usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

在這裏插入圖片描述
在這裏插入圖片描述


2.3 logstash的輸入/輸出

1.file輸出插件

標準輸入到文件:vim /etc/logstash/conf.d/file.conf

input {
        stdin { }
}
output {
        file {
                path => "/tmp/logstash.txt"        ##輸出的文件路徑
                codec => line { format => "custom format: %{message}"} ##定製數據格式 
        }
}

指定配置文件運行:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file.conf
查看輸入:cat /tmp/logstash.txt

在這裏插入圖片描述
在這裏插入圖片描述


2.elasticsearch輸出插件

標準輸入到es主機:vim /etc/logstash/conf.d/es.conf

input {
        stdin { }
}
output {
        elasticsearch {
                hosts => "172.25.0.1:9200"    ##輸出到的ES主機與端口
                index => "logstash-%{+YYYY.MM.dd}"   ##定製索引名稱
        }
}

指定配置文件運行:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.file輸入插件

在server4安裝並開啓httpd
yum install -y httpd
systemctl start httpd
echo www.red.com > /var/www/html/index.html

用戶訪問server4的httpd生成數據ab -c 1 -n 100 http://172.25.0.4/index.html

把文件內容輸出到es主機:vim /etc/logstash/conf.d/es.conf

input {
        file { 
  path => "/var/log/httpd/access_log"
  start_position => "beginning"
 }
}
output {
        stdout {} ##可以在這裏輸出
        elasticsearch {
                hosts => "172.25.0.1:9200"    
                index => "logstash-%{+YYYY.MM.dd}"   
        }
}

指定配置文件運行:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


4.logstash會把進度保存到sincedb文件中

sincedb文件內容解釋(sincedb文件一共6個字段)
1.inode編號
2.文件系統的主要設備號
3.文件系統的次要設備號
4.文件中的當前字節偏移量
5.最後一個活動時間戳(浮點數)
6.與此記錄匹配的最後一個已知路徑

在這裏插入圖片描述
注意:如果數據被在刪除,再次運行的時候將不會從頭讀取。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


5.Syslog輸入插件

logstash可以僞裝成日誌服務器,直接接受遠程日誌
vim /etc/logstash/conf.d/syslog.conf

input {
        syslog {
                port => 514 ##日誌收集端口
        }
}
output {
 stdout {}        
 elasticsearch {
                hosts => "172.25.0.1:9200"    
                index => "syslog-%{+YYYY.MM.dd}"   
        }
}

配置客戶端傳入日誌:vim /etc/rsyslog.conf

*.* @@172.25.0.4:514

systemctl restart rsyslog.service重啓日誌服務
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


6.多行過濾插件

多行過濾可以把多行日誌記錄合併爲一行事件
示例一
vim /etc/logstash/conf.d/multiline.conf

input {
      stdin {
            codec => multiline {
            pattern => "^EOF"
            negate => true
            what => previous
            }
     }
}

output {
      stdout {}
}

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/multiline.conf
在這裏插入圖片描述
在這裏插入圖片描述


示例二:解決日誌多行錄入的情況
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
vim /etc/logstash/conf.d/es.conf

input {
  file {
       path => "/var/log/my-es.log"
       start_position => "beginning"
       codec => multiline {
               pattern => "^\[" ##已[開頭的地方換行
               negate => true
               what => previous
                }
       }
}

output {
   stdout {}
 
  elasticsearch {
          hosts => ["172.25.0.1:9200"]
        index => "eslog-%{+yyyy.MM.dd}"
 }
}

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


7.grok過濾插件

vim /etc/logstash/conf.d/grok.conf

input {
        stdin {}
}
filter {
        grok {
           match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
        }
}
output {
        stdout {}
}

指定配置文件運行:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/grok.conf

在這裏插入圖片描述
在這裏插入圖片描述


grok過濾插件處理apache日誌
獲得幫助:cat /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/httpd
在這裏插入圖片描述
vim /etc/logstash/conf.d/apache.conf

input {
 file {
  path => "/var/log/httpd/access_log"
  start_position => "beginning"
 }
}


filter {
      grok {
             match => { "message" => "%{HTTPD_COMBINEDLOG}" }
      }
}

output {
     stdout {}

 elasticsearch {
     hosts => ["172.25.0.1:9200"]
     index => "apachelog-%{+yyyy.MM.dd}"
 }
}

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.kibana數據可視化

3.1 kibana的介紹

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.2 kibana的安裝與配置

實驗環境:
server5:172.25.0.5

安裝kibana:rpm-ivh kibana-7.6.1-x86_64.rpm
kibana配置:vim /etc/kibana/kibana.yml

server.port: 5601                #服務端口
server.host: "172.25.0.17"           #服務監聽地址
elasticsearch.hosts: ["http://172.25.0.13:9200"] #ES集羣地址
kibana.index: ".kibana"               #kibana在ES中創建的索引
i18n.locale: "zh-CN"                   

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.3 kibana的自定義圖表

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
**

3.4 啓用xpack安全驗證

集羣模式需要先創建證書:
cd /usr/share/elasticsearch/bin/
./elasticsearch-certutil ca
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
cd ..
cp elastic-certificates.p12 elastic-stack-ca.p12 /etc/elasticsearch/
cd /etc/elasticsearch/
chown elasticsearch elastic-certificates.p12 elastic-stack-ca.p12

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


配置所有的elasticsearch集羣節點:
vim /etc/elasticsearch/elasticsearch.yml

在這裏插入代碼片

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


ES集羣重啓正常後,設置用戶密碼:
/usr/share/elasticsearch/bin//elasticsearch-setup-passwords interactive

在這裏插入圖片描述


vim /etc/kibana/kibana.yml

elasticsearch.username: "kibana"
elasticsearch.password: "redhat"

systemctl restart kibana.service
在這裏插入圖片描述
在這裏插入圖片描述


在這裏插入圖片描述


head訪問:
vim /etc/elasticsearch/elasticsearch.yml

http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

systemctl restart elasticsearch.service
在這裏插入圖片描述
在這裏插入圖片描述http://172.25.0.1:9100/?auth_user=elastic&auth_password=redhat
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章