︿
Top

CentOS 7.6上安裝ELK 7.13.2 視覺化日誌分析工具


小時候聽過一句話叫做在這個「資訊爆炸的年代」,一語成讖,終於在二十年後兌現,現在人們有看不完的視頻和搜尋不完的資料,從關連式資料庫進階到大數據工程,仍然不夠!只要是資料都有價值,即便是軟體所遺留下來的那些不適合人類閱讀的日誌,也在ELK的問世後,得到了分析檢索的價值。

ELK是由ElasticSearch、Logstash和Kibana三兄弟所組成的,透過客戶端的beats服務定時定點轉送相關日誌給Logstash做初步的分類,接著再運送給ElasticSearch做索引分析,最後由Kibana這個視覺產生介面把管理員所需要的分析資料給美美的呈現出來。





實驗安裝環境


其他規格
OS: CentOS 7.6x64 minimal
本次實驗為求簡便,將firebeat Agent安裝在服務器上


安裝ELK所需套件

在每個角色中安裝相容於 Java 的 openJDK

[root@elk ~]# yum install java-1.8.0-openjdk -y
[root@elk ~]# java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)

YUM 列表中加入 elk Repo 源

[root@elk ~]# nano /etc/yum.repos.d/elk.repo

elk.repo 內容新增如下

