解決方案之ELK日誌系統

Table of Contents

1. Elasticsearch集羣部署

1.1 Elasticsearch簡介

1.2 Elasticsearch安裝與部署

1.3 elasticsearch插件安裝

1.4 elasticsearch分佈式部署

1.5 elasticsearch節點角色 

1.6 elasticsearch節點優化

2. logstash數據採集

2.1 Logstash簡介

2.2 Logstash安裝與配置

2.3 file輸出插件

2.4 elasticsearch輸出插件

2.5 file輸入插件

2.6 syslog插入插件

2.7 多行過濾插件

2.8 grok過濾插件

3. kibana可視化

3.1 kibana簡介

3.2 kibana安裝與配置

3.3 kibana使用

3.4 啓用xpack安全驗證


1. Elasticsearch集羣部署

1.1 Elasticsearch簡介

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

Elasticsearch 是一個分佈式可擴展的實時搜索和分析引擎,一個建立在全文搜索引擎 Apache Lucene(TM) 基礎上的搜索引擎.當然 Elasticsearch 並不僅僅是 Lucene 那麼簡單,它不僅包括了全文搜索功能,還可以進行以下工作:

  • 分佈式實時文件存儲,並將每一個字段都編入索引,使其可以被搜索。
  • 實時分析的分佈式搜索引擎。
  • 可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。

基礎模塊

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

     engine

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

Elasticsearch應用場景:

  • 信息檢索
  • 日誌分析
  • 業務數據分析
  • 數據庫加速
  • 運維指標監控 

1.2 Elasticsearch安裝與部署

下載地址:https://elasticsearch.cn/download/

清華大學開源軟件鏡像站:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.6.0/

官方安裝步驟文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

安裝軟件

rpm -ivh jdk-8u171-linux-x64.rpm 
rpm -ivh elasticsearch-7.7.1.rpm    //7.6版本以上自帶jdk 

設置服務自啓

systemctl daemon-reload 
systemctl enable elasticsearch

修改配置文件

vim /etc/elasticsearch/elasticsearch.yml

修改系統限制:kernel > system > user

vim /etc/security/limits.conf

vim /etc/elasticsearch/jvm.options

Systemd配置【使用Systemd啓動】 

vim /usr/lib/systemd/system/elasticsearch.service ##在service模塊添加

啓動

systemctl daemon-reload
systemctl start elasticsearch

測試訪問

1.3 elasticsearch插件安裝

安裝詳解:https://github.com/mobz/elasticsearch-head

下載安裝

wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip 

下載安裝nodejs(head插件本質上是一個nodejs的工程)

wget https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm
rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm

node -v 
npm -v  ##查看版本,確定安裝成功

更換npm源安裝

cd elasticsearch-head-master/ 
npm install  --registry=https://registry.npm.taobao.org 

缺少phantomjs

下載並解壓phantomjs

將執行文件複製到bin目錄下

執行npm install

npm install  --registry=https://registry.npm.taobao.org

修改ES主機ip和端口

vim ~/elasticsearch-head/_site/app.js

啓動head插件

npm run start &

image widget

修改ES跨域主持

vim /etc/elasticsearch/elasticsearch.yml

重啓ES服務

systemctl restart elasticsearch.service

訪問head插件服務

創建索引

查看es狀態

1.4 elasticsearch分佈式部署

安裝兩個es節點,並修改配置

node2:

node3:

查看節點狀態

1.5 elasticsearch節點角色 

Master:

主要負責集羣中索引的創建、刪除以及數據的Rebalance等操作。Master不負責數據的索引和檢索,所以負載較輕。當Master節點失聯或者掛掉的時候,ES集羣會自動從其他Master節點選舉出一個Leader。

Data Node:

主要負責集羣中數據的索引和檢索,一般壓力比較大。

Coordinating Node:

原來的Client node的,主要功能是來分發請求和合並結果的。所有節點默認就是Coordinating node,且不能關閉該屬性。

Ingest Node:

專門對索引的文檔做預處理 

1.6 elasticsearch節點優化

在生產環境下,如果不修改elasticsearch節點的角色信息,在高數據量,高併發的場景下集羣容易出現腦裂等問題。

默認情況下,elasticsearch集羣中每個節點都有成爲主節點的資格,也都存儲數據,還可以提供查詢服務。

節點角色是由以下屬性控制:

node.master:  false|true      

這個屬性表示節點是否具有成爲主節點的資格,注意:此屬性的值爲true,並不意味着這個節點就是主節點。     因爲真正的主節點,是由多個具有主節點資格的節點進行選舉產生的。  

node.data:  true|false

這個屬性表示節點是否存儲數據

node.ingest:  true|false

是否對文檔進行預處理。

search.remote.connect: true|false  

是否禁用跨集羣查詢

默認情況下這些屬性的值都是true。

第一種組合:(默認)

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節點,對索引的文檔做預處理。

生產集羣中可以對這些節點的職責進行劃分

建議集羣中設置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管道有兩個必需的元素,輸入和輸出,以及一個可選元素過濾器

輸入:

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

過濾器:

實時解析和轉換數據 數據從源傳輸到存儲庫的過程中,Logstash 過濾器能夠解析各個事件,識別已命名的字段以構建結構,並將它們轉換成通用格式,以便更輕鬆、更快速地分析和實現商業價值。利用 Grok 從非結構化數據中派生出結構從 IP 地址破譯出地理座標將 PII 數據匿名化,完全排除敏感字段簡化整體處理,不受數據源、格式或架構的影響

