日志管理工具 ——ELK Stack

一、ELK Stack 概述

1.1 核心組件

ELK Stack(現更名為 Elastic Stack)是一套開源的日志收集、存儲、分析和可視化平臺,由三個核心組件構成:

  • Elasticsearch:分布式搜索引擎,負責日志數據的存儲、索引和快速查詢
  • Logstash:日志數據收集和處理管道,支持多種數據源和數據轉換
  • Kibana:日志數據可視化平臺,提供豐富的圖表和儀表盤

隨著發展,ELK Stack 逐漸擴展為包含 Beats 的 Elastic Stack,形成更完整的日志管理生態:

1.2 核心特性

  • 分布式架構:可水平擴展以處理海量日志數據
  • 實時處理:支持日志數據的實時收集、存儲和分析
  • 全文檢索:強大的搜索功能,支持復雜查詢和過濾
  • 靈活的可視化:通過 Kibana 創建自定義儀表盤和報表
  • 豐富的集成:支持與多種系統和工具集成(如 Docker、Kubernetes、AWS 等)
  • 可擴展性:通過插件擴展功能,滿足特定需求

1.3 應用場景

ELK Stack 適用于多種日志管理場景:

  • 應用程序日志集中管理和分析
  • 系統和基礎設施監控
  • 安全事件日志分析與審計
  • 用戶行為追蹤與分析
  • 業務數據可視化與報表
  • 故障排查與問題定位

二、ELK Stack 安裝與部署

2.1 環境準備

2.1.1 系統要求

組件

最低配置

推薦配置

Elasticsearch

2CPU、4GB 內存

4CPU、16GB 內存

Logstash

2CPU、4GB 內存

4CPU、8GB 內存

Kibana

1CPU、2GB 內存

2CPU、4GB 內存

Beats

1CPU、1GB 內存

2CPU、2GB 內存

2.1.2 操作系統支持
  • Linux(推薦 CentOS 7/8、Ubuntu 18.04/20.04、Debian 10)
  • Windows Server(有限支持)
  • macOS(開發環境)
2.1.3 依賴項
  • Java 8 或 11(Elasticsearch 和 Logstash 需要)
  • 網絡:各組件間需開放相應端口(9200、9300、5044、5601 等)

2.2 Elasticsearch 安裝

2.2.1 安裝 Java
# CentOS安裝Java 11
yum install -y java-11-openjdk-devel# Ubuntu安裝Java 11
apt update
apt install -y openjdk-11-jdk# 驗證Java安裝
java -version
2.2.2 安裝 Elasticsearch
# 導入Elasticsearch GPG密鑰
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  # CentOS
# 或
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -  # Ubuntu# 添加Elasticsearch倉庫
# CentOS
cat > /etc/yum.repos.d/elasticsearch.repo << EOF
[elasticsearch-7.x]
name=Elasticsearch 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
EOF# Ubuntu
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic.list
apt update# 安裝Elasticsearch
yum install -y elasticsearch  # CentOS
# 或
apt install -y elasticsearch  # Ubuntu
2.2.3 配置 Elasticsearch
# 編輯配置文件
vim /etc/elasticsearch/elasticsearch.yml# 核心配置
cluster.name: elk-cluster  # 集群名稱
node.name: es-node-1       # 節點名稱
path.data: /var/lib/elasticsearch  # 數據存儲路徑
path.logs: /var/log/elasticsearch  # 日志路徑
network.host: 0.0.0.0      # 監聽地址,0.0.0.0表示所有地址
http.port: 9200            # HTTP端口
discovery.seed_hosts: ["127.0.0.1"]  # 種子節點
cluster.initial_master_nodes: ["es-node-1"]  # 初始主節點# 可選性能配置
bootstrap.memory_lock: true  # 鎖定內存,防止swap

配置系統參數:

