企業級應用技術-ELK日志分析系統

目錄

#1.1ELK平臺介紹

? 1.1.1ELK概述

? 1.1.2Elasticsearch

? 1.1.3Logstash

? 1.1.4Kibana

#2.1部署ES群集

? ?2.1.1基本配置

? ?2.1.2安裝Elasticsearch

? ?2.1.3安裝Logstash

? ?2.1.4Filebeat

? ?2.1.5安裝Kibana


1.1ELK平臺介紹

1.1.1ELK概述

? ?ELK 是三個開源工具的縮寫,分別是ElasticsearchLogstashKibana,三者組合形成了一套完整的日志收集、存儲、分析與可視化解決方案,廣泛應用于日志管理、數據分析、監控告警等場景。

1.1.2Elasticsearch

?(1)Elasticsearch概述

? ? ? ? ?Elasticsearch(簡稱 ES)是一款基于 Lucene 構建的分布式、高擴展、實時的全文搜索引擎和數據分析引擎,主要用于海量數據的存儲、檢索、聚合與分析,廣泛應用于日志分析、全文檢索、實時監控等場景。

(2)Elasticsearch核心概念

1.?索引(Index)

  • 定義:類似關系型數據庫中的 “數據庫” 或 “表”,是一組具有相似結構的文檔集合(例如 “用戶日志索引”“商品信息索引”)。

  • 特點

    • 索引名稱需小寫,且不能包含特殊字符;

    • 每個索引對應多個分片(分布式存儲的基礎);

    • 可通過 “索引模板” 預先定義字段映射規則(如字段類型、分詞器等)。

2.?文檔(Document)

  • 定義:索引中的單條數據,是 ES 的最小數據單元,以JSON 格式表示(類似數據庫中的 “行”)。

  • 特點

    • 每個文檔有唯一的_id(可手動指定或自動生成),用于標識文檔;

    • 文檔字段支持動態映射(無需預先定義結構,ES 會自動推斷字段類型,如字符串、數字等)。

3.?類型(Type)

  • 定義:早期版本中用于區分索引內不同結構的文檔(類似數據庫中 “表” 里的 “子表”),但在 ES 7.x 后被移除

  • 原因:類型的存在會導致同一索引內不同類型文檔的字段映射沖突,不符合分布式存儲的設計邏輯,目前推薦一個索引只存儲一種類型的文檔。

4.?映射(Mapping)

  • 定義:類似數據庫中的 “表結構”,用于定義文檔中字段的類型(如textkeyworddate)、分詞器、是否索引等元數據。

  • 分類

    • 動態映射:ES 自動推斷字段類型(如輸入數字則映射為long);

    • 靜態映射:手動定義字段規則(更精準,避免自動映射出錯,如將 “手機號” 指定為keyword類型以支持精確匹配)。

5.?分片(Shard)

  • 定義:索引的細分存儲單元,一個索引會被拆分為多個分片(默認 5 個),分布式存儲在不同節點上。

  • 作用

    • 實現水平擴展:通過增加分片(或節點)提升存儲容量和查詢并發能力;

    • 并行處理:查詢時多個分片同時工作,提高檢索效率。

  • 類型

    • 主分片(Primary Shard):數據的原始存儲位置,不可修改數量(創建索引后固定);

    • 副本分片(Replica Shard):主分片的備份,用于故障恢復和分擔查詢壓力,數量可動態調整。

6.?節點(Node)

  • 定義:運行 ES 實例的服務器,一個集群由多個節點組成,節點通過集群名稱(默認elasticsearch)加入集群。

  • 角色分類

    • 主節點(Master Node):管理集群元數據(如索引創建、分片分配),不處理數據請求,建議單獨部署以保證穩定性;

    • 數據節點(Data Node):存儲數據(分片),負責數據的 CRUD(增刪改查)和聚合分析,消耗 CPU、內存和磁盤資源;

    • 協調節點(Coordinating Node):接收客戶端請求,分發任務到其他節點,匯總結果后返回(所有節點默認具備此功能);

    • ingest 節點:預處理數據(如日志清洗),類似 Logstash 的輕量版功能。

