在 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 官方迁移指南进行操作。

相关推荐
HealthScience2 小时前
Linux在一个容器中创建一个子用户
linux·运维·服务器
尽兴-2 小时前
Elasticsearch 生产集群最佳实践:模板治理、ILM 生命周期与运维体系
java·运维·elasticsearch·容量规划·ccs·分片设计
忘了ʷºᵇₐ8 小时前
在IDEA 2024.1版本中如何打开Remote Host及连接linux
linux·运维·服务器
upp12 小时前
[最新版本centos 10系统制作与安装]
linux·运维·centos
一战成名99612 小时前
ToDesk全球节点 vs TeamViewer、AnyDesk延迟与稳定性对比
运维·服务器·teamviewer
pupudawang14 小时前
Linux下安装Nginx服务及systemctl方式管理nginx详情
linux·运维·nginx
ipad协议开发14 小时前
视频号直播间全功能自动化场控插件开发指南:基于 API 调用的全链路拆解
运维·微信·自动化·视频·ipad
维度攻城狮14 小时前
Docker优雅地运行OpenClaw
运维·docker·容器·openclaw·openclaw安装
淼淼爱喝水15 小时前
openEuler 下 Ansible 基础命令详解与实操演示2
linux·运维·windows