[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

安裝 ELK 全家桶,當前版本是 7.13.2,應用程式共佔用 2GB 的磁碟空間也是蠻驚人的

[root@elk ~]# yum install logstash elasticsearch kibana -y

Dependencies Resolved

====================================================================
 Package             Arch         Version      Repository       Size
====================================================================
Installing:
 elasticsearch       x86_64        7.13.2-1    logstash-7.x     312 M
 kibana               x86_64        7.13.2-1    logstash-7.x     298 M
 logstash             x86_64        1:7.13.2-1  logstash-7.x     345 M

Transaction Summary
====================================================================
Install  3 Packages

Total download size: 955 M
Installed size: 1.9 G
Is this ok [y/d/N]:


ElasticSearch設定步驟

編輯 elasticsearch 設定檔

[root@elk ~]# nano /etc/elasticsearch/elasticsearch.yml

確認 elasticsearch 設定檔的參數,若其中被井字號註記須移除

path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
bootstrap.memory_lock:設定為true可讓elasticsearch JVM在運行時不使用swap交換以保證es的效率,參數說明可參閱 本篇文章

discovery.type:設定為single-node是由於本次實驗的es並無cluster的規劃


編輯 /etc/security/limits.conf 優化 Linux 系統核心參數「最大進程數」for root account

# End of file
*     soft     nofile     60000
*     hard     nofile     65535
*     soft     nproc      65535
*     hard     nproc      65535

編輯 /etc/security/limits.d/20-nproc.conf 優化 Linux 系統核心參數「最大進程數」for user account

*          soft    nproc     65535
root       soft    nproc     unlimited

編輯 /etc/elasticsearch/jvm.options 設定 es JVM 佔用的記憶體大小,官方建議是主機的一半

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1.5g
-Xmx1.5g

指令 sysctl -p 使上述設定生效、啟動 es 服務並設定為開機預設啟動

[root@elk ~]# sysctl -p
[root@elk ~]# systemctl start elasticsearch
[root@elk ~]# systemctl enable elasticsearch

測試 es 服務是否運作正常

[root@elk ~]# curl "http://localhost:9200/_cat/nodes"
192.168.88.84 18 97 0 0.09 0.14 0.10 cdfhilmrstw * elk

確認 es 的 JVM 是否正常運作中

[root@elk ~]# netstat -lntup|grep java
tcp6       0      0 :::9200          :::*            LISTEN      4442/java           
tcp6       0      0 :::9300          :::*            LISTEN      4442/java


Kibana設定步驟

編輯 kibana 設定檔案

[root@elk ~]# nano /etc/kibana/kibana.yml

確認 kibana 設定檔的參數,若其中被井字號註記須移除

server.port: 5601
server.host: "192.168.88.84"
server.name: "kibana"
elasticsearch.hosts: ["http://192.168.88.84:9200"]
elasticsearch.preserveHost: true
kibana.index: ".kibana"
i18n.locale: "en"

啟動 kibana 服務並設定為開機預設啟動

[root@elk ~]# systemctl start kibana
[root@elk ~]# systemctl enable kibana


LogStash設定步驟

於 /etc/logstash/pipelines.yml 確認 Logstash 的 Pipelines 狀況,目前只有單一條通道、識別 id 為 main ,有關任何資料流的 input、filter、output都放在 /etc/logstash/conf.d/*.conf 裡面

# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
#   https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html

- pipeline.id: main
  path.config: "/etc/logstash/conf.d/*.conf"
  pipeline.workers: 1

pipeline.workers:定義該通道佔用的cpu核心數


於 /etc/logstash/conf.d/ 目錄下建立新增設定檔 pipeline.conf,名稱可自訂,副檔名須為 .conf,本例情境為 beat 將 agent 端的 /var/log/secure 送至 logstash 拆分整理後再送至 ElasticSearch

input {
  beats {
    port => 5044
    client_inactivity_timeout => 600
  }
}

filter {
    grok {
        match => {
            "message" => ".* sshd\[\d+\]: (?<status>\S+) .* (?<ClientIP>(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})?) .*"
        }
        overwrite => ["message"]
    }
}

output {
    elasticsearch {
        hosts => ["192.168.88.84:9200"]
        index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    }
}

Input區塊:定義資料來源

Filter區塊:定義資料拆分規則,本篇filter語法參照 [Grok 正則過濾 Linux 系統日誌] ,Grok 分析語法教學可 [參閱此]

Output區塊:定義最終data將送往何處


編輯 /etc/logstash/jvm.options 設定 es JVM 佔用的記憶體大小

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g

啟動 logstash 服務並設定為開機預設啟動

[root@elk ~]# systemctl start logstash
[root@elk ~]# systemctl enable logstash


Firebeat設定步驟

於 Client 端安裝 filebeat 套件,本例安裝於locahost(而Production環境通常是內網中其他伺服器)

[root@elk ~]# yum install filebeat -y

備份原始 filebeat設定檔並新增一個自定義設定檔

[root@elk filebeat]# mv /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml-bak
[root@elk filebeat]# nano /etc/filebeat/filebeat.yml

設定檔內容如下,我們要將 secure 檔案後送至logstash做拆分整理

filebeat.inputs:
- input_type: log
  paths:
    - /var/log/secure
output.logstash:
  hosts: ["192.168.88.84:5044"]
  index: "localhost-secure-index"

檢查 yml 語法是否正確

[root@elk filebeat]# filebeat test config -c filebeat.yml

啟動 filebeat 服務並設定為開機預設啟動

[root@elk filebeat]# systemctl start filebeat
[root@elk filebeat]# systemctl enable filebeat


驗證並透過Kibana瀏覽圖形化結果

透過 es 提供的 api 確認是否有收到資料 [api]


前往 kibana 觀賞數據圖形化,這邊我選擇 Expore on my own


前往最下方 Stack Management


從這邊也可以看到資料已經被 logstash 後送到 es 了


到 Discover 去加入索引資料來做分析


加入 Filter 條件會成為右邊的顯示欄位,也能從上方圖表觀察到各個時間段的資料筆數,比如說圖表就告訴我們在 25 號的時候有八筆相關的資料,也能輕鬆的從下方表格欄位來區分每一筆日誌資料的關鍵字,比如説我只想查找特定 ClientIP 的日誌內容,再點進去 message 裡面看該筆日誌的詳細內容即可,光是這個部分就比直接看 raw data 舒服多了呢




寫在最後

至此只能說是完成了前半段的學習,剩下的部分在於 Logstash 的資料拆分整理(filter區塊)與後送到 ElasticSearch 之後、Kibana 對索引的取用與圖形的繪製,才能算是真正學會了 ELK 這套工具 。




本文內容參閱以下連結:
Logstash最佳實踐
Elastic Stack產品功能差異

tomy

來自台灣的系統工程師,一直熱衷於 Open source 相關技術的學習、建置、應用與分享。

  • Image
  • Image
  • Image
  • Image
  • Image

0 Comments:

張貼留言