7.?集群(Cluster)

  • 定義:由多個節點組成的集合,共同管理全量數據,提供分布式服務。

  • 特點

    • 集群有唯一名稱(默認elasticsearch),節點通過名稱加入集群;

    • 集群會自動選舉主節點,保證高可用;

    • 數據通過分片分布式存儲,副本機制確保數據不丟失(如主分片故障,副本分片會升級為主分片)。

1.1.3Logstash

(1)Logstash介紹

? ? ??Logstash 是 Elastic Stack(ELK Stack)中的數據收集與處理引擎,主要用于對分散的、多源的日志或數據進行采集、轉換、過濾,再輸出到目標存儲(如 Elasticsearch、數據庫、文件等),是數據鏈路中的 “管道” 角色。

(2)Logstash工作的三個階段

1.?輸入階段(Input)

  • 作用:從外部數據源收集數據,是 Logstash 的數據入口。

  • 支持的數據源:通過輸入插件(Input Plugins)實現,覆蓋多種場景:

    • 文件(如file插件讀取服務器日志文件);

    • 網絡流(如tcp/udp插件接收實時數據、kafka插件消費消息隊列);

    • 數據庫(如jdbc插件定時同步數據庫數據);

    • 云服務、API 接口等。

  • 特點:可同時配置多個輸入源,實現多渠道數據的集中采集。

2.?過濾階段(Filter)

  • 作用:對輸入的數據進行清洗、轉換、 enrichment(補充信息),是數據處理的核心環節。

  • 常見操作:通過過濾插件(Filter Plugins)實現:

    • 解析格式(如json插件解析 JSON 字符串為結構化字段);

    • 字段處理(如mutate插件添加 / 刪除 / 重命名字段、修改字段類型);

    • 過濾篩選(如grok插件從非結構化日志中提取關鍵信息,drop插件丟棄無效數據);

    • 補充信息(如geoip插件通過 IP 地址獲取地理位置信息)。

  • 特點:可選階段(若無需處理,數據可直接從輸入流向輸出),但通常是提升數據質量的關鍵。

3.?輸出階段(Output)

  • 作用:將處理后的結構化數據發送到目標存儲或系統,是 Logstash 的數據出口。

  • 支持的目標:通過輸出插件(Output Plugins)實現:

    • Elasticsearch(最常用,用于后續檢索分析);

    • 存儲系統(如file插件寫入文件、s3插件上傳至云存儲);

    • 消息隊列(如kafka插件轉發數據);

    • 數據庫(如jdbc插件寫入 MySQL)等。

  • 特點:可配置多個輸出目標,實現 “一次處理,多端分發”。

總結

三個階段通過 “輸入→過濾→輸出” 的流水線模式,實現了從原始數據到高質量結構化數據的轉化。例如:

? ?1.輸入階段:file插件讀取服務器的 Nginx 日志文件;

? ?2.過濾階段:grok插件提取日志中的 IP、URL、響應時間等字段,? ? ????geoip插件補充 IP 對應的地區;

? ?3.輸出階段:將處理后的結構化日志發送到 Elasticsearch,供后續? ? ? ? ? 可視化分析。

? ? 這種架構讓 Logstash 能夠靈活適配各種數據場景,成為數據鏈路中 “預處理中樞” 的核心工具。

1.1.4Kibana

(1)Kibana介紹

? ? ?Kibana 是 Elastic Stack(ELK Stack)中用于數據可視化與交互分析的開源平臺,與 Elasticsearch 無縫集成,主要功能是將存儲在 Elasticsearch 中的數據通過直觀的圖表、儀表盤等形式展示,幫助用戶快速挖掘數據價值、監控業務狀態或排查問題。

(2)Kibana主要功能

