目錄
一、ELK平臺介紹
1.ELK概述
2.Elasticsearch
3.Logstash
4.Kibana
二、部署ES群集
1.資源清單
2.基本配置
3.安裝Elasticsearch(elk1上、elk2上、elk3上)
4.安裝logstash(elk1上)
5.Filebeat
6.安裝Kibana(elk1上)
一、ELK平臺介紹
1.ELK概述
a.日志主要包括系統日志、應用程序日志和安全日志
b.日志被分散的存儲在不同的設備上
c.集中管理日志后,日志的統計和檢索利用grep、awk、wc實現
d.ELK的組成
Elasticsearch
Logstash
Kibana
2.Elasticsearch
a.概述
是一個基于Lucene的搜索服務器
它提供了一個分分布式多用戶能力的全文搜索引擎,基于RESTful web接口
- 能夠達到實時搜索、穩定、可靠、快速、安裝使用方便
b.核心概念
接近實時(NRT):意味著數據從被索引到可被搜索之間存在極短的延遲(通常1秒內)。這是由于 Lucene 的倒排索引機制和 Elasticsearch 的刷新(refresh)機制決定的,默認每1秒刷新一次,使新數據可見
集群(Cluster):是由一個或多個節點(Node)組成的集合,共同存儲數據并提供聯合索引和搜索能力。
節點(node):是集群中的一個獨立服務器,存儲數據并參與索引和搜索
索引(index):是類似數據庫中的“表”,用于存儲具有相似結構的文檔(Documents)
類型(type):用于邏輯劃分索引中的不同數據結構(類似數據庫的“表”)。
文檔(document):是 Elasticsearch 中的基本數據單元,以 JSON 格式存儲。
分片和復制(shards & replicas):
分片(Shards):索引可以被拆分為多個分片,提高并行處理能力。分片是獨立索引單元,可分布在不同節點上。
副本(Replicas):
每個分片可以有多個副本,提供高可用性(節點故障時數據不丟失)和負載均衡(查詢可并行執行)。默認情況下,ES 為每個索引創建1個主分片 + 1個副本(可在索引模板中調整)
3.Logstash
a.介紹
由JRsuby語言編寫,運行在Java虛擬機上,是一款強大的數據處理工具
可以實現數據傳輸、格式處理、格式化輸出
設計理念:數據輸入、數據加工、數據輸出
b.工作的三個階段
input數據輸入端,可以接收來自任何地方的源數據
Filter數據中轉層,主要進行格式處理,數據類型轉換,數據過濾,字段添加、修改等
Output是logstash工作的最后一個階段,負責將書籍輸出到指定位置,兼容大多數應用
4.Kibana
a.介紹
是一個設計使用和Elasticsearch配置工作的開源分析和可視化平臺
可以用它進行搜索、查看、集成Elasticserach中的數據索引
可以利用各種圖標、報表、地圖組件輕松的對數據進行可視化分析
b.主要功能
Elasticsearch無縫集成:支持直接查詢、過濾和聚合 ES 索引中的數據
整合數據:支持從多個 Elasticsearch 索引、Logstash 管道或 Beats 采集的數據進行統一分析。
復雜數據分析:支持 聚合(Aggregations) 操作,如 terms(分組統計)、date_histogram(時間序列分析)、avg(平均值計算)等
讓更多的團隊成員收益:提供 Dashboard(儀表盤) 功能,可將多個可視化圖表組合,并支持共享鏈接或嵌入到其他系統(如 Confluence、Web 應用
接口靈活:提供 REST API,允許開發者以編程方式管理 Kibana 對象
配置簡單:通過 Management 模塊可輕松管理索引模式、用戶權限、警報規則等
可視化多數據源:支持多種圖表類型(柱狀圖、折線圖、餅圖、熱力圖等),并可結合 Maps 插件展示地理數據。
簡單數據導出:支持將查詢結果或圖表導出為 CSV、PDF、PNG 格式,方便分享或進一步分析。
二、部署ES群集
1.資源清單
操作系統 | IP地址 | 主機名 | 軟件包 |
OpenEuler 24.03 | 192.168.16.142 | elk1 | Elasticsearch、logstash、kibana |
OpenEuler 24.03 | 192.168.16.143 | elk2 | Elasticsearch、filebeat、httpd |
OpenEuler 24.03 | 192.168.16.144 | elk3 | Elasticsearch、 |
2.基本配置
a.設置主機名
hostnamectl set-hostname elk1
hostnamectl set-hostname elk2
hostnamectl set-hostname elk3
b.在ES主機上設置Host文件(elk1上、elk2上、elk3上)
vi /etc/hosts
192.168.16.142 elk1
192.168.16.143 elk2
192.168.16.144 elk3
c.創建es運行用戶(elk1上、elk2上、elk3上)
useradd es
d.安裝java環境(elk1上、elk2上、elk3上)
dnf -y install java-11 tar
java -version
e.設置訪問限制(elk1上、elk2上、elk3上)
vi /etc/security/limits.confes soft nofile 65535
es hard nofile 65535
es soft nproc 65535
es hard nproc 65535
es soft memlock unlimited
es hard memlock unlimitedvi /etc/sysctl.conf
vm.max_map_count=655360sysctl -p
3.安裝Elasticsearch(elk1上、elk2上、elk3上)
a.安裝Elasticsearch
tar zxf elasticsearch-7.10.0-linux-x86_64.tar.gz
mv elasticsearch-7.10.0 /usr/local/elasticsearch
vi /usr/local/elasticsearch/config/jvm.options-Xmx2g #22
-Xmx2g
b.更改Elasticsearch主配置文件
#第一臺更改
vi /usr/local/elasticsearch/config/elasticsearch.ymlcluster.name: kgc-elk-cluster #17行,群集名稱
node.name: elk1 #23行,本節點主機名
path.data: /elk/data #33行,數據文件路徑
path.logs: /elk/logs #37行,日志文件路徑
bootstrap.memory_lock: false #43行,鎖定物理內存
network.host: 0.0.0.0 #55行,監聽地址
http.port: 9200 #59行,監聽端口
discovery.seed_hosts: ["elk1", "elk2","elk3"] #68行,群集中的主機列表
cluster.initial_master_nodes: ["elk1"] #72行,master主機名稱#推送配置文件到第二臺
scp /usr/local/elasticsearch/config/elasticsearch.yml elk2:/usr/local/elasticsearch/config/elasticsearch.yml#推送配置文件到第三臺
scp /usr/local/elasticsearch/config/elasticsearch.yml elk3:/usr/local/elasticsearch/config/elasticsearch.yml#第二臺更改
vi /usr/local/elasticsearch/config/elasticsearch.yml
node.name: elk2 #23行,本節點主機名#第三臺更改
vi /usr/local/elasticsearch/config/elasticsearch.yml
node.name: elk3 #23行,本節點主機名
c.創建數據存放路徑并授權
mkdir -p /elk/data
mkdir -p /elk/logs
chown -R es:es /elk/
chown -R es:es /usr/local/elasticsearch
d.啟動es
su - esnohup /usr/local/elasticsearch/bin/elasticsearch &
exit
e.查看節點信息
ss -nlpt | grep 9200
LISTEN 0 4096 *:9200 *:* users:(("java",pid=3136,fd=253))
4.安裝logstash(elk1上)
a.在logstash服務器上安裝logstash
#安裝
tar zxf logstash-7.10.0-linux-x86_64.tar.gz
mv logstash-7.10.0 /usr/local/logstash
chmod -R 777 /usr/local/logstash/data#添加服務
vi /usr/local/logstash/system.confinput {
file{
path =>"/var/log/messages"
type =>"system"
start_position =>"beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.16.142:9200"]
index =>"system-%{+YYYY.MM.dd}"
}
}#添加讀權限
chmod +r /var/log/messages
b.測試安裝結果
#采集日志(啟動)
/usr/local/logstash/bin/logstash -f /usr/local/logstash/system.conf
#訪問驗證(elk3上)
curl -XGET "http://localhost:9200/_cat/indices"
#green open system-2025.05.20 xnX0OgCxTmGZ6Msy5A1aXA 1 1 14184 0 5.8mb 2.8mb
5.Filebeat
a.在產生日志的客戶端上安裝Filebeat(elk2上)
dnf install -y httpd
systemctl start httpd
b.安裝filebeat(elk2上)
tar zxf filebeat-7.10.0-linux-x86_64.tar.gz
mv filebeat-7.10.0-linux-x86_64 /usr/local/filebeat
c.配置web01服務器filebeat的輸出(elk2上)
vi /usr/local/filebeat/filebeat.ymlfilebeat.inputs:
- type: logpaths:- /var/log/httpd/access_logoutput.logstash:hosts: ["192.168.16.142:5044"]
d.修改logstash的配置文件(elk1上)
vi /usr/local/logstash/config/beats.confinput {beats {port => "5044"codec => "json"}
}
seccomp:enabled: false
output{elasticsearch {hosts => ["192.168.16.142:9200"]index => "weblog-beat-%{+YYYY.MM.dd}"}
}
e.運行logstash并驗證(elk1上)
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/beats.conf --path.data=/usr/local/logstash/config.d/web01 &> /tmp/logstash.log &
f.啟動(elk2上)
/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml
6.安裝Kibana(elk1上)
a.在elk1上安裝Kibana
tar zxf kibana-7.10.0-linux-x86_64.tar.gz
mv kibana-7.10.0-linux-x86_64 /usr/local/kibana
b.修改Kibana主配置文件
vi /usr/local/kibana/config/kibana.ymlserver.port: 5601 #2行
server.host: "0.0.0.0" #7行
elasticsearch.hosts: ["http://192.168.16.142:9200"] #28行
kibana.index: ".kibana" #32行chown -R es:es /usr/local/kibana
c.啟動Kibana服務
su - es
nohup /usr/local/kibana/bin/kibana &nohup /usr/local/kibana/bin/kibana &
d.驗證Kibana
http://192.168.16.142:5601/
?e.將elk1主機的系統日志添加到kinnba