ELK日志分析系统完整部署:从零搭建日志中心全流程
开始之前:确认环境与准备工作
在动手搭建 ELK日志分析系统完整部署 之前,先确认你的服务器满足以下条件:
- 操作系统:建议 CentOS 7.x 或 Ubuntu 20.04,本文以 CentOS 7 为例。
- 内存:至少 4GB,如果只是测试可以 2GB,但 Elasticsearch 会吃内存。
- Java 环境:Elasticsearch 依赖 JDK 8 或 11,推荐 OpenJDK 11。
- 关闭防火墙(测试环境):
systemctl stop firewalld && systemctl disable firewalld。生产环境请按需开放端口。 - 域名或 IP:准备好服务器公网 IP 或内网 IP,后面 Kibana 需要用。
需要安装的组件:
- Elasticsearch(存储与搜索日志)
- Logstash(收集与解析日志)
- Kibana(可视化展示)
建议顺序:Elasticsearch → Kibana → Logstash,因为 Kibana 和 Logstash 都要连接 ES。
第一步:安装并启动 Elasticsearch
Elasticsearch(简称 ES)是整个日志中心的核心,负责存储和检索。
1. 安装 GPG key 和仓库
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat > /etc/yum.repos.d/elastic.repo << 'EOF'
[elastic-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
2. 安装并启动
yum install -y elasticsearch
systemctl enable elasticsearch
systemctl start elasticsearch
3. 验证是否启动成功
curl -X GET 'http://localhost:9200'
如果返回带 cluster_name 和 version 的 JSON,说明 ES 正常运行。
注意:默认 ES 只监听本地地址,如果需要在其他机器访问,需要修改/etc/elasticsearch/elasticsearch.yml中的network.host: 0.0.0.0,并重启服务。生产环境建议绑定内网 IP 并启用 X-Pack 安全认证。
第二步:安装 Kibana 并连接到 ES
Kibana 是日志的可视化仪表盘,让非技术人员也能轻松查看日志。
1. 安装 Kibana
yum install -y kibana
2. 修改配置连接 ES
编辑 /etc/kibana/kibana.yml,修改以下两行:
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
server.host 设为 0.0.0.0 表示允许所有 IP 访问(生产建议绑定内网 IP)。
3. 启动 Kibana
systemctl enable kibana
systemctl start kibana
4. 验证访问
浏览器打开 http://你的服务器IP:5601,如果看到 Kibana 欢迎界面,说明安装成功。
如果无法访问,检查防火墙是否放行 5601 端口。
第三步:安装 Logstash 并配置日志采集
Logstash 负责从各种来源(文件、TCP、Syslog)采集日志,经过过滤后发送到 ES。
1. 安装 Logstash
yum install -y logstash
2. 创建一个简单的配置,监听系统日志文件
新建配置文件 /etc/logstash/conf.d/syslog.conf:
input {
file {
path => ["/var/log/messages"]
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "%{SYSLOGLINE}" }
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "syslog-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
说明:这里演示采集/var/log/messages(系统日志),grok过滤器可以自动解析常见日志格式。实际生产应用中,可根据日志格式自定义正则。
3. 启动 Logstash 并验证
systemctl enable logstash
systemctl start logstash
查看日志 /var/log/logstash/logstash-plain.log 确认无报错。
如果一切正常,几秒后 Kibana 即可添加索引 syslog-* 并看到数据。
常见问题与避坑指南
Q1:Elasticsearch 启动失败,提示 max virtual memory areas vm.max_map_count [65530] is too low?
解决方案:
临时执行 sysctl -w vm.max_map_count=262144,
永久写入 /etc/sysctl.conf 添加 vm.max_map_count=262144。
Q2:Kibana 无法连接到 Elasticsearch?
先确认 ES 是否正在运行:curl http://localhost:9200。
如果 ES 拒绝连接,检查 /etc/elasticsearch/elasticsearch.yml 中 network.host 是否设置正确,并重启 ES。
Q3:Logstash 采集不到日志?
确保 path 指向的文件存在且 Logstash 用户有读取权限(Logstash 默认以 logstash 用户运行)。
可以临时在 output 部分加上 stdout 调试,观察日志是否输入到控制台。
避坑要点
- 内存分配:ES 默认使用 1GB 堆内存,如果服务器只有 2GB,建议修改
/etc/elasticsearch/jvm.options中-Xms1g和-Xmx1g为 512m。 - 版本一致性:Elasticsearch、Kibana、Logstash 的版本必须严格一致(本文使用 7.x 最新版本),否则可能无法通信。
- 目录权限:Logstash 采集日志时,确保
/etc/logstash/conf.d/下的配置文件属主为logstash:logstash。
验证日志系统是否正常工作
1. 检查 ES 是否有新索引
curl -X GET 'http://localhost:9200/_cat/indices?v'
看到类似 syslog-2025.03.27 的索引即表示已成功接收 Logstash 发送的数据。
2. 在 Kibana 中查看日志
- 打开 Kibana (
http://IP:5601) - 点击左侧菜单
Discover - 第一次需要创建索引模式:输入
syslog-*,选择@timestamp作为时间字段 - 创建后即可看到实时日志,可以按关键字搜索、筛选
3. 写入测试日志验证
echo "test log entry from ELK setup" >> /var/log/messages
等待几秒后刷新 Kibana,应该能搜索到这条日志。
如果能看到,说明 ELK日志分析系统完整部署 顺利闭环。
总结
从环境准备到三组件安装,再到日志采集验证,你已经走完了 ELK日志分析系统完整部署 的全流程。
记住非生产环境务必做三点:修改 ES 和 Kibana 的 bind 地址(建议内网 IP)、启用 X-Pack 安全认证、定期清理旧索引(可用 Curator 或 ILM 策略)。
遇到问题优先回看本文的“常见问题与避坑指南”,希望这套教程能帮你快速落地一套实用的日志分析平台。