? ? 1.數據檢索與探索:通過 Elasticsearch 查詢語法快速檢索數據,實時瀏覽、篩選、導出數據,支持全文檢索、字段過濾等操作,方便臨時分析或故障排查。

? ? 2.可視化與儀表盤:提供豐富圖表(柱狀圖、折線圖、地圖等),可將數據轉化為直觀可視化效果;支持組合多圖表為自定義儀表盤,集中展示核心指標(如系統性能、業務數據)。

? ? 3.監控與告警:對關鍵指標(如錯誤率、響應時間)設置告警規則,觸發閾值時通過郵件、Slack 等渠道通知,實現實時業務或系統監控。

? ?4.數據管理:管理 Elasticsearch 索引模式、字段映射等元數據,支持導入導出可視化成果,便于團隊協作。

? ? 5.進階分析:集成機器學習功能檢測異常數據,聯動 APM 工具分析應用性能,深度挖掘數據價值。

2.1部署ES群集

主機名ip 地址操作系統軟件包
elk1192.168.10.101Openeuler24Elasticsearch、logstash、kibana
elk2192.168.10.102Openeuler24Elasticsearch、filebeat、httpd
elk3192.168.10.103Openeuler24Elasticsearch

?2.1.1基本配置

? 在兩臺ES主機上設置hosts文件

192.168.10.101? ? ? ? elk1?

192.168.10.102? ? ? ? elk2

192.168.10.103 ???????elk3

?關閉所有節點的防火墻

systemctl stop firewalld

setenforce 0?

?創建es運行用戶

[root@elk1 ~]#useradd es

?安裝java環境

[root@elkl ~]# dnf -y install java-11
[root@elkl ~]# java -version
openjdk version "11.0.9.1" 2020-11-04 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9.1+1-LTS, mixed mode, sharing)

?為用戶設置資源訪問限制

[root@elkl ~]#  vim /etc/security/limits.conf
es soft nofile 65535
es hard nofile 65535
es soft nproc 65535
es hard nproc 65535
es soft memlock unlimited
es hard memlock unlimited
[root@elkl ~]#vim /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
[root@elkl ~]#sysctl -p

2.1.2 安裝Elasticsearch

[root@elkl ~]#tar zxvf elasticsearch-7.10.0-linux-x86_64.tar.gz
[root@elkl ~]# mv elasticsearch-7.10.0 /usr/local/elasticsearch
[root@elkl ~]# vim /etc/elasticsearch/config/jvm.options
-Xms2g
-Xmx2g

?更改Elasticsearch主配置文件

[root@elkl ~]# vim /usr/local/elasticsearch/config/elasticsearch.yml
cluster.name: kgc-elk-cluster  ##17 行,群集名稱
node.name: elk1  ##23 行,本節點主機名,以 elk1 節點為例,其它節點請改成相對應的節點名稱
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 主機名稱,群集的初始化會將此節點選舉為 master

?創建數據存放路徑并授權

[root@elkl ~]# mkdir -p/elk/data
[root@elkl ~]#mkdir -p /elk/logs
[root@elkl ~]#chown -R es:es /elk/
[root@elkl ~]#chown -R es:es /usr/local/elasticsearch/

?啟動es

[root@elkl ~]#su - es  #es 限制使用 root 啟動,需要切換至 es
[es@elkl ~]$ nohup /usr/local/elasticsearch/bin/elasticsearch &[es@elkl ~]$ sudo netstat -anpt | grep 9200
tcp6        0      0 :::9200                 :::*                    LISTEN 

?查看節點信息

[root@localhost ~]# curl http://192.168.10.103:9200/_cat/nodes
192.168.10.101 12 65 0 0.03 0.01 0.00 cdhilmrstw * elk1
192.168.10.102 22 97 0 0.12 0.05 0.01 cdhilmrstw - elk2
192.168.10.103 20 91 0 0.01 0.02 0.00 cdhilmrstw - elk3

2.1.3 安裝logstash

在logstash服務器上安裝logstas

