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

相关推荐
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜4 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB5 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode7 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220707 天前
如何搭建本地yum源(上)
运维
大树8810 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠10 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质10 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务