實驗安裝環境
OS: CentOS 7.6x64 minimal
安裝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產品功能差異
0 Comments:
張貼留言