[root@losstash ~]# systemctl stop firewalld
[root@losstash ~]# setenforce 0[root@losstash ~]# yum -y install java-11
[root@losstash ~]# tar zxvf logstash-7.10.0-linux-x86_64.tar.gz
[root@losstash ~]# mv logstash-7.10.0 /usr/local/logstash
[root@losstash ~]# chmod -R 777 /usr/local/logstash/data/

?測試安裝結果

[root@losstash ~]# /usr/local/logstash/bin/logstash -e 'input { stdin {} } output { stdout {codec => rubydebug} }'
nihao
{"@timestamp" => 2020-03-14T03:20:24.229Z,"@version" => "1","host" => "elk1","message" => "nihao "
}
[root@losstash ~]# /usr/local/logstash/bin/logstash -e 'input { stdin {} } output { stdout {codec => rubydebug} } output { elasticsearch { hosts => ["192.168.10.103:9200"] } }'
[root@nodel src]# chmod o+r /var/log/messages //讓 Logstash 可以讀取日志
[root@nodel src]# ll /var/log/messages
-rw----r--. 1 root root 2730043 Sep 11 14:21 /var/log/messages
[root@nodel src]# touch /usr/local/logstash/system.conf
[root@nodel src]# vim /usr/local/logstash/system.conf
input {file{path =>"/var/log/messages"type =>"system"start_position =>"beginning"}
}
output {elasticsearch {     192.168.10.103hosts => ["192.168.10.101:9200"]index =>"system-%{+YYYY.MM.dd}"}
}

運行logstash

[root@elk1 ~]# /usr/local/logstash/bin/logstash -f /usr/local/logstash/system.conf

?2.1.4Filebeat

在產生日志的客戶端服務器上安裝filebeat(本案例為elk2主機)

[root@elk2 ~]# yum -y install httpd
[root@elk2 ~]# systemctl start httpd
[root@elk2 ~]# echo 'www.kgc.com' > /var/www/html/index.html
[root@elk2 ~]# curl 192.168.10.102
www.kgc.com
[root@elk2 ~]# cat /var/log/httpd/access_log
192.168.10.102 - - [28/Apr/2025:20:31:02 +0800] "GET / HTTP/1.1" 20012 "-" "curl/8.4.0"
[root@elk2 ~]# cat /var/log/httpd/error_log

安裝filebeat

[root@elk2 ~]# tar zxvf filebeat-7.10.0-linux-x86_64.tar.gz
[root@elk2 ~]# mv filebeat-7.10.0-linux-x86_64 /usr/local/filebeat

?配置web01服務器filebeat的輸出

[root@elk2 ~]# cd /usr/local/filebeat/
[root@elk2 filebeat]# mv filebeat.yml filebeat.yml.bak
[root@elk2 filebeat]# vim filebeat.ymlfilebeat.inputs:
- type: logpaths:- /var/log/httpd/access_log:set paste
output.logstash:hosts: ["192.168.10.102:5044"](2)啟動 filebeat 服務
[root@elk2 ~]# /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml &

修改logstash的配置文件,使日志輸出到elasticsearch?

[root@elkl ~]# vim /usr/local/logstash/config/beats.confinput {beats {port => "5044"codec => "json"}
}output{elasticsearch {hosts => ["192.168.10.103:9200"]index => "weblog-beat-%{+YYYY.MM.dd}"}
}

?運行logstash

[root@elk1 ~]#/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/beats.conf --path.data=/usr/local/logstash/config.d/web01 &

?2.1.5安裝Kibana

在elk上安裝Kibana

[root@elk1 ~]# tar zxvf kibana-7.10.0-linux-x86_64.tar.gz
[root@elk1 ~]# mv kibana-7.10.0-linux-x86_64 /usr/local/kibana

?修改Kibana主配置文件