輸出:

選擇您的存儲庫,導出您的數據  儘管 Elasticsearch 是我們的首選輸出方向,能夠爲我們的搜索和分析帶來無限可能,但它並非唯一選擇。 Logstash 提供衆多輸出選擇,您可以將數據發送到您要指定的地方,並且能夠靈活地解鎖衆多下游用例。

2.2 Logstash安裝與配置

官方下載地址:https://elasticsearch.cn/download/

推薦下載地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.7.1/

Logstash安裝

rpm -ivh jdk-8u221-linux-x64.rpm

rpm -ivh logstash-7.7.1.rpm

軟鏈接

ln -s /usr/share/logstash/bin/logstash /usr/bin/  ##軟連接

標準輸入到標準輸出

logstash -e 'input { stdin { } } output { stdout {}

2.3 file輸出插件

標準輸入到文件

vim /etc/logstash/conf.d/file.conf

指定配置文件運行

logstash -f /etc/logstash/conf.d/file.conf

在標準輸入中鍵入"hello"後查看 

cat /tmp/logstash.txt 

2.4 elasticsearch輸出插件

標準輸入到es主機

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

指定配置文件運行

logstash -f /etc/logstash/conf.d/es.conf

查看ES狀態

2.5 file輸入插件

vim /etc/logstash/conf.d/es.conf

logstash -f /etc/logstash/conf.d/es.conf

查看ES

logstash如何區分設備、文件名、文件的不同版本

  • logstash會把進度保存到sincedb文件中
find / -name .sincedb*
cat /usr/share/logstash/data/plugins/inputs/file/.sincedb_15940cad53dd1d99808eeaecd6f6ad3f

ls -i /var/log/httpd/access_log

sincedb文件內容解釋

6個字段:

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

2.6 syslog插入插件

logstash可以僞裝成日誌服務器,直接接受遠程日誌

vim /etc/logstash/conf.d/syslog.conf

指定配置文件運行 

logstash -f /etc/logstash/conf.d/syslog.conf

netstat -antulp |grep :514

配置客戶端傳入日誌

vim /etc/rsyslog.conf  # logstash安裝在node4 192.168.1.14

systemctl restart rsyslog

查看logstash輸出

2.7 多行過濾插件

多行過濾把多行日誌記錄合併爲一行事件

vim /etc/logstash/conf.d/multiline.conf
###
input {
         stdin {
         codec => multiline {
                 pattern => "^EOF"    ##以EOF爲結束
                 negate => true
                 what => previous
                 }
         }
 }
 
 output {
         stdout {}
 }
###

指定配置文件運行

logstash -f /etc/logstash/conf.d/multiline.conf

查看輸出

2.8 grok過濾插件

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 {}
}
###

指定配置文件運行

logstash -f /etc/logstash/conf.d/grok.conf

查看輸出

  • apache服務日誌過濾實戰
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 {
        elasticsearch {
                hosts => "192.168.1.11:9200"
                index => "apachelog-%{+YYYY.MM.dd}"
        }
}
###

curl 127.0.0.1  ##本地訪問兩次,生成點日誌

指定配置文件運行

logstash -f /etc/logstash/conf.d/apache.conf

查看輸出

  • curl訪問 

可以看到兩條訪問記錄,且是本機通過curl訪問

  • 瀏覽器訪問

3. kibana可視化

3.1 kibana簡介

Kibana 核心產品搭載了一批經典功能:柱狀圖、線狀圖、餅圖、旭日圖等~

將地理數據融入任何地圖

精選的時序性 UI,對Elasticsearch 中的數據執行高級時間序列分析

利用 Graph 功能分析數據間的關係

Kibana 開發工具爲開發人員提供了多種強大方法來幫助其與 Elastic Stack 進行交互

3.2 kibana安裝與配置

kibana下載

https://elasticsearch.cn/download/

https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.7.1/

kibana安裝

rpm -ivh kibana-7.7.1-x86_64.rpm

kibana配置

vim /etc/kibana/kibana.yml

啓動kibana服務

systemctl enable --now kibana.service

訪問kibana

3.3 kibana使用

創建索引匹配

基於ES索引創建可視化

訪問量可視化

創建柱狀圖(訪問量排行榜)(客戶端ip爲x軸)

創建儀表盤(dashboard)

3.4 啓用xpack安全驗證

集羣模式需要先創建證書

cd /usr/share/elasticsearch/ 
./bin/elasticsearch-certutil ca 

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 

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
###
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
###

 ES集羣重啓正常後,設置用戶密碼

設置kibana連接ES的用戶密碼

vim /etc/kibana/kibana.yml

設置Logstash連接ES用戶密碼

vim /etc/logstash/conf.d/apache.conf 

logstash -f /etc/logstash/conf.d/apache.conf

head訪問

  • 添加參數到es配置 
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
  • 瀏覽器訪問http://192.168.1.101:9100/?auth_user=elastic&auth_password=redhat  

  • 利用ab壓力測試工具測試訪問
ab -c 2 -n 1000 http://192.168.1.14/
  • 查看

  • node3訪問

  • 刷新

 

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