Logstash Error: 'Unable to reload pipeline' — Cause, Fix, and Troubleshooting Guide
Fix Logstash 'Unable to reload pipeline': validate the new config with -t and handle non-reloadable plugins before auto-reload.
- #logstash
- #logging
- #troubleshooting
- #errors
Fixing errors like this? Get 500 free DevOps AI prompts
500 copy-paste AI prompts for the stack you actually run — one PDF, free.
Overview
With config.reload.automatic: true (or when you send the process a SIGHUP), Logstash periodically re-reads its pipeline configuration and, if the files changed, swaps in a new pipeline without a full restart. The swap is not always possible. When it fails, the old pipeline keeps running and the agent logs the reason it could not reload:
[ERROR][logstash.agent][main] Unable to reload pipeline {:pipeline_id=>"main", :error=>"Cannot reload pipeline, because the existing pipeline is not reloadable", ...}
You will often see the accompanying action-level error naming the reload that failed:
[ERROR][logstash.agent] Failed to execute action {:action=>LogStash::PipelineAction::Reload ...}
There are two failure modes behind this message. The first is a bad new config: the changed file is syntactically invalid, so the reload is rejected and the previous good pipeline continues untouched. The second is a non-reloadable pipeline: at least one plugin in the running pipeline cannot be hot-swapped (stdin is the classic example), which marks the whole pipeline non-reloadable regardless of what you changed.
Symptoms
Unable to reload pipelinewitherror=>"...existing pipeline is not reloadable"inlogstash-plain.log.- A companion
Failed to execute action {:action=>LogStash::PipelineAction::Reload ...}line. - You edited a
.conffile and the change never takes effect, even thoughconfig.reload.automaticis on. - Auto-reload works for most pipelines but one specific pipeline never picks up changes.
- The monitoring API reports
"reloadable" : falsefor the affected pipeline.
Common Root Causes
- Invalid new configuration — a syntax error (unbalanced braces, unknown setting, bad conditional) in the edited file; the reload is rejected and the old pipeline stays live.
- A non-reloadable plugin in the pipeline — inputs like
stdin, and certain other plugins, do not support hot reload, so the pipeline is flagged non-reloadable as a whole. - A plugin that changes identity on reload — some settings cannot be altered live and require the plugin to be re-instantiated, which reload cannot do safely.
- Reload interval too aggressive — a very short
config.reload.intervalpicks up a file mid-edit (half-written), producing transient parse failures on every save. - Filesystem/glob picking up partial files — editors writing
.swp/temp files into the watchedconf.ddirectory get read as config and fail to parse.
How to diagnose
Never let auto-reload be the first thing that sees your new config. Validate it explicitly with -t (--config.test_and_exit) before it can be picked up:
sudo -u logstash /usr/share/logstash/bin/logstash \
-f /etc/logstash/conf.d/main.conf \
--config.test_and_exit --path.settings /etc/logstash
# Configuration OK <- must see this before deploying
Ask the monitoring API whether the running pipeline even claims to be reloadable. If reloadable is false, no valid config change will hot-swap:
curl -s localhost:9600/_node/pipelines?pretty | grep -A5 '"reloadable"'
# "reloadable" : false <- a non-reloadable plugin is present
Confirm which reload mode is in effect and how often it fires:
# logstash.yml
config.reload.automatic: true
config.reload.interval: 3s
Watch the log while you touch the config so you catch the exact reason — parse error versus non-reloadable:
sudo tail -f /var/log/logstash/logstash-plain.log | grep -Ei 'reload|PipelineAction'
If the pipeline is non-reloadable, identify the offending plugin. A stdin input, for example, makes the whole pipeline non-reloadable:
input {
stdin { } # not reloadable — forces a full restart to change
}
Fixes
Gate every deploy behind -t. The most common cause is a syntax error in the new file; a mandatory validation step removes it entirely. Wire it into your config-management or CI step:
sudo -u logstash /usr/share/logstash/bin/logstash \
-f /etc/logstash/conf.d/ \
--config.test_and_exit --path.settings /etc/logstash \
&& sudo systemctl reload logstash
For pipelines that use non-reloadable plugins, deploy with an explicit restart instead of relying on auto-reload. Do not fight the reload system — restart the pipeline (or the service) when you know a hot swap is impossible:
sudo systemctl restart logstash
Keep config.reload.interval sane so the watcher does not read half-written files. A few seconds is plenty; sub-second intervals invite transient parse failures:
# logstash.yml
config.reload.automatic: true
config.reload.interval: 3s
Write config atomically. Render to a temp file and mv it into place so the watcher only ever sees a complete file, and keep editor temp files out of conf.d:
install -m 0644 /tmp/main.conf.new /etc/logstash/conf.d/main.conf
What to watch out for
- The old pipeline keeps running on a failed reload. That is by design and is good — but it means a broken config can pass silently in logs while you believe your change is live. Confirm with the monitoring API.
reloadable: falseis a property of the plugins, not your edit. No amount of config-fixing will make astdin-bearing pipeline hot-swap; plan a restart.- Watch the watched directory. Editor swap files, backups, and half-written renders in
conf.dare read as config. Edit elsewhere and move the finished file in. - A too-short interval fights you. If you see intermittent parse errors that “fix themselves,” lengthen
config.reload.intervaland write atomically. systemctl reloadvsrestart. Reload triggers a hot swap (subject to the same rules); restart tears the pipeline down and back up. Use restart when the pipeline is non-reloadable.
Related
- Logstash ‘PipelineAction::Create’ failed to execute
- Logstash ‘Pipeline aborted due to error’
- Logstash ‘No configuration found’ pipeline error
Get 500 Battle-Tested DevOps AI Prompts — Free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.