在编写项目时,由于之前已经有了一个完整的ELK日志分析,现在又有一个新的项目需要ELK,于是想再配置一个Logstash来专门处理新的日志
首先,编写了一个新的Logstash.conf文件
input {
kafka {
bootstrap_servers => "kafka:9092"
topics => ["spring_boot_logs"]
codec => "json"
}
}output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "spring_boot-logs-%{+YYYY.MM.dd}"
}
}
然后启动logstash,发现:
[2025-06-08T16:19:35,533] [FATAL] [logstash.runner] Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the "path.data" setting.

问题解析1. 冲突根源:
- Logstash 默认使用固定数据目录(
path.data,通常是安装目录下的data文件夹)。 - 当前已有一个 Logstash 进程占用了该目录,新实例无法访问同一目录导致冲突。
- 后果:
- Logstash 拒绝启动,报错后强制退出(
(SystemExit) exit),进程终止(退出代码 1)。
- Logstash 拒绝启动,报错后强制退出(
解决
因为不能干扰之前的日志处理,所以选择要为 Logstash 配置不同的数据目录,可以通过以下几种方式实现
- 使用命令行参数
--path.data:
/usr/local/logstash/logstash-9.0.1/bin/logstash --path.data=/path/to/new/data/directory
- 修改 logstash.yml 配置文件:
- 编辑
/usr/local/logstash/logstash-9.0.1/config/logstash.yml - 添加或修改以下行:
path.data: /path/to/new/data/directory
- 使用环境变量:
export LOGSTASH_PATH_DATA=/path/to/new/data/directory
/usr/local/logstash/logstash-9.0.1/bin/logstash
确保新指定的数据目录存在且 Logstash 用户有写入权限。每个 Logstash 实例应使用唯一的数据目录以避免冲突。
使用,命令行启动新的Logstash
记得要创建新的data目录
bin/logstash -f config/es-logstash.conf --path.data=/path/to/new/data/directory