Logstash Error Guide: 'Could not execute action: PipelineAction::Create' — Fix the Failing Pipeline Config
Fix Logstash 'Could not execute action: PipelineAction::Create': read the wrapped error, fix plugin syntax, missing plugins, and bad settings, then 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
When Logstash tries to instantiate a pipeline and the pipeline’s configuration cannot be compiled into a running graph, the converge loop reports a PipelineAction::Create failure:
[ERROR][logstash.agent] Failed to execute action
{:id=>:main, :action_type=>LogStash::ConvergeResult::FailedAction,
:message=>"Could not execute action: PipelineAction::Create<main>,
action_result: false", :backtrace=>nil}
This is a wrapper. The real cause is almost always a second line just above or below it — a ConfigurationError, a NoMethodError from a plugin’s register, a missing plugin, or an invalid setting. PipelineAction::Create failing simply means “the pipeline could not be built”; you must read the surrounding lines to learn why.
Symptoms
Failed to execute action ... PipelineAction::Create<pipeline_id>, action_result: falsein the log.- On startup, the pipeline never reaches the
Pipeline startedline for thatpipeline.id. - During a hot config reload (
--config.reload.automaticorSIGHUP), the running pipeline keeps working but the new version fails to converge. _node/pipelinesshows the pipeline missing or in a failed state.- Multiple pipelines defined and only one fails to create, leaving a partial deployment.
Common Root Causes
- Configuration syntax error — an unclosed brace, a missing
=>, or an invalid conditional in the.conf. - Unknown or uninstalled plugin — a
filter/outputreferencing a plugin not present inbin/logstash-plugin list. - Invalid plugin settings — a required option missing, a wrong type, or a value the plugin rejects in
register. - Bad
pipelines.ymlsettings — an invalidpipeline.workersvalue, a duplicatepipeline.id, or a malformed YAML entry. - Environment variable not resolved —
${ES_HOST}referenced without the variable set, producing an empty/invalid value. - Reload of a broken config — automatic reload picked up a file mid-edit that does not compile.
Diagnostic Workflow
Read the lines immediately around the PipelineAction::Create message — the true error is there:
grep -B3 -A15 'PipelineAction::Create' /var/log/logstash/logstash-plain.log | tail -40
Validate the configuration with the config test, which surfaces the underlying ConfigurationError clearly:
sudo -u logstash /usr/share/logstash/bin/logstash \
--path.settings /etc/logstash --config.test_and_exit
Check that every referenced plugin is installed:
/usr/share/logstash/bin/logstash-plugin list | grep -E 'kafka|jdbc|http|s3'
Inspect pipelines.yml for duplicate IDs or invalid settings:
# /etc/logstash/pipelines.yml — a duplicate pipeline.id causes Create to fail
- pipeline.id: main
path.config: "/etc/logstash/conf.d/main.conf"
pipeline.workers: 4
- pipeline.id: main # DUPLICATE -> PipelineAction::Create fails
path.config: "/etc/logstash/conf.d/extra.conf"
Confirm environment variables used in the config are actually present for the service user:
systemctl show logstash -p Environment
sudo -u logstash bash -c 'echo "ES_HOST=$ES_HOST"'
After fixing, reload without a full restart and verify convergence:
kill -SIGHUP $(pgrep -f org.logstash.Logstash) # if config.reload.automatic is off
curl -s localhost:9600/_node/pipelines?pretty | grep -A2 '"main"'
Example Root Cause Analysis
A pipeline that worked in staging failed in production with Could not execute action: PipelineAction::Create<main>, action_result: false. The wrapper alone was uninformative, so the operator ran --config.test_and_exit and got the real message: Couldn't find any output plugin named 'elasticsearch_data_stream'. Are you sure this is correct?
Staging had a newer Logstash with the data-stream output; production ran an older build where that plugin name did not exist. logstash-plugin list | grep elasticsearch confirmed only logstash-output-elasticsearch was installed. Rather than downgrade the config, they set data_stream => true on the standard elasticsearch output (supported in the installed version) instead of the nonexistent plugin name. --config.test_and_exit passed, a SIGHUP reloaded the pipeline, and _node/pipelines showed main running.
Prevention Best Practices
- Never read
PipelineAction::Createin isolation — always grep the surrounding lines or run--config.test_and_exitfor the underlying error. - Gate every deploy with
logstash --config.test_and_exitin CI so syntax errors and missing plugins fail the build, not the node. - Pin plugin versions and keep the installed plugin set identical across environments to avoid “unknown plugin” surprises.
- Validate
pipelines.ymlfor duplicatepipeline.idvalues and correct types before rollout. - Provide all referenced environment variables via the systemd unit or an
EnvironmentFile, and fail fast if a required one is empty. - When using automatic reload, edit configs atomically (write to a temp file and
mv) so the reloader never sees a half-written, non-compiling file.
Quick Command Reference
# Find the REAL error behind the wrapper
grep -B3 -A15 'PipelineAction::Create' /var/log/logstash/logstash-plain.log | tail -40
# Validate config offline
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
# Confirm plugins are installed
/usr/share/logstash/bin/logstash-plugin list
# Check env vars the config depends on
systemctl show logstash -p Environment
# Reload and verify convergence
kill -SIGHUP $(pgrep -f org.logstash.Logstash)
curl -s localhost:9600/_node/pipelines?pretty
Conclusion
Could not execute action: PipelineAction::Create is a wrapper meaning “the pipeline could not be built” — the actionable error is always in the adjacent log lines or exposed by --config.test_and_exit. Typical culprits are config syntax errors, uninstalled or misnamed plugins, invalid plugin settings, duplicate pipeline.ids, and unresolved environment variables. Make logstash -t a required gate in your deploy pipeline and keep plugin sets consistent across environments, and this converge failure stops reaching production.
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.