事象
# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test1.conf
が起動している状態で
# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test2.conf
を起動すると以下のエラーメッセージが表示されてエラーとなる。
[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.
解決策
path.dataを明示的に指定して実行
# /usr/share/logstash/bin/logstash --path.data <ディレクトリ> -f /etc/logstash/conf.d/test2.conf
補足
パイプライン機能ではなく、インスタンスを分けてLogstashを起動する場合に「事象」で記載したようなケースが発生します。
エラーメッセージを読むと
と記載があります。
logstashコマンドのオプションにあるpath.dataをマニュアルで確認しました。
--path.data PATH
This should point to a writable directory. Logstash will use this directory whenever it needs to store data. Plugins will also have access to this path.
つまり、Logstashがデータを格納する際に使用するディレクトリを用意する必要があります。
デフォルトはlosstashディレクトリのlogstash.ymlの中に記載されていました。
path.data: /var/lib/logstash
該当ディレクトリを見ると確かにlogstashユーザに書き込み権限のあるディレクトリがありました。
$ ls -ld /var/lib/logstash drwxrwxr-x ... logstash logstash ... ... /var/lib/logstash
すでに起動中のインスタンスがこのディレクトリを利用しているので、
解決策にあるようにlogstashユーザに書き込み権限があるディレクトリを作成してそこを指定して起動します。
起動後、
が指定したディレクトリに作成されます。
終わりに
複数のインスタンスを起動する場合、このようにpath.dataを明示的に分ける必要があります。
同一事象でお困りの方の参考になれば幸いです。