[root@elkl opt]$ vim /usr/local/kibana/config/kibana.yml
server.port: 5601  ##2 行,監聽端口
server.host: "0.0.0.0"  ##7 行,監聽地址
elasticsearch.hosts: "http://192.168.10.103:9200"  ##28 行,ES 主機的 IP 地址
kibana.index: ".kibana"  ##32 行
[root@elkl ~]# chown -R es:es /usr/local/kibana/

?啟動Kibana服務

[root@localhost ~]# su - es[es@elk1 ~]$ nohup /usr/local/kibana/bin/kibana &

? 驗證Kibana

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912661.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Shiro漏洞復現

Shiro簡介 Apache Shiro是一種功能強大且易于使用的Java安全框架,它執行身份驗證、授權、 加密和會話管理,可用于保護任何應用程序的安全。 Shiro提供了應用程序安全性API來執行以下方面: 1.身份驗證:證明用戶身份,通…

VSCode 中使用 Google Test(GTest)框架測試

VSCode 中使用 Google Test(GTest)框架在 VSCode 中對 C 代碼進行測試的示例: 一、Unbutu x86使用gtest 環境配置 安裝 GTest :在 Ubuntu 系統中,可以通過命令sudo apt-get install libgtest-dev安裝 GTest 庫。對于…

【1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫】

1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫 🎯 學習目標 掌握數據庫表結構設計原則理解字段類型選擇與優化學會雪花算法ID生成策略掌握索引設計與優化技巧了解分庫分表設計方案 📖 故事開始 小明: “老王,我總是不知道怎么設計數…

OSPF虛擬鏈路術語一覽:快速掌握網絡路由

大家好,這里是G-LAB IT實驗室。今天帶大家了解一下OSPF的相關知識! 01 OSPF虛擬鏈路術語大全 網絡架構中,OSPF(開放式最短路徑優先)是一種重要的路由協議。通過其鏈路狀態路由機制,OSPF能夠有效維護和更新…

oracle常用的函數(一) 之 to_char、to_date

文章目錄 前言to_char基本語法格式模型格式模型介紹無FM示例使用FM輸出貨幣負數輸出尖括號 將日期格式化將數字格式化為帶有貨幣符號和千位分隔符的格式總結 to_date語法語法示例 戳這里,第二彈 → oracle常用的函數(二) 之 nvl、decode、l…

數據庫服務器宕機的處理方法與實戰策略

在當今數字化時代,數據庫作為企業數據存儲與管理的核心,承載著業務運行的關鍵信息。一旦數據庫服務器宕機,將導致業務中斷、數據丟失等嚴重后果,甚至可能給企業帶來巨大的經濟損失和聲譽損害。因此,掌握一套系統、科學的數據庫服務器宕機處理方法尤為重要。本文將從應急響…

如何hack邊緣的kubelet修改Cgroup數值

之前做了一個VPA項目的需求,就是需要不重啟的方式修改容器的Cgroup的值已達到垂直擴縮容的目的,項目中核心的思路如下 上游下發要VPA的結果的值寫入到容器的Annotation里面Kubelet 感知到這個 annoation 的變化我們本地運行一個 Agent,里面運…

熟悉 PyCharm

界面 我們常用的就這個幾個地方: 常用配置 調整字體大小 Ctrl 滾輪調整字體大小 插件推薦 Indent Rainbow 該插件的作用在于能夠對于不同層級縮進的空格標注不同的顏色: 快捷鍵 快捷鍵的 pdf 下載鏈接: Windows 版:https:…

pytorch--模型訓練的一般流程

文章目錄 前言0、數據集準備1、數據集2、dataset3、model4、訓練模型 前言 在pytorch中模型訓練一般分為以下幾個步驟: 0、數據集準備 1、數據集讀取(dataset模塊) 2、數據集轉換為tensor(dataloader模塊) 3、定義模型…

智能合同管理實戰:基于區塊鏈的電子簽約技術實現

在數字經濟時代,傳統紙質合同簽署方式已難以滿足企業高效、安全、合規的業務需求。智能合同管理(Smart Contract Management)結合區塊鏈技術,正在重塑電子簽約流程,實現合同全生命周期的自動化、可追溯和防篡改。本文將深入探討基于區塊鏈的電子簽約技術實現,涵蓋核心架構…

設計模式精講 Day 22:模板方法模式(Template Method Pattern)

【設計模式精講 Day 22】模板方法模式(Template Method Pattern) 文章標簽 設計模式, 模板方法模式, Java開發, 面向對象設計, 軟件架構, 設計模式實戰, Java應用開發 文章簡述 模板方法模式是一種行為型設計模式,它通過定義一個算法的骨架…

如何在pytorch中使用tqdm:優雅實現訓練進度監控

文章目錄 為什么需要進度條?tqdm 簡介基礎用法示例深度學習中的實戰應用1. 數據加載進度監控2. 訓練循環增強版3. 驗證階段集成 高級技巧與最佳實踐1. 自定義進度條樣式2. 嵌套進度條(多任務)3. 分布式訓練支持4. 與日志系統集成 性能優化建議…

Linux中的xxd命令詳解

xxd 是一個 十六進制轉儲(hex dump)工具,通常用于將二進制文件轉換為十六進制格式,或者反向轉換(十六進制→二進制)。它是 vim 的一部分,但在大多數 Linux 系統(如 Ubuntu&#xff0…

磐維數據庫panweidb3.1.0單節點多實例安裝

0 說明 業務科室提單需要在某臺主機上部署多個單機磐維數據庫,用于業務測試。以下內容展示如何在單節點安裝多個磐維數據庫實例。 1 部署環境準備 1.1 IP 地址及端口 instipport實例1192.168.131.1717700實例2192.168.131.1727700 在131.17上分別安裝兩個實例&…

轉錄組分析流程(三):功能富集分析

我們的教程主要是以一個具體的例子作為線索,通過對公共數據庫數據bulk-RNA-seq的挖掘,利用生物信息學分析來探索目標基因集作為某種疾病數據預后基因的潛能及其潛在分子機制,同時在單細胞水平分析(對scRNA-seq進行挖掘)預后基因的表達,了解細胞之間的通訊網絡,以期為該疾病…

全面掌握 tkinter:Python GUI 編程的入門與實戰指南

在自動化、工具開發、數據可視化等領域,圖形用戶界面(GUI)往往是提升用戶體驗的重要方式。作為 Python 官方內置的 GUI 庫,tkinter 以其輕量、跨平臺、易于學習的特性成為初學者和輕量級應用開發者首選。 本文將以深入淺出的方式…

TDH社區開發版安裝教程

(注:本文章來源于星環官網安裝手冊) 后面放置了視頻和安裝手冊連接 1、硬件及環境要求 Docker17及以上版本,支持Centos,Ubuntu等系統(注:這里我使用CentOS-7版本,最佳版本推薦為7.…

Linux基本命令篇 —— grep命令

grep是Linux/Unix系統中一個非常強大的文本搜索工具,它的名字來源于"Global Regular Expression Print"(全局正則表達式打印)。grep命令用于在文件中搜索包含特定模式的行,并將匹配的行打印出來。 目錄 一、基本語法 二…

蒼穹外賣問題系列之 蒼穹外賣訂單詳情前端界面和網課給的不一樣

問題 如圖,我的前端界面和網課里面給的不一樣,沒有“申請退款”和一些其他的該有的東西。 原因分析 “合計”這一欄顯示undefined說明我們的總金額沒有輸入進去。可以看看訂單提交那塊的代碼,是否可以正確輸出。還有就是訂單詳細界面展示這…

CppCon 2018 學習:EMULATING THE NINTENDO 3DS

我們來逐個分析一下這個 組件交互模型 和 仿真 & 序列化 的關系,特別是主線程(Main Thread)與其他系統組件之間的交互。 1. Main Thread — simple (basically memcpy) --> GPU Main Thread(主線程)負責游戲的…