Ubuntu 24.04 服务器上ELFK(Elasticsearch + Logstash + Filebeat + Kibana)日志收集系统部署指南
一、ELFK 架构与系统要求
1.1 ELFK 组件架构解析
ELFK 是一套完整的开源日志收集和分析解决方案,由四个核心组件组成:
Elasticsearch作为分布式搜索和分析引擎,是整个系统的核心存储组件。它基于 Apache Lucene 构建,能够存储、搜索和分析大量结构化和非结构化数据。Elasticsearch 具有近实时写入能力(默认 1 秒内可被检索),通过倒排索引实现快速查询,并支持分片与副本机制提升吞吐量和可靠性。
Logstash是一个数据处理管道,负责从各种来源收集数据,进行过滤、转换和丰富化处理,然后将处理后的数据发送到 Elasticsearch。它采用输入 - 过滤 - 输出(Input-Filter-Output)三层架构,支持插件化扩展,能够处理来自文件、网络、消息队列等多种数据源的日志。
Filebeat是轻量级的日志采集器,用 Go 语言开发,资源占用极低(内存小于 50MB)。它通过 prospectors 和 harvesters 两个组件协同工作,实时监控日志文件变化并发送到 Logstash 或 Elasticsearch。相比 Logstash,Filebeat 更适合大规模部署在多个服务器上进行分布式日志采集。
Kibana提供 Web 界面用于可视化和分析存储在 Elasticsearch 中的数据。它通过索引模式与 Elasticsearch 建立连接,支持创建各种可视化图表、仪表盘和搜索查询,为用户提供直观的日志分析和监控功能。
1.2 系统环境要求
在 Ubuntu 24.04 上部署 ELFK 系统,需要满足以下硬件和软件要求:
硬件要求:
-
CPU:Elasticsearch 节点建议 2-4 核,生产环境推荐 4 核以上
-
内存:Elasticsearch 最低 4GB,推荐 8GB;Logstash 最低 4GB;Kibana 最低 2GB;Filebeat 最低 1GB
-
存储:SSD 强烈推荐,最低 20GB 可用空间,根据数据量和保留期调整
-
网络:需要开放 9200(Elasticsearch HTTP)、9300(Elasticsearch 集群通信)、5601(Kibana)、5044(Logstash Beats 输入)等端口
软件要求:
-
操作系统:Ubuntu 24.04 LTS(64 位)
-
Java 运行环境:Elasticsearch 8.x 内置 OpenJDK 17,无需额外安装
-
系统内核:Ubuntu 24.04 默认内核 6.8 已支持 Intel 13 代和 14 代处理器
1.3 部署架构说明
本指南采用单节点部署架构,所有 ELFK 组件运行在同一台服务器上。这种架构适合测试环境或小规模生产环境。在生产环境中,建议采用集群架构以提高可用性和性能。
部署流程将按照以下顺序进行:
-
系统环境准备(更新系统、安装依赖、配置内核参数)
-
安装 Elasticsearch(核心存储组件)
-
安装 Kibana(可视化界面)
-
安装 Logstash(数据处理管道)
-
安装 Filebeat(日志采集器)
-
配置各组件并启动服务
-
验证系统功能
-
测试日志采集流程
二、系统环境准备
2.1 系统更新与依赖安装
首先登录到 Ubuntu 24.04 服务器,执行系统更新和基础依赖包安装:
# 更新系统包索引
sudo apt update
# 升级系统已安装的软件包(建议执行,确保系统环境最新)
sudo apt upgrade -y
# 安装必要的系统工具和依赖
sudo apt install -y apt-transport-https curl wget gnupg2
2.2 配置系统内核参数
Elasticsearch 对系统内核参数有特定要求,特别是虚拟内存映射参数vm.max_map_count。Ubuntu 24.04 默认该参数值为 1048576,已满足要求,但建议确认并配置其他必要参数:
# 查看当前vm.max_map_count值
cat /proc/sys/vm/max_map_count
# 如果输出不是262144或更高,执行以下命令(Ubuntu 24.04通常不需要)
# sudo sysctl -w vm.max_map_count=262144
# 配置系统资源限制(针对elasticsearch用户)
sudo tee -a /etc/security/limits.conf <<EOF
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096
EOF
# 配置sysctl参数(如果需要)
sudo tee -a /etc/sysctl.conf <<EOF
vm.max_map_count=262144
fs.file-max=65536
EOF
# 使配置生效
sudo sysctl -p
2.3 防火墙配置
为了确保 ELFK 各组件之间能够正常通信,需要配置防火墙规则。在测试环境中,您可以选择关闭防火墙或开放必要端口:
# 查看当前防火墙状态
sudo ufw status
# 方案一:测试环境(关闭防火墙)
sudo ufw disable
# 方案二:生产环境(开放必要端口)
sudo ufw allow 22/tcp # SSH
sudo ufw allow 9200/tcp # Elasticsearch HTTP
sudo ufw allow 9300/tcp # Elasticsearch 集群通信
sudo ufw allow 5601/tcp # Kibana
sudo ufw allow 5044/tcp # Logstash Beats输入
sudo ufw allow 80/tcp # HTTP(可选)
sudo ufw allow 443/tcp # HTTPS(可选)
# 启用防火墙
sudo ufw enable
# 验证防火墙规则
sudo ufw status numbered
三、安装 Elasticsearch
3.1 添加 Elasticsearch 软件源
Elasticsearch 的安装需要使用官方软件源,执行以下命令添加:
# 下载并导入Elasticsearch官方GPG密钥
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
# 添加阿里云 Elastic 镜像源(8.x版本)
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://mirrors.aliyun.com/elasticstack/8.x/apt/ stable main" | sudo tee /etc/apt/sources.list.d/elastic.list
# 更新包索引
sudo apt update
3.2 安装 Elasticsearch
执行安装命令,并设置开机自启:
# 安装Elasticsearch
sudo apt install -y elasticsearch
# 设置开机自启
sudo systemctl enable elasticsearch
# 启动Elasticsearch服务
sudo systemctl start elasticsearch
# 查看服务状态(验证是否启动成功)
sudo systemctl status elasticsearch
服务启动后,您应该看到类似以下输出,表示服务正在运行:
● elasticsearch.service - Elasticsearch
Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; preset: enabled)
Active: active (running) since Wed 2024-10-16 10:00:00 CST; 1min ago
Main PID: 1234 (java)
Tasks: 50 (limit: 4915)
Memory: 2.1G
CPU: 30s
CGroup: /system.slice/elasticsearch.service
└─1234 /usr/bin/java -Xms1g -Xmx1g ...
3.3 配置 Elasticsearch
Elasticsearch 的主要配置文件位于/etc/elasticsearch/elasticsearch.yml。使用文本编辑器打开该文件:
sudo vim /etc/elasticsearch/elasticsearch.yml
配置文件的详细参数说明如下:
# 集群配置
cluster.name: elfk-cluster # 集群名称,所有节点必须一致
node.name: node-1 # 节点名称,单节点部署时使用
# 数据路径配置
path.data: /var/lib/elasticsearch # 数据存储路径
path.logs: /var/log/elasticsearch # 日志文件路径
# 网络配置
network.host: 0.0.0.0 # 绑定所有网络接口,允许外部访问
http.port: 9200 # HTTP端口
transport.port: 9300 # 集群通信端口
# 单节点配置(重要!)
discovery.type: single-node # 设置为单节点模式,避免集群发现问题
# 内存锁定(可选,生产环境建议启用)
# bootstrap.memory_lock: true
# 安全配置(Elasticsearch 8.x默认启用)
# -------------------- 安全与 SSL --------------------
xpack.security.enabled: true
#关闭enrollment功能,因为我们不使用内置证书
xpack.security.enrollment.enabled: false
# ---- HTTP 层(9200)----
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.certificate: /etc/elasticsearch/certs/es-node1.crt
xpack.security.http.ssl.key: /etc/elasticsearch/certs/es-node1.key
xpack.security.http.ssl.certificate_authorities: ["/etc/elasticsearch/certs/ca.crt"]
# ---- 传输层(9300)----
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/es-node1.crt
xpack.security.transport.ssl.key: /etc/elasticsearch/certs/es-node1.key
xpack.security.transport.ssl.certificate_authorities: ["/etc/elasticsearch/certs/ca.crt"]
# 跨域配置(允许Kibana访问)
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length
配置完成后,保存并退出编辑器。接下来需要配置 Elasticsearch 的内存使用。编辑 JVM 选项文件:
sudo vim /etc/elasticsearch/jvm.options.d/heap.options
根据服务器内存配置 JVM 堆大小(建议设置为物理内存的 50%,最大不超过 31GB):
-Xms4g # 初始堆大小
-Xmx4g # 最大堆大小
3.4 初始化安全配置
Elasticsearch 8.x 默认启用了安全认证,需要初始化内置用户密码:
# 初始化内置用户密码(包括elastic、kibana_system、logstash_system等)
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
执行该命令后,系统会提示您为每个内置用户设置密码。建议为elastic用户设置一个强密码(例如:Elastic@1234),并记录下来供后续使用。
忘记密码解决方案:
方案:如果你不记得或想重置 elastic 用户密码
你应该使用 elasticsearch-reset-password 工具。
-
停止 Elasticsearch 服务:
sudo systemctl stop elasticsearch -
使用
elasticsearch-reset-password命令重置密码这个命令需要在 Elasticsearch 的安装目录下执行,并且需要
elasticsearch用户权限。# 切换到 elasticsearch 用户 sudo su - elasticsearch -s /bin/bash # 执行重置命令,为 'elastic' 用户生成一个新的随机密码 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -
记录新密码
命令执行成功后,会在控制台输出新生成的密码。
请务必立即复制并妥善保存这个密码,它只会显示这一次。
... Successfully reset password for user [elastic] New password: <这里会显示一个随机生成的新密码> -
退出 elasticsearch 用户并重启服务:
exit sudo systemctl start elasticsearch -
验证新密码
使用新密码通过curl进行验证。
curl -u elastic:<新生成的密码> -k https://10.168.2.241:9200/_cluster/health?pretty如果返回集群健康状态信息,说明密码重置成功。
3.5 验证 Elasticsearch 安装
使用curl命令验证 Elasticsearch 是否正常运行:
# 验证Elasticsearch(需要提供elastic用户的密码)
curl -u elastic:Elastic@1234 -k https://localhost:9200
# 查看集群健康状态
curl -u elastic:Elastic@1234 -k https://localhost:9200/_cluster/health?pretty
# 查看节点信息
curl -u elastic:Elastic@1234 -k https://localhost:9200/_cat/nodes?v
如果看到类似以下的 JSON 输出,说明 Elasticsearch 安装成功:
{
"name" : "node-1",
"cluster_name" : "elfk-cluster",
"cluster_uuid" : "xxx",
"version" : {
"number" : "8.15.0",
...
},
"tagline" : "You Know, for Search"
}
3.6、ELFK 配置使用自定义生成OpenSSL的 自签证书
✅ 1. 证书规划(单节点也要规划好,方便以后扩)
| 组件 | 证书用途 | 文件命名 |
|---|---|---|
| CA | 根证书 | ca.crt + ca.key |
| Elasticsearch | 服务端/客户端一体 | es-node1.crt + es-node1.key |
| Kibana | 作为客户端连接 ES | 只需 CA 证书 |
| Logstash | 作为客户端输出 ES | 只需 CA 证书 |
| Filebeat | 作为客户端输出 Logstash | 本例走 HTTP 没开 TLS,如需开也一样 |
✅ 2. 生成证书(一步到位)
# 2.1 建目录
sudo mkdir -p /etc/elasticsearch/certs /etc/kibana/certs /etc/logstash/certs
sudo chown -R elastic:elastic /etc/elasticsearch/certs
sudo chown -R elastic:elastic /etc/kibana/certs
sudo chown -R elastic:elastic /etc/logstash/certs
# 2.2 进入工作目录
cd /etc/elasticsearch/certs
# 2.3 生成私有 CA
sudo openssl genrsa -out ca.key 4096
sudo openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Example/OU=IT/CN=ELFK-CA"
# 2.4 生成节点私钥 & CSR(注意 CN 填主机名)
sudo openssl genrsa -out es-node1.key 4096
sudo openssl req -new -key es-node1.key -out es-node1.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Example/OU=IT/CN=es-node1"
# 2.5 写 SAN 扩展文件(单节点也要写,防浏览器报警)
cat <<EOF | sudo tee es-node1.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth,clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = es-node1
IP.1 = 127.0.0.1
IP.2 = $(hostname -I | awk '{print $1}') # 自动读本机内网 IP
EOF
# 2.6 签发正式证书
sudo openssl x509 -req -in es-node1.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out es-node1.crt -days 1095 -sha256 -extfile es-node1.ext
# 2.7 权限收紧
sudo chmod 600 *.key
sudo chown -R elastic:elastic /etc/elasticsearch/certs
✅ 3. Elasticsearch 配置(/etc/elasticsearch/elasticsearch.yml)
# ======================== Elasticsearch Configuration =========================
cluster.name: elfk
node.name: es-node1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
# -------------------- 安全与 SSL --------------------
xpack.security.enabled: true
#关闭enrollment功能,因为我们不使用内置证书
xpack.security.enrollment.enabled: false
# ---- HTTP 层(9200)----
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.certificate: /etc/elasticsearch/certs/es-node1.crt
xpack.security.http.ssl.key: /etc/elasticsearch/certs/es-node1.key
xpack.security.http.ssl.certificate_authorities: ["/etc/elasticsearch/certs/ca.crt"]
# ---- 传输层(9300)----
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/es-node1.crt
xpack.security.transport.ssl.key: /etc/elasticsearch/certs/es-node1.key
xpack.security.transport.ssl.certificate_authorities: ["/etc/elasticsearch/certs/ca.crt"]
#----------------------- END SECURITY AUTO CONFIGURATION -------------------------
sudo systemctl restart elasticsearch
curl -u elastic \
--cacert /etc/elasticsearch/certs/ca.crt \
https://localhost:9200
能返回集群信息即 OK。
root@rgzn-H610M-K-DDR4:/etc/elasticsearch/certs# curl -u elastic \
> --cacert /etc/elasticsearch/certs/ca.crt \
> https://localhost:9200
Enter host password for user 'elastic':
{
"name" : "es-node1",
"cluster_name" : "elfk",
"cluster_uuid" : "tkWxAeZNQH60K1XKd2vm8A",
"version" : {
"number" : "8.19.7",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "198d86868932741b4e0d184425510217febc27d1",
"build_date" : "2025-11-07T13:35:54.762042224Z",
"build_snapshot" : false,
"lucene_version" : "9.12.2",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
四、安装 Kibana
4.1 安装 Kibana
Kibana 是 ELFK 系统的可视化界面,需要与 Elasticsearch 版本保持一致:
# 安装Kibana
sudo apt install -y kibana
# 设置开机自启
sudo systemctl enable kibana
# 启动Kibana服务
sudo systemctl start kibana
# 查看服务状态
sudo systemctl status kibana
4.2 配置 Kibana
复制 CA 证书:
sudo cp /etc/elasticsearch/certs/ca.crt /etc/kibana/certs/
sudo chown elastic:elastic /etc/kibana/certs/ca.crt
sudo systemctl restart kibana
生成 token
sudo -u elasticsearch \
/usr/share/elasticsearch/bin/elasticsearch-service-tokens create elastic/kibana default
目录归属全交给 elasticsearch:
sudo chown -R elasticsearch:elasticsearch /etc/elasticsearch
把证书做成“属主 root、组 elasticsearch、640”
sudo chown root:elasticsearch /etc/elasticsearch/certs/http_ca.crt
sudo chmod 640 /etc/elasticsearch/certs/http_ca.crt
把系统用户 kibana 加入 elasticsearch 组
sudo usermod -aG elasticsearch kibana
Kibana 的配置文件位于/etc/kibana/kibana.yml。使用文本编辑器打开:
sudo vim /etc/kibana/kibana.yml
配置文件的详细参数说明如下:
# 服务器配置
server.port: 5601 # Kibana端口
server.host: "0.0.0.0" # 绑定所有网络接口,允许外部访问
server.name: "kibana-server-241" # 服务器名称
# server.basePath: "" # 如果需要反向代理,设置基础路径
# Elasticsearch连接配置
elasticsearch.hosts: ["https://localhost:9200"]
elasticsearch.serviceAccountToken: "AAEAAWVsYXN0aWMva2liYW5hL2RlZmF1bHQ6X1B6cDBfSDBRQUduUnhwLS0yaTJkQQ"
elasticsearch.ssl.certificateAuthorities: [ "/etc/elasticsearch/certs/http_ca.crt" ]
elasticsearch.ssl.verificationMode: "none" # 测试环境可禁用证书验证
logging:
appenders:
file:
type: file
fileName: /var/log/kibana/kibana.log
layout:
type: json
root:
appenders:
- default
- file
pid.file: /run/kibana/kibana.pid
i18n.locale: "zh-CN"
配置完成后保存并退出。需要注意的是,Kibana 默认使用 HTTPS 连接 Elasticsearch,因此需要配置正确的证书路径或禁用证书验证(测试环境)。
4.3 验证 Kibana 访问
在浏览器中访问 Kibana 界面:
https://服务器IP:5601
使用之前设置的elastic用户和密码登录。如果看到 Kibana 的欢迎界面,说明安装成功。首次登录时,Kibana 会引导您进行一些初始配置,包括创建索引模式等。
五、安装 Logstash
5.1 安装 Logstash
Logstash 是数据处理管道,负责接收、处理和转发日志数据:
# 安装Logstash
sudo apt install -y logstash
# 设置开机自启
sudo systemctl enable logstash
# 启动Logstash服务
sudo systemctl start logstash
# 查看服务状态
sudo systemctl status logstash
把 CA 证书拷给 Logstash(只读即可)
sudo mkdir /etc/logstash/certs
sudo cp /etc/elasticsearch/certs/ca.crt /etc/logstash/certs/
sudo chown logstash:logstash /etc/logstash/certs/ca.crt
sudo chmod 644 /etc/logstash/certs/ca.crt
启服务 & 开机自启
sudo systemctl daemon-reload
sudo systemctl enable --now logstash
查看日志 / 排错
# 服务状态
sudo systemctl status logstash
# 实时日志
sudo journalctl -u logstash -f
# 管道加载错误看这里
sudo tail -f /var/log/logstash/logstash-plain.log
5.2 配置 Logstash
Logstash 的配置文件位于/etc/logstash/conf.d/目录下。创建一个新的配置文件:
sudo vim /etc/logstash/conf.d/nginx-beats.conf
配置文件采用 Logstash 配置语言,包含输入、过滤和输出三个主要部分:
input {
beats {
port => 5044
ssl => true
ssl_certificate => "/etc/logstash/certs/es-node1.crt"
ssl_key => "/etc/logstash/certs/es-node1.key"
ssl_certificate_authorities => ["/etc/logstash/certs/ca.crt"]
ssl_client_authentication => "optional" # ← 改为 optional 或 required
}
}
filter {
# 解析 Nginx 默认 combined 日志
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
# 把 timestamp 字段转成 @timestamp
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
# 去掉无用字段
mutate {
remove_field => [ "timestamp", "agent", "ecs" ]
}
}
output {
elasticsearch {
hosts => ["https://localhost:9200"]
user => "elastic"
password => "123456"
ssl => true
cacert => "/etc/logstash/certs/ca.crt"
index => "nginx-access-%{+YYYY.MM.dd}"
}
# 调试用,可删
stdout { codec => rubydebug }
}
配置文件的详细说明:
-
输入(Input):使用beats插件监听 5044 端口,接收 Filebeat 发送的日志数据
-
过滤(Filter):使用grok插件解析 syslog 格式日志,使用json插件解析 JSON 格式日志
-
输出(Output):将处理后的日志发送到 Elasticsearch,按日期创建索引
5.3 验证 Logstash 配置
在启动 Logstash 之前,需要验证配置文件的语法正确性:
# 验证Logstash配置文件语法
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
# 如果看到"Configuration OK",说明配置文件语法正确
六、安装 Filebeat
6.1 安装 Filebeat
Filebeat 是轻量级的日志采集器,负责监控和收集日志文件:
# 安装Filebeat
sudo apt install -y filebeat
# 设置开机自启
sudo systemctl enable filebeat
# 启动Filebeat服务
sudo systemctl start filebeat
# 查看服务状态
sudo systemctl status filebeat
开启Filebeat<=>Logstash双向 TLS(保留 CA+)
-
给 Filebeat 生成客户端证书(同一 CA 签发)
cd /etc/elasticsearch/certs sudo openssl genrsa -out filebeat-client.key 4096 sudo openssl req -new -key filebeat-client.key -out filebeat-client.csr -subj "/CN=filebeat" sudo openssl x509 -req -in filebeat-client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ -out filebeat-client.crt -days 1095 -sha256 -
拷到 Filebeat 侧
sudo cp ca.crt filebeat-client.crt filebeat-client.key /etc/filebeat/certs/ sudo chown root:root /etc/filebeat/certs/* sudo chmod 600 /etc/filebeat/certs/*.key -
Logstash 端改验证模式
input { beats { port => 5044 ssl => true ssl_certificate => "/etc/logstash/certs/es-node1.crt" ssl_key => "/etc/logstash/certs/es-node1.key" ssl_certificate_authorities => ["/etc/logstash/certs/ca.crt"] ssl_client_authentication => "optional" # ← 改为 optional 或 required } } -
Filebeat 端加客户端证书
output.logstash: hosts: ["localhost:5044"] ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"] ssl.certificate: "/etc/filebeat/certs/filebeat-client.crt" ssl.key: "/etc/filebeat/certs/filebeat-client.key"
✅ 验证
sudo systemctl restart logstash
ss -lntp | grep 5044
sudo filebeat test output
出现 Logstash: OK 即可。
root@rgzn-H610M-K-DDR4:/etc/logstash/conf.d# filebeat test output
logstash: localhost:5044...
connection...
parse host... OK
dns lookup... OK
addresses: 127.0.0.1
dial up... OK
TLS...
security: server's certificate chain verification is enabled
handshake... OK
TLS version: TLSv1.3
dial up... OK
talk to server... OK
✅ 一句话总结
Logstash 8.x beats-input 源码强制:
写 ssl_certificate_authorities 就必须 ssl_client_authentication => “optional”|“required”
写 “none” 会直接抛 ConfigError;
要么删掉 ssl_certificate_authorities 做单向 TLS,
要么改 “optional” 并给 Filebeat 发客户端证书——5044 就能正常启动
6.2 配置 Filebeat
Filebeat 的配置文件位于/etc/filebeat/filebeat.yml。使用文本编辑器打开:
sudo vim /etc/filebeat/filebeat.yml
配置文件的详细参数说明如下:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
fields:
log_type: nginx_access
fields_under_root: true
# 关键:改送 Logstash
output.logstash:
hosts: ["localhost:5044"]
ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
ssl.certificate: "/etc/filebeat/certs/filebeat-client.crt"
ssl.key: "/etc/filebeat/certs/filebeat-client.key"
# 可选:加载仪表盘(一次性)
setup.kibana:
host: "https://localhost:5601"
ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
username: "elastic"
password: "123456"
logging.level: info # 可选 debug, warning, error
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0644
6.3 启用和配置 Filebeat 模块
Filebeat 提供了一些预配置的模块,可以快速启用对常见服务的日志采集:
# 查看可用的模块
sudo filebeat modules list
# 启用system模块(采集系统日志)
sudo filebeat modules enable system
# 配置system模块(可选)
sudo nano /etc/filebeat/modules.d/system.yml
在system.yml文件中,可以配置需要采集的系统日志类型:
- module: system
syslog:
enabled: true
paths:
- /var/log/syslog
auth:
enabled: true
paths:
- /var/log/auth.log
七、启动和验证所有服务
7.1 启动所有服务
在完成所有组件的安装和配置后,需要启动所有服务并验证其运行状态:
# 重启所有ELFK服务
sudo systemctl restart elasticsearch
sudo systemctl restart kibana
sudo systemctl restart logstash
sudo systemctl restart filebeat
# 查看所有服务状态
sudo systemctl status elasticsearch
sudo systemctl status kibana
sudo systemctl status logstash
sudo systemctl status filebeat
确保所有服务都显示为active (running)状态。如果有任何服务启动失败,可以通过查看相应的日志文件来排查问题。
7.2 验证 Elasticsearch 索引
使用curl命令查看 Elasticsearch 中是否有日志索引:
# 查看所有索引(需要提供elastic用户密码)
curl -u elastic:123456 -k https://localhost:9200/_cat/indices?v
# 查看特定索引的详细信息
curl -u elastic:123456 -k https://localhost:9200/nginx_access-*/_settings?pretty
如果看到类似nginx_access-2025.11.26的索引,说明日志已经被成功写入。
7.3 验证 Kibana 功能
在浏览器中访问 Kibana 界面(https://服务器IP:5601),使用elastic用户登录后,需要创建索引模式才能查看日志:
-
点击左侧菜单中的 “管理”(齿轮图标)
-
选择 “堆栈管理"→"索引模式(没有索引模式的话点数据视图)”
-
点击 “创建索引模式/数据视图”
-
输入索引模式名称:nginx_access-*(匹配所有以 nginx_access- 开头的索引)
-
选择时间字段:@timestamp
-
点击 “创建索引模式”
创建索引模式后,就可以在 “发现” 页面查看日志数据了。


7.4 测试日志采集功能
为了验证整个日志采集流程是否正常工作,可以手动生成一些测试日志:
# 使用logger命令生成系统日志
logger "This is a test log message from ELFK deployment"
# 生成JSON格式的测试日志
echo '{"timestamp":"2024-10-16T12:30:00","level":"INFO","message":"Application started","user_id":"12345","request_id":"abcdef"}' > /tmp/test.log
# 让Filebeat采集这个文件(需要在配置中添加相应的路径)
echo "Test log line 1" >> /var/log/application/app.log
echo "Test log line 2" >> /var/log/application/app.log
等待几分钟后,在 Kibana 的 “发现” 页面应该能看到这些测试日志。
八、系统使用指南
8.1 Kibana 基本操作
Kibana 提供了强大的日志查询和可视化功能。以下是基本的使用步骤:
查询日志:
-
在 Kibana 主页点击 “发现”
-
选择之前创建的索引模式(nginx_access-*)
-
在搜索框中输入查询条件,例如:log_source: “ubuntu-server”
-
使用时间选择器选择查看日志的时间范围
-
点击搜索按钮查看结果
创建可视化图表:
-
点击左侧菜单 “可视化”
-
选择图表类型(如柱状图、折线图等)
-
选择数据源(索引模式)
-
配置聚合方式(如按时间聚合、按字段分组等)
-
保存并命名可视化图表

创建仪表盘:
-
点击左侧菜单 “仪表盘”
-
点击 “添加” 按钮选择要添加的可视化图表
-
调整图表位置和大小
-
保存仪表盘
8.2 Logstash 配置优化
在生产环境中,可能需要对 Logstash 的性能进行优化。以下是一些关键配置参数:
# /etc/logstash/logstash.yml
pipeline:
workers: 4 # 工作线程数,建议设置为CPU核心数
batch:
size: 125 # 每个批次处理的事件数
delay: 5 # 等待时间(毫秒)
# /etc/logstash/jvm.options
-Xms2g # Logstash JVM初始堆大小
-Xmx2g # Logstash JVM最大堆大小
8.3 Filebeat 性能调优
Filebeat 的性能优化主要包括以下几个方面:
# /etc/filebeat/filebeat.yml
filebeat:
prospectors:
- paths:
- /var/log/*.log
scan_frequency: 10s # 扫描频率
backoff: 1s # 重试间隔
max_backoff: 10s # 最大重试间隔
# 输出配置优化
output:
logstash:
workers: 2 # 输出工作线程数
bulk_max_size: 1000 # 批量发送大小
8.4 索引管理策略
为了管理日志数据的存储和生命周期,建议配置索引生命周期管理(ILM):
# 创建ILM策略(示例)
curl -u elastic:Elastic@1234 -k -X PUT "https://localhost:9200/_ilm/policy/logs-policy" -H 'Content-Type: application/json' -d'
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_size": "50GB",
"max_age": "30d"
}
}
},
"delete": {
"min_age": "90d",
"actions": {
"delete": {}
}
}
}
}
}
'
# 将ILM策略应用到索引模板
curl -u elastic:Elastic@1234 -k -X PUT "https://localhost:9200/_template/logs-template" -H 'Content-Type: application/json' -d'
{
"index_patterns": ["logs-*"],
"settings": {
"index.lifecycle.name": "logs-policy",
"index.lifecycle.rollover_alias": "logs"
}
}
'
九、常见问题排查
9.1 服务启动失败
如果某个服务无法正常启动,可以通过以下步骤排查:
查看服务日志:
# 查看Elasticsearch日志
sudo journalctl -u elasticsearch -f
# 查看Kibana日志
sudo journalctl -u kibana -f
# 查看Logstash日志
sudo journalctl -u logstash -f
# 查看Filebeat日志
sudo journalctl -u filebeat -f
常见错误及解决方法:
- Elasticsearch 启动失败
-
错误信息:max virtual memory areas vm.max_map_count [65530] is too low
-
解决方法:执行sudo sysctl -w vm.max_map_count=262144,并将该配置添加到/etc/sysctl.conf
- Kibana 无法连接 Elasticsearch
-
错误信息:Could not contact Elasticsearch at http://localhost:9200
-
解决方法:检查 Elasticsearch 是否运行、端口是否开放、防火墙设置是否正确
- Logstash 配置错误
-
错误信息:Expected one of #, ", ', }
-
解决方法:使用–config.test_and_exit选项验证配置文件语法
9.2 日志采集问题
如果日志没有被正确采集或显示,可以按以下步骤排查:
- 验证 Filebeat 是否在采集日志
# 查看Filebeat采集状态
sudo filebeat status
# 查看Filebeat采集的文件列表
sudo filebeat list files
# 检查Filebeat注册表(记录已采集的日志位置)
cat /var/lib/filebeat/registry
- 验证 Logstash 是否接收到数据
# 在Logstash配置中添加stdout输出,查看是否有数据
output {
stdout { codec => rubydebug }
}
# 重启Logstash后查看控制台输出
- 验证数据是否写入 Elasticsearch
# 查看索引中的文档数量
curl -u elastic:Elastic@1234 -k https://localhost:9200/nginx_access-*/_count?pretty
# 搜索特定文档
curl -u elastic:Elastic@1234 -k -X GET "https://localhost:9200/nginx_access-*/_search?q=message:test&pretty"
9.3 性能问题
如果系统性能不佳,可以考虑以下优化措施:
- 增加系统资源
-
为 Elasticsearch 增加内存(建议至少 8GB)
-
为 Logstash 增加 CPU 核心
-
使用 SSD 存储设备
- 优化配置参数
-
调整 Logstash 的pipeline.workers和batch.size
-
调整 Filebeat 的scan_frequency和bulk_max_size
-
调整 Elasticsearch 的分片和副本数量
- 使用缓存机制
-
在 Filebeat 和 Logstash 之间使用消息队列(如 Kafka)
-
配置 Elasticsearch 的缓存策略
-
使用 Kibana 的缓存功能
十、生产环境最佳实践
10.1 安全加固
在生产环境中,安全是至关重要的。以下是一些安全加固建议:
- 启用 HTTPS
-
为 Elasticsearch 和 Kibana 配置 SSL 证书
-
使用自签名证书或购买 CA 签名证书
-
配置证书验证和双向认证
- 访问控制
-
使用防火墙限制访问 IP
-
配置 Nginx 作为反向代理
-
启用 Kibana 的身份验证
-
使用角色权限控制(RBAC)
- 数据加密
-
启用传输层加密(TLS)
-
配置数据存储加密
-
定期轮换密钥
10.2 监控与告警
建立完善的监控和告警体系:
- 系统监控
-
使用 Elasticsearch 的监控 API
-
监控 CPU、内存、磁盘使用情况
-
监控服务状态和响应时间
- 日志告警
-
在 Kibana 中设置告警规则
-
基于日志级别(ERROR、CRITICAL)告警
-
基于日志数量或频率告警
-
配置邮件或短信告警通知
- 性能告警
-
监控索引写入速度
-
监控搜索响应时间
-
监控磁盘空间使用情况
10.3 备份与恢复
制定完善的数据备份和恢复策略:
- 定期备份
-
使用 Elasticsearch 的快照功能
-
将快照存储到远程存储(如 S3、NFS)
-
定期验证备份的可用性
- 恢复流程
-
制定详细的恢复步骤文档
-
定期演练恢复流程
-
确保备份数据的完整性和一致性
- 灾难恢复
-
部署多节点集群
-
配置自动故障转移
-
建立异地灾备环境
10.4 性能优化建议
基于不同规模的日志量,提供以下性能优化建议:
| 日志规模 | 服务器配置 | 关键优化参数 |
|---|---|---|
| 小规模(<100MB / 天) | 2 核 4GB 内存 | 单节点部署,默认配置 |
| 中规模(100MB-10GB / 天) | 4 核 8GB 内存 | Logstash workers=4,Elasticsearch 堆大小 4GB |
| 大规模(10GB-100GB / 天) | 8 核 16GB 内存 | 集群部署,启用消息队列 |
| 超大规模(>100GB / 天) | 多节点集群 | 分布式架构,冷热节点分离 |
十一、总结
通过本指南的详细步骤,可在 Ubuntu 24.04 服务器上部署了完整的 ELFK 日志收集系统。这个系统能够实现:
-
集中式日志管理:将分散在各个服务器上的日志统一收集和管理
-
实时日志分析:通过 Elasticsearch 的近实时搜索能力,快速定位问题
-
可视化监控:使用 Kibana 创建仪表盘,直观展示系统运行状态
-
灵活的日志处理:通过 Logstash 的插件化架构,可以处理各种格式的日志
-
轻量级采集:Filebeat 资源占用极低,适合大规模部署
在生产环境中使用时,建议根据实际需求进行性能优化和安全加固。同时,建立完善的监控和告警体系,确保系统的稳定运行。
ELFK 系统的强大之处不仅在于其功能的完整性,更在于其高度的可扩展性。您可以根据具体需求添加更多的 Beats 组件(如 Metricbeat 采集系统指标、Packetbeat 采集网络数据),或者集成其他系统(如 APM 应用性能监控),构建一个全方位的运维监控平台。
更多推荐



所有评论(0)