在 Debian 上部署 ELK 7.17 完整指南

Elasticsearch 7.17 是 7.x 系列的最终维护版本,目前仍有大量生产环境集群运行此版本。本指南将详细介绍如何在 Debian 12/13 上完整部署 ELK 7.17 栈(Elasticsearch、Logstash、Kibana)。


环境要求

  • Debian 12(bookworm)或 Debian 13(trixie)
  • 至少 4GB 内存(默认堆内存占用约 2.4GB)
  • 开放端口:9200(Elasticsearch HTTP)、9300(Elasticsearch 传输)、5601(Kibana)、9600(Logstash)
  • 稳定的网络连接用于从 Elastic 仓库拉取包

添加 Elastic 7.x 仓库

导入 GPG 密钥并配置 APT 源:

bash 复制代码
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-7.x.gpg
echo "deb [signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update

安装配置 Elasticsearch

安装核心组件并调整配置:

bash 复制代码
sudo apt install -y elasticsearch

编辑主配置文件 /etc/elasticsearch/elasticsearch.yml

yaml 复制代码
cluster.name: elk-lab
node.name: node-1
network.host: 127.0.0.1
discovery.type: single-node

调整 JVM 堆内存(建议设置为可用内存的 50%):

bash 复制代码
sudo vi /etc/elasticsearch/jvm.options

修改以下参数:

复制代码
-Xms2g
-Xmx2g

启动服务并验证状态:

bash 复制代码
sudo systemctl enable --now elasticsearch
curl -s http://127.0.0.1:9200/_cluster/health?pretty

安装配置 Kibana

安装并修改配置文件 /etc/kibana/kibana.yml

yaml 复制代码
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://127.0.0.1:9200"]

启动服务并访问界面:

bash 复制代码
sudo systemctl enable --now kibana

通过浏览器访问 http://服务器IP:5601


安装配置 Logstash

安装后创建示例配置文件 /etc/logstash/conf.d/sample.conf

bash 复制代码
input {
  beats {
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
  }
}

启动服务:

bash 复制代码
sudo systemctl enable --now logstash

在 Debian 13 上安装 rsyslog

Debian 13 默认不包含 /var/log/syslog,需安装 rsyslog:

bash 复制代码
sudo apt install -y rsyslog
sudo systemctl enable --now rsyslog

安装后,rsyslog 会生成 /var/log/syslog 并开始记录日志。


创建 Syslog 管道

Logstash 管道配置文件位于 /etc/logstash/conf.d/,创建 syslog 管道:

bash 复制代码
sudo vi /etc/logstash/conf.d/syslog.conf

添加以下配置:

ruby 复制代码
input {
  file {
    path => "/var/log/syslog"
    start_position => "beginning"
    sincedb_path => "/var/lib/logstash/sincedb_syslog"
    type => "syslog"
  }
}

filter {
  grok {
    match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
  }
  date {
    match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
  }
}

output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
    index => "syslog-%{+YYYY.MM.dd}"
  }
}

为 Logstash 用户添加读取 syslog 的权限:

bash 复制代码
sudo usermod -aG adm logstash

启动并启用 Logstash:

bash 复制代码
sudo systemctl enable --now logstash

检查 Logstash 日志确认管道启动:

bash 复制代码
sudo journalctl -u logstash --no-pager -n 20

验证 Logstash 监控 API:

bash 复制代码
curl -s http://127.0.0.1:9600?pretty

检查 Elasticsearch 是否接收数据:

bash 复制代码
curl -s 'http://127.0.0.1:9200/_cat/indices?v'

在CentOS 7上安装ELK Stack

确认syslog索引数据已成功导入Elasticsearch,可通过以下命令检查索引状态:

复制代码
health status index                uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   syslog-2026.03.29    QwErTyUiOpAsDfGhJkLm   1   0       1847            0      1.1mb          1.1mb

在Kibana中配置索引模式

通过API快速创建索引模式:

bash 复制代码
curl -s -X POST "http://127.0.0.1:5601/api/saved_objects/index-pattern/syslog-*" \
  -H "kbn-xsrf: true" \
  -H "Content-Type: application/json" \
  -d '{"attributes":{"title":"syslog-*","timeFieldName":"@timestamp"}}'

登录Kibana网页界面,左侧菜单选择"Discover",选择已创建的syslog-*索引模式。可查看已解析的字段如syslog_programsyslog_hostname等。

命令行操作Elasticsearch

查看所有索引:

bash 复制代码
curl -s 'http://127.0.0.1:9200/_cat/indices?v&s=index'

搜索特定日志条目(如sshd):

bash 复制代码
curl -s 'http://127.0.0.1:9200/syslog-*/_search?pretty' \
  -H 'Content-Type: application/json' \
  -d '{"query":{"match":{"syslog_program":"sshd"}},"size":3}'

统计索引文档总数:

bash 复制代码
curl -s 'http://127.0.0.1:9200/syslog-*/_count?pretty'

日志源差异处理

对于不同Linux发行版:

  • Debian 12默认安装rsyslog,日志文件位于/var/log/syslog
  • Debian 13默认使用systemd-journald,需手动安装rsyslog或改用Filebeat采集journald日志

如需从journald直接采集日志,可参考Filebeat+Logstash的配置方案,其他组件(包名、配置文件路径等)在不同版本中保持相同。


安全加固建议

  1. 配置防火墙规则限制访问源IP
  2. 为 Elasticsearch 和 Kibana 启用基础认证
  3. 定期备份 /var/lib/elasticsearch 目录
  4. 监控系统日志 /var/log/elasticsearch/elk-lab.log

常见问题排查

  • 端口冲突 :检查 netstat -tulnp | grep <端口号>
  • 内存不足 :观察 journalctl -u elasticsearch 中的 OOM 错误
  • 启动超时 :增加 systemd 服务的 TimeoutStartSec 参数

该部署方案已通过 Debian 12/13 和 ELK 7.17.29 的完整测试验证。如需升级到 8.x 版本,建议参考 Elastic 官方迁移指南进行操作。

相关推荐
冷小鱼22 分钟前
从 Docker 到容器编排:框架选型与指令详解实战指南
运维·docker·容器·k8s·docker compose·docker swarm
nashane26 分钟前
HarmonyOS 6学习:解决无限循环动画被打断后“消失“的诡异问题
运维·nginx·harmonyos 5
csg110731 分钟前
智慧养殖篇(四):猪场自动化饲喂与疫病预警
运维·单片机·嵌入式硬件·物联网·自动化
原来是猿36 分钟前
Linux - 【理解进程组、会话与作业控制】
linux·运维·服务器
程序员老邢1 小时前
【技术底稿 34】文件存储服务域名切换 & S3 兼容性问题全复盘
运维·文件存储·seaweedfs·程序员日常·技术底稿·s3兼容·线上问题复盘
码点滴2 小时前
用自然语言指挥 K8s 集群:AI 运维 Agent 的架构原理与可运行原型
运维·人工智能·kubernetes
2301_816374332 小时前
利用反向代理实现动静分离
运维
黄金矿工Kingliu2 小时前
Windows运行VMware蓝屏解决方案及网卡配置
运维·服务器
ziqi5222 小时前
Docker容器镜像管理、制作
运维·docker·容器
D4c-lovetrain2 小时前
Linux个人心得29(深入理解K8S Pod优先级与驱逐机制:从原理到实战踩坑)
linux·运维·kubernetes