# 配置內存鎖定
vim /etc/elasticsearch/jvm.options
# 設置JVM堆大小(建議為物理內存的50%,不超過31GB)
-Xms4g
-Xmx4g# 配置系統限制
vim /etc/security/limits.conf
# 添加
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch - nofile 65536
elasticsearch - nproc 4096# 配置系統內核參數
vim /etc/sysctl.conf
# 添加
vm.max_map_count=262144# 應用配置
sysctl -p
2.2.4 啟動并驗證 Elasticsearch
# 啟動服務
systemctl start elasticsearch
systemctl enable elasticsearch# 檢查服務狀態
systemctl status elasticsearch# 驗證服務
curl -X GET "http://localhost:9200/"# 預期輸出
{"name" : "es-node-1","cluster_name" : "elk-cluster","cluster_uuid" : "xxxxxxxxxxxxxxxxxxxx","version" : {"number" : "7.14.0","build_flavor" : "default","build_type" : "rpm","build_hash" : "dd5a0a2acaa2045e41b5de95cb3e88ec9e074d","build_date" : "2021-07-29T20:49:32.864135063Z","build_snapshot" : false,"lucene_version" : "8.9.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}

2.3 Kibana 安裝與配置

2.3.1 安裝 Kibana
# CentOS安裝
yum install -y kibana# Ubuntu安裝
apt install -y kibana
2.3.2 配置 Kibana
# 編輯配置文件
vim /etc/kibana/kibana.yml# 核心配置
server.port: 5601                # 端口
server.host: "0.0.0.0"           # 監聽地址
elasticsearch.hosts: ["http://localhost:9200"]  # Elasticsearch地址
kibana.index: ".kibana"          # Kibana索引名稱
2.3.3 啟動并驗證 Kibana
# 啟動服務
systemctl start kibana
systemctl enable kibana# 檢查服務狀態
systemctl status kibana# 開放防火墻端口(如需要)
firewall-cmd --permanent --add-port=5601/tcp
firewall-cmd --reload

通過瀏覽器訪問 http://<kibana-host>:5601 驗證 Kibana 是否正常運行。

2.4 Logstash 安裝與配置

2.4.1 安裝 Logstash
# CentOS安裝
yum install -y logstash# Ubuntu安裝
apt install -y logstash
2.4.2 基本配置

創建一個簡單的 Logstash 配置文件,從標準輸入讀取數據并輸出到 Elasticsearch:

# 創建配置文件
vim /etc/logstash/conf.d/stdin_to_es.conf# 配置內容
input {stdin {codec => "json"}
}filter {# 可以添加過濾規則
}output {elasticsearch {hosts => ["http://localhost:9200"]index => "logstash-stdin-%{+YYYY.MM.dd}"}stdout { codec => rubydebug }  # 同時輸出到控制臺
}
2.4.3 啟動并驗證 Logstash
# 測試配置文件
/usr/share/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/stdin_to_es.conf# 啟動Logstash(測試模式)
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/stdin_to_es.conf# 作為服務啟動
systemctl start logstash
systemctl enable logstash# 檢查服務狀態
systemctl status logstash

2.5 Filebeat 安裝與配置

Filebeat 是輕量級日志收集器,用于替代 Logstash 在邊緣節點的日志收集工作。

2.5.1 安裝 Filebeat
# CentOS安裝
yum install -y filebeat# Ubuntu安裝
apt install -y filebeat
2.5.2 配置 Filebeat

配置 Filebeat 收集系統日志并發送到 Elasticsearch:

# 編輯配置文件
vim /etc/filebeat/filebeat.yml# 配置輸入
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/messages- /var/log/securetags: ["system"]# 配置輸出到Elasticsearch
output.elasticsearch:hosts: ["localhost:9200"]index: "filebeat-system-%{+YYYY.MM.dd}"# 可選:配置輸出到Logstash
# output.logstash:
#   hosts: ["localhost:5044"]# 啟用Kibana儀表盤加載
setup.kibana:host: "localhost:5601"# 加載系統模塊
setup.module:system:enabled: true
2.5.3 啟動并驗證 Filebeat
# 加載儀表盤模板
filebeat setup --dashboards# 啟動服務
systemctl start filebeat
systemctl enable filebeat# 檢查服務狀態
systemctl status filebeat

三、ELK Stack 核心配置

3.1 Elasticsearch 核心配置

Elasticsearch 的主要配置文件為/etc/elasticsearch/elasticsearch.yml,關鍵配置項:

# 集群配置
cluster.name: elk-cluster
node.name: ${HOSTNAME}
node.master: true  # 是否可作為主節點
node.data: true    # 是否存儲數據# 路徑配置
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch# 網絡配置
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300  # 節點間通信端口# 發現與集群形成
discovery.seed_hosts: ["es-node1.example.com", "es-node2.example.com"]
cluster.initial_master_nodes: ["es-node1.example.com"]# 安全配置(基礎)
xpack.security.enabled: false  # 生產環境建議開啟
# xpack.security.transport.ssl.enabled: true# 索引生命周期管理
action.auto_create_index: .monitoring*,*  # 自動創建索引規則# 內存配置
bootstrap.memory_lock: true

3.2 Logstash 管道配置

Logstash 使用管道配置定義數據處理流程,由 input、filter 和 output 三部分組成:

3.2.1 多輸入配置
# /etc/logstash/conf.d/multiple_inputs.conf
input {# 文件輸入file {path => "/var/log/nginx/access.log"start_position => "beginning"sincedb_path => "/dev/null"  # 每次重啟都從頭讀取(測試用)tags => ["nginx", "access"]type => "nginx-access"}# 系統日志輸入syslog {port => 514type => "syslog"}# Beats輸入beats {port => 5044}
}filter {# 對nginx日志進行解析if [type] == "nginx-access" {grok {match => { "message" => '%{NGINXACCESS}' }}date {match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]target => "@timestamp"}geoip {source => "clientip"}}
}output {# 根據類型輸出到不同索引if [type] == "nginx-access" {elasticsearch {hosts => ["http://localhost:9200"]index => "nginx-access-%{+YYYY.MM.dd}"}} else if [type] == "syslog" {elasticsearch {hosts => ["http://localhost:9200"]index => "syslog-%{+YYYY.MM.dd}"}} else {elasticsearch {hosts => ["http://localhost:9200"]index => "logstash-%{+YYYY.MM.dd}"}}# 控制臺輸出(調試用)stdout { codec => rubydebug }
}
3.2.2 常用過濾器
  1. Grok 過濾器:解析非結構化日志為結構化數據
filter {grok {match => { "message" => "%{COMBINEDAPACHELOG}" }  # 匹配Apache日志# 自定義模式match => { "message" => "%{TIMESTAMP_ISO8601:logtime} %{LOGLEVEL:loglevel} \[%{DATA:thread}\] %{DATA:class} - %{GREEDYDATA:msg}" }patterns_dir => ["/etc/logstash/patterns"]  # 自定義模式文件目錄tag_on_failure => ["_grokparsefailure"]  # 解析失敗時添加標簽}
}

? ? 2. Date 過濾器:解析日志中的時間戳

filter {date {match => [ "logtime", "yyyy-MM-dd HH:mm:ss.SSS", "ISO8601" ]  # 匹配多種格式target => "@timestamp"  # 存儲到@timestamp字段timezone => "Asia/Shanghai"  # 指定時區}
}

? ? 3. Mutate 過濾器:修改字段

filter {mutate {rename => { "old_field" => "new_field" }  # 重命名字段add_field => { "new_field" => "static_value" }  # 添加字段update => { "existing_field" => "new_value" }  # 更新字段remove_field => [ "message", "logtime" ]  # 刪除字段convert => { "response_time" => "float" }  # 轉換字段類型gsub => [ "message", "password=\w+", "password=***" ]  # 替換敏感信息}
}

? ? 4. GeoIP 過濾器:根據 IP 地址添加地理位置信息

filter {geoip {source => "clientip"  # 源IP字段target => "geo"       # 結果存儲字段database => "/etc/logstash/geoip/GeoLite2-City.mmdb"  # 自定義數據庫}
}

3.3 Filebeat 配置詳解

Filebeat 配置文件/etc/filebeat/filebeat.yml的核心配置:

# 輸入配置
filebeat.inputs:
- type: log                  # 輸入類型(log、stdin、tcp等)enabled: true              # 是否啟用paths:                     # 日志文件路徑- /var/log/*.log- /var/log/nginx/*.logexclude_files: ['\.gz$']   # 排除的文件tags: ["system", "nginx"]  # 標簽fields:                    # 自定義字段environment: productionservice: webserverfields_under_root: false   # 自定義字段是否在根級別scan_frequency: 10s        # 掃描新文件的頻率harvester_buffer_size: 16384  # 收割機緩沖區大小max_bytes: 10485760        # 單個日志條目最大字節數multiline.type: pattern    # 多行日志處理multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'  # 多行匹配模式multiline.negate: true     # 是否否定匹配multiline.match: after     # 匹配后如何處理# 模塊配置(預定義的日志類型處理)
filebeat.config.modules:path: ${path.config}/modules.d/*.yml  # 模塊配置路徑reload.enabled: false                 # 是否自動重載# 輸出配置
output.elasticsearch:hosts: ["localhost:9200"]             # Elasticsearch地址index: "filebeat-%{[fields.environment]}-%{+YYYY.MM.dd}"  # 索引名稱username: ${ELASTICSEARCH_USERNAME}   # 用戶名password: ${ELASTICSEARCH_PASSWORD}   # 密碼ssl.enabled: true                     # 是否啟用SSLssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]  # CA證書# 或輸出到Logstash
# output.logstash:
#   hosts: ["localhost:5044"]
#   loadbalance: true                    # 是否負載均衡
#   worker: 2                            # 工作線程數# 處理器配置(在發送前處理事件)
processors:- add_host_metadata:                   # 添加主機元數據when.not.contains.tags: forwarded- add_cloud_metadata: ~                # 添加云服務元數據- add_docker_metadata: ~               # 添加Docker元數據- add_kubernetes_metadata: ~           # 添加Kubernetes元數據- drop_fields:                         # 刪除字段fields: ["beat", "input", "source"]- dissect:                             # 解析字段tokenizer: "%{key1}=%{value1};%{key2}=%{value2}"field: "message"target_prefix: "dissect"# 日志配置
logging.level: info                     # 日志級別
logging.to_files: true                  # 是否輸出到文件
logging.files:path: /var/log/filebeatname: filebeatkeepfiles: 7permissions: 0644# Kibana配置(用于設置儀表盤)
setup.kibana:host: "localhost:5601"username: ${KIBANA_USERNAME}password: ${KIBANA_PASSWORD}# 索引生命周期管理
setup.ilm:enabled: truepolicy_name: "filebeat-policy"rollover_alias: "filebeat"
3.3.1 Filebeat 模塊配置

Filebeat 提供多種預定義模塊,簡化常見日志類型的處理:

# 列出可用模塊
filebeat modules list# 啟用Nginx模塊
filebeat modules enable nginx# 禁用Nginx模塊
filebeat modules disable nginx

配置模塊:

# /etc/filebeat/modules.d/nginx.yml
- module: nginxaccess:enabled: truevar.paths: ["/var/log/nginx/access.log*"]  # 日志路徑error:enabled: truevar.paths: ["/var/log/nginx/error.log*"]   # 日志路徑ingress_controller:enabled: false  # 禁用Ingress Controller日志收集

3.4 Kibana 使用指南

3.4.1 索引模式創建
  1. 登錄 Kibana 控制臺(http://<kibana-host>:5601)
  2. 進入Management > Stack Management > Index Patterns
  3. 點擊Create index pattern
  4. 輸入索引模式(如nginx-access-*)
  5. 選擇時間字段(通常為@timestamp)
  6. 點擊Create index pattern
3.4.2 發現與搜索

Discover頁面可以搜索和瀏覽日志數據:

  • 使用 KQL(Kibana Query Language)搜索:
    • response:500 - 查找響應碼為 500 的日志
    • clientip:192.168.1.* - 查找特定 IP 段的客戶端
    • method:GET AND response:200 - 組合條件
    • url:"/api/users/*" - 通配符匹配
  • 時間范圍過濾:通過右上角時間選擇器設置
3.4.3 可視化創建

Visualize Library頁面創建可視化圖表:

  1. 點擊Create visualization
  2. 選擇可視化類型(如 Line chart、Bar chart、Pie chart 等)
  3. 選擇索引模式
  4. 配置 X 軸、Y 軸和聚合方式:
    • 對于訪問量趨勢:X 軸選擇@timestamp(按小時聚合),Y 軸選擇Count
    • 對于狀態碼分布:使用Terms聚合,字段選擇response

5. 保存可視化

3.4.4 儀表盤創建

Dashboard頁面創建儀表盤:

  1. 點擊Create dashboard
  2. 點擊Add添加已創建的可視化
  3. 調整圖表位置和大小
  4. 設置自動刷新時間
  5. 保存儀表盤

四、ELK Stack 安全配置

4.1 Elasticsearch 安全配置

啟用 Elasticsearch 安全功能(X-Pack Security):

# /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

設置內置用戶密碼:

# 自動生成隨機密碼
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto# 或手動設置密碼
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

創建自定義用戶:

# 使用Kibana控制臺或API創建用戶
# 示例:創建具有管理員權限的用戶
curl -X POST "http://localhost:9200/_security/user/admin" \-H "Content-Type: application/json" \-u elastic:elastic_password \-d '{"password" : "admin_password","roles" : ["superuser"],"full_name" : "Administrator"}'

4.2 Kibana 安全配置

配置 Kibana 使用 Elasticsearch 認證:

# /etc/kibana/kibana.yml
elasticsearch.username: "kibana_system"
elasticsearch.password: "kibana_system_password"
xpack.security.enabled: true
xpack.monitoring.ui.container.elasticsearch.enabled: true

設置 Kibana 空間和角色:

  1. 登錄 Kibana(使用 elastic 用戶)
  2. 進入Management > Stack Management > Security > Spaces創建空間
  3. 進入Roles創建自定義角色,分配權限
  4. 進入Users創建用戶并分配角色

4.3 加密通信配置

配置 Elasticsearch、Kibana 和 Filebeat 之間的 SSL/TLS 通信:

# 創建證書頒發機構
/usr/share/elasticsearch/bin/elasticsearch-certutil ca# 生成證書
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12# 配置Elasticsearch SSL
cp elastic-certificates.p12 /etc/elasticsearch/certs/
chown elasticsearch:elasticsearch /etc/elasticsearch/certs/*
# Elasticsearch SSL配置
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
# Kibana SSL配置
server.ssl.enabled: true
server.ssl.certificate: /etc/kibana/certs/kibana.crt
server.ssl.key: /etc/kibana/certs/kibana.key
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/ca.crt"]

五、ELK Stack 實戰案例

5.1 Nginx 日志分析平臺

5.1.1 架構設計
Nginx服務器 → Filebeat → Logstash → Elasticsearch → Kibana
5.1.2 配置 Filebeat 收集 Nginx 日志
# /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/nginx/access.logtags: ["nginx", "access"]fields:log_type: nginx_access- type: logenabled: truepaths:- /var/log/nginx/error.logtags: ["nginx", "error"]fields:log_type: nginx_erroroutput.logstash:hosts: ["logstash-host:5044"]
5.1.3 配置 Logstash 處理 Nginx 日志
# /etc/logstash/conf.d/nginx.conf
input {beats {port => 5044}
}filter {if [fields][log_type] == "nginx_access" {grok {match => { "message" => '%{NGINXACCESS}' }}date {match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]target => "@timestamp"}geoip {source => "clientip"}useragent {source => "agent"target => "user_agent"}mutate {convert => {"bytes" => "integer""response" => "integer""responsetime" => "float"}remove_field => ["message", "timestamp", "agent"]}} else if [fields][log_type] == "nginx_error" {grok {match => { "message" => '(?<timestamp>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[%{LOGLEVEL:loglevel}\] %{NUMBER:pid:int}#%{NUMBER:tid:int}: %{GREEDYDATA:error_message}(?:, client: %{IP:clientip})?(?:, server: %{DATA:server})?(?:, request: "%{DATA:request}")?(?:, host: "%{DATA:host}")?(?:, referrer: "%{DATA:referrer}")?' }}date {match => ["timestamp", "yyyy/MM/dd HH:mm:ss"]target => "@timestamp"}mutate {remove_field => ["message", "timestamp"]}}
}output {elasticsearch {hosts => ["elasticsearch-host:9200"]index => "nginx-%{[fields][log_type]}-%{+YYYY.MM.dd}"user => "elastic"password => "elastic_password"}stdout { codec => rubydebug }
}
5.1.4 創建 Kibana 可視化和儀表盤
  1. 創建索引模式nginx-*-*
  2. 創建訪問量趨勢圖(Line chart):
    • X 軸:@timestamp(按小時聚合)
    • Y 軸:Count

? ? ?3. 創建狀態碼分布(Pie chart):

    • 聚合:Terms
    • 字段:response

? ? ?4. 創建客戶端地理位置分布(Tile map):

    • 坐標字段:geoip.location

? ? ?5. 創建響應時間分布(Histogram):

    • X 軸:responsetime
    • 間隔:0.1

? ? ?6. 將以上可視化添加到儀表盤

5.2 應用程序日志集中管理

5.2.1 架構設計
應用服務器 → Filebeat → Elasticsearch → Kibana
5.2.2 配置 Filebeat 收集 JSON 格式日志
# /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/app/*.logjson.keys_under_root: true  # JSON字段放在根級別json.overwrite_keys: true   # 覆蓋已有字段fields:service: myappenvironment: productionoutput.elasticsearch:hosts: ["elasticsearch-host:9200"]index: "app-%{[fields.service]}-%{+YYYY.MM.dd}"username: "filebeat_writer"password: "password"
setup.template.name: "app-logs"
setup.template.pattern: "app-*"
setup.template.enabled: false
setup.template.overwrite: true
5.2.3 在 Kibana 中分析應用日志
  1. 創建索引模式app-*
  2. 設置日志等級過濾器:loglevel: ERROR
  3. 創建錯誤趨勢圖:按時間和日志級別聚合
  4. 設置告警:當 ERROR 級別日志在 5 分鐘內超過 10 條時觸發告警

六、ELK Stack 擴展與優化

6.1 Elasticsearch 集群擴展

配置 Elasticsearch 集群以提高可用性和性能:

# 節點1(主節點和數據節點)
cluster.name: elk-cluster
node.name: es-node-1
node.master: true
node.data: true
network.host: 192.168.1.101
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
cluster.initial_master_nodes: ["es-node-1", "es-node-2"]# 節點2(主節點和數據節點)
cluster.name: elk-cluster
node.name: es-node-2
node.master: true
node.data: true
network.host: 192.168.1.102
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
cluster.initial_master_nodes: ["es-node-1", "es-node-2"]# 節點3(僅數據節點)
cluster.name: elk-cluster
node.name: es-node-3
node.master: false
node.data: true
network.host: 192.168.1.103
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]

檢查集群健康狀態:

curl -X GET "http://localhost:9200/_cluster/health?pretty" -u elastic:password

6.2 索引生命周期管理

配置索引生命周期策略自動管理索引:

  1. 在 Kibana 中進入Management > Stack Management > Index Lifecycle Policies
  2. 創建策略:
    • 熱階段:存儲最新數據,允許寫入和查詢
    • 溫階段:數據不再寫入,僅查詢,可壓縮
    • 冷階段:很少查詢的數據,進一步壓縮
    • 刪除階段:過期數據自動刪除

? ? ?3. 應用策略到索引模板

示例 ILM 策略配置:

{"policy": {"phases": {"hot": {"min_age": "0ms","actions": {"rollover": {"max_age": "1d","max_size": "50gb"},"set_priority": {"priority": 100}}},"warm": {"min_age": "7d","actions": {"shrink": {"number_of_shards": 1},"forcemerge": {"max_num_segments": 1},"set_priority": {"priority": 50}}},"cold": {"min_age": "30d","actions": {"freeze": {},"set_priority": {"priority": 10}}},"delete": {"min_age": "90d","actions": {"delete": {}}}}}
}

6.3 性能優化

6.3.1 Elasticsearch 性能優化
  1. JVM 配置優化
# /etc/elasticsearch/jvm.options
-Xms16g  # 初始堆大小
-Xmx16g  # 最大堆大小(不超過物理內存的50%,且不超過31GB)
-XX:+UseG1GC  # 使用G1垃圾收集器
-XX:G1ReservePercent=25  # 保留內存百分比

? ? ?2. 索引優化

# 索引模板優化
{"index_patterns": ["logs-*"],"settings": {"number_of_shards": 3,  # 主分片數量(根據節點數調整)"number_of_replicas": 1,  # 副本數量"refresh_interval": "30s",  # 刷新間隔(提高寫入性能)"translog.durability": "async",  # 異步提交translog"translog.flush_threshold_size": "1gb"  # translog刷新閾值}
}

? ? ?3. 操作系統優化

# 禁用swap
swapoff -a
# 永久禁用swap(編輯/etc/fstab注釋swap行)# 配置網絡
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
sysctl -p
6.3.2 Logstash 性能優化
# /etc/logstash/jvm.options
-Xms4g
-Xmx4g# 管道工作線程配置
pipeline.workers: 4  # 通常設置為CPU核心數
pipeline.batch.size: 1000
pipeline.batch.delay: 50
6.3.3 Filebeat 性能優化
# /etc/filebeat/filebeat.yml
filebeat.registry.flush: 5s  # 注冊表刷新間隔
queue.mem:events: 4096  # 內存隊列大小flush.min_events: 512  # 刷新最小事件數flush.timeout: 5s  # 刷新超時

6.4 與其他工具集成

6.4.1 與 Kubernetes 集成
# Filebeat DaemonSet 配置示例
apiVersion: apps/v1
kind: DaemonSet
metadata:name: filebeatnamespace: kube-system
spec:selector:matchLabels:app: filebeattemplate:metadata:labels:app: filebeatspec:serviceAccountName: filebeatterminationGracePeriodSeconds: 30containers:- name: filebeatimage: docker.elastic.co/beats/filebeat:7.14.0args: ["-c", "/etc/filebeat.yml","-e",]volumeMounts:- name: configmountPath: /etc/filebeat.ymlsubPath: filebeat.yml- name: datamountPath: /usr/share/filebeat/data- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: truevolumes:- name: configconfigMap:defaultMode: 0600name: filebeat-config- name: varlibdockercontainershostPath:path: /var/lib/docker/containers- name: datahostPath:path: /var/lib/filebeat-datatype: DirectoryOrCreate
6.4.2 與 Prometheus 集成
# prometheus.yml 配置
scrape_configs:- job_name: 'elasticsearch'metrics_path: '/_prometheus/metrics'static_configs:- targets: ['elasticsearch-host:9200']- job_name: 'kibana'metrics_path: '/metrics'static_configs:- targets: ['kibana-host:5601']

在 Kibana 中安裝 Prometheus 插件,實現 metrics 數據可視化。

七、最佳實踐與總結

7.1 最佳實踐

  1. 部署架構
    • 小規模部署:單節點 ELK Stack
    • 中大規模:Elasticsearch 集群 + 獨立 Logstash 節點 + 獨立 Kibana 節點
    • 超大規模:引入 Kafka 作為緩沖層,實現解耦和峰值處理

? ? ?2. 安全實踐

    • 啟用 X-Pack Security 保護敏感數據
    • 配置 SSL/TLS 加密所有組件間通信
    • 實施最小權限原則,為不同組件創建專用用戶
    • 定期輪換證書和密碼

? ? ?3. 數據管理

    • 使用索引生命周期管理自動處理過期數據
    • 根據日志重要性設置不同的保留策略
    • 對敏感日志數據進行脫敏處理
    • 定期備份重要索引

? ? ?4. 監控與告警

    • 監控 ELK Stack 自身健康狀態
    • 設置關鍵指標告警(如磁盤使用率、集群健康狀態、錯誤率)
    • 監控日志處理延遲,確保及時發現處理瓶頸

7.2 總結

ELK Stack 作為一套完整的日志管理解決方案,通過 Elasticsearch、Logstash、Kibana 和 Beats 的協同工作,提供了從日志收集、處理、存儲到分析和可視化的全流程能力。其主要優勢包括:

  • 強大的全文檢索能力,支持復雜查詢和過濾
  • 靈活的日志處理管道,可應對各種日志格式和轉換需求
  • 豐富的可視化選項,幫助用戶從海量日志中發現有價值的信息
  • 高度可擴展的架構,可從單節點部署擴展到大規模集群
  • 活躍的社區和豐富的插件生態,不斷擴展功能邊界

在實際應用中,應根據業務需求和規模選擇合適的部署架構,并遵循最佳實踐進行配置和優化。隨著云原生和微服務架構的普及,ELK Stack 與容器平臺、云服務的集成將更加緊密,成為現代運維和監控體系中不可或缺的組成部分。

通過合理使用 ELK Stack,組織可以實現日志數據的集中管理,提高故障排查效率,增強系統安全性,為業務決策提供數據支持,最終提升整體 IT 運營效率和業務連續性。

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

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

相關文章

SpringAI:AI工程應用框架新選擇

Spring AI 是一個用于 AI 工程的應用框架 Spring AI 是一個用于 AI 工程的應用框架。其目標是將可移植性和模塊化設計等 Spring 生態系統設計原則應用于 AI 領域,并推廣使用 POJO 作為應用程序的構建塊到 AI 領域。 Spring AI 的核心是解決 AI 集成的基本挑戰:將企業數據和…

Kettle 開源ETL數據遷移工具從入門到實戰

ETL&#xff08;Extract, Transform, Load&#xff09;工具是用于數據抽取、轉換和加載的軟件工具&#xff0c;用于支持數據倉庫和數據集成過程。Kettle作為傳統的ETL工具是純 java 開發的開源的 ETL工具&#xff0c;用于數據庫間的數據遷移 。可以在 Linux、windows、unix 中運…

Maven中的bom和父依賴

maven最全避坑指南寫完后&#xff0c;發現自己對于bom和父pom的理解還是不夠深入&#xff0c;特此轉載DeepSeek的回答&#xff0c;和大家一起學習了。 在 Maven 的依賴管理中&#xff0c;父 POM (Parent POM) 和 BOM (Bill of Materials) 都是用于實現集中化管理和控制的核心機…

Python 操作 Word 文檔:主流庫對比與選擇指南

在辦公自動化、報告生成、數據處理等領域&#xff0c;利用 Python 程序化地創建、讀取或修改 Microsoft Word 文檔 (.docx 格式) 是一項非常實用的技能。Python 生態中有多個優秀的庫可以完成這項任務&#xff0c;但它們各有側重和優缺點。選擇哪一個“最好用”&#xff0c;關鍵…

怎么修改論文格式呢?提供一份論文格式模板

注!!!本文內容是作者自己整理的一份模板,僅供參考,各位如何修改,還需要看學校的要求。 一、參考文獻 1、有一定數量的近幾年參考文獻、不宜過多中文文獻 英文期刊模板 [1] Taesoo K, Sooyoung K, Kyunghan L, et al. Special issue on 6G and satellite communication…

MVC 發布

MVC 發布 引言 MVC(Model-View-Controller)模式是一種廣泛應用于軟件開發的架構模式。它將應用程序分為三個主要部分:模型(Model)、視圖(View)和控制器(Controller)。這種模式不僅提高了代碼的可維護性和可擴展性,而且使得開發者可以更加專注于各個組件的開發。本文…

arkui 動畫曲線

參考文檔 https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-curve#curvesinterpolatingspring10 可視化工具網站 https://easingwizard.com/ https://www.desmos.com/calculator/k01p40v0ct?langzh-CN 基本介紹 import { curves } from kit.A…

大語言模型(LLM)技術架構與工程實踐:從原理到部署

在自然語言處理領域,大語言模型(LLM)已成為顛覆性技術。從 GPT 系列到 LLaMA、ChatGLM,這些參數規模動輒百億甚至萬億的模型,不僅實現了流暢的自然語言交互,更在代碼生成、邏輯推理等復雜任務中展現出驚人能力。本文將從技術底層拆解 LLM 的核心架構,分析訓練與推理的關…

python后端之DRF框架(上篇)

一、DRF框架介紹 1、web應用開發模式 1.1、前后端不分離1.2、前后端分離2、RESTful介紹 RESTful是目前最流行的API設計風格 &#xff0c; REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。 1、每一個URI代表1種資源&#xff1b; 2、客…

信創數據庫-DM(達夢)數據庫安裝教程

官方安裝文檔在這&#xff1a;安裝前準備 | 達夢技術文檔 本文也是基于這個來寫的&#xff0c;微調了一下。 1&#xff0c;下載安裝包 體驗版直接到官方下載即可&#xff1a;產品下載 | 達夢在線服務平臺 如果是有需要商業版等&#xff0c;需要聯系客服申請。 安裝包要選擇CPU…

docker常用命令集(6)

接前一篇文章&#xff1a;docker常用命令集&#xff08;5&#xff09; 本文內容參考&#xff1a; Docker login/logout 命令 | 菜鳥教程 Docker命令_docker login-CSDN博客 特此致謝&#xff01; 9. docker login 簡介 docker login命令用于登錄到docker注冊表&#xff08…

[LINUX操作系統]shell腳本之循環

1.編寫腳本for1.sh,使用for循環創建20賬戶&#xff0c;賬戶名前綴由用戶從鍵盤輸入&#xff0c;賬戶初始密碼由用戶輸入&#xff0c;例如:test1、test2、test3......[rootmaster ~]# vim for1.sh #!/bin/bashread -p "請輸入賬戶名稱前綴&#xff1a;" prefixread -p…

空間設計:不是餐廳的裝飾游戲

餐廳空間設計&#xff0c;是通過布局規劃與環境營造&#xff0c;將功能需求、品牌調性與顧客體驗融合的系統性工程 —— 它不僅決定顧客「坐得舒不舒服」&#xff0c;更影響「愿不愿意再來」「會不會主動分享」的消費決策。體驗感知的第一觸點&#xff1a;顧客進門 3 秒內&…

XSS-DOM 2

目錄 1 DOMPurify 1.1 漏洞源碼 1.2 加載框架 ?編輯 setTimeout 1.3 ok&#xff1f; 1.4 window和document 1.5 Overwrite&#xff08;document.x&#xff09; 1.5.1 打印cookie 1.6 Overwrite2&#xff08;document.x.y&#xff09; 1.6.1 form表單 1.7 toString…

從數據丟失到動畫流暢:React狀態同步與遠程數據加載全解析

在前端開發中&#xff0c;數據狀態管理與界面同步始終是核心挑戰。近期我在處理一個書簽管理應用時&#xff0c;遇到了遠程數據加載后無法顯示、界面更新異常&#xff0c;甚至動畫閃爍等一系列問題。經過多輪調試與優化&#xff0c;最終實現了數據的正確加載與流暢的界面交互。…

MySQL半同步復制機制詳解:AFTER_SYNC vs AFTER_COMMIT 的優劣與選擇

目錄深入分析與利弊對比1. AFTER_COMMIT (不推薦)2. AFTER_SYNC (強烈推薦&#xff0c;MySQL 8.0 默認)總結與強烈建議最佳實踐 MySQL 半同步復制主要有兩種實現方式&#xff0c;其核心區別在于主庫何時回復客戶端事務提交成功&#xff08;即何時認為事務完成&#xff09;&…

GEE實戰 | 4種非監督分類算法深度解析,附可直接運行的完整代碼

在遙感影像處理領域&#xff0c;非監督分類憑借其無需人工標注樣本的優勢&#xff0c;成為快速了解地物分布的得力助手。它能自動依據像素光譜特征的相似性完成聚類&#xff0c;這種“無師自通”的特性&#xff0c;讓地理空間分析變得更加高效。 今天&#xff0c;我們就來深入…

基于落霞歸雁思維框架的軟件需求管理實踐指南

作者&#xff1a;落霞歸雁 日期&#xff1a;2025-08-02 摘要 在 VUCA 時代&#xff0c;需求變更成本已占軟件總成本的 40% 以上。本文將“落霞歸雁”思維框架&#xff08;觀察現象 → 找規律 → 應用規律 → 實踐驗證&#xff09;引入需求工程全生命周期&#xff0c;通過 4 個階…

企業級AI Agent構建實踐:從理論到落地的完整指南

&#x1f680; 引言 隨著人工智能技術的快速發展&#xff0c;AI應用正在從簡單的工具轉變為智能伙伴。企業級AI Agent作為這一變革的核心載體&#xff0c;正在重新定義我們與軟件系統的交互方式。本文將深入探討如何構建一個真正意義上的企業級AI Agent系統。 &#x1f3af; …

電商項目_性能優化_限流-降級-熔斷

針對電商系統&#xff0c;在遇到大流量時&#xff0c;必須要考慮如何保障系統的穩定運行&#xff0c;常用的手段&#xff1a;限流&#xff0c;降級&#xff0c;拒絕服務。 一、限流 限流算法&#xff1a;計數器、滑動窗口、漏銅算法、令牌桶算法。 限流的方案 前端限流接入…