[[config-management]]
== Configuration Management

Logstash provides configuration management features to make it easier for you to
manage updates to your configuration over time.

The topics in this section describe Logstash configuration management features
only. For information about other config management tools, such as Puppet and
Chef, see the documentation for those projects. Also take a look at the
https://forge.puppet.com/elastic/logstash[Logstash Puppet module documentation]. 

[role="xpack"]
[[logstash-centralized-pipeline-management]]
=== Centralized Pipeline Configuration Management

NOTE: Centralized pipeline configuration management is an {xpack} feature that
requires a paid {xpack} license. See the
https://www.elastic.co/subscriptions[Elastic Subscriptions] page for information
about obtaining a license.

The pipeline configuration management feature in {xpack} centralizes the
creation and management of Logstash configuration pipelines. From within the
pipeline management UI, you can control multiple Logstash instances. You can
add, edit, and delete pipeline configurations. On the Logstash side, you simply
need to register Logstash to use the centrally managed pipeline configurations. 

The pipeline configurations, along with some metadata, are stored in
Elasticsearch. Any changes that you make to a pipeline definition in the UI are
picked up and loaded automatically by all Logstash instances registered to use
the pipeline. The changes are applied immediately; you do not have to restart
Logstash to pick up the changes, as long as Logtash is already registered to
use the pipeline. 

To use centralized pipeline configuration management, you must install {xpack}
and specify the
{logstash-ref}/settings-xpack.html#configuration-management-settings[configuration management settings]
described under {logstash-ref}/setup-xpack.html[Setting up {xpack}].

IMPORTANT: After you've configured Logstash to use centralized pipeline
configuration management, you can no longer specify local pipeline
configurations. This means that the `pipelines.yml` file and settings like
`path.config` and `config.string` are inactive when this feature is enabled.

==== Pipeline management UI

To access the pipeline management UI, open {kib} in your browser and go to
the Management tab. If you've set up configuration management correctly, you'll
see an area for managing Logstash. Click the *Pipelines* link.

image::static/images/centralized_config.png[]

Here you can add, edit, or delete Logstash pipeline configurations.

To add a new pipeline, click the *Add* button and specify values for the
following fields:

[horizontal]
Pipeline ID::
A name that uniquely identifies the pipeline. You use this ID when you
{logstash-ref}/settings-xpack.html[configure {xpack}] and specify a list of
pipeline IDs in the `xpack.management.pipeline.id` setting.

Version::
A string value that you can use as metadata to track the version of the pipeline
configuration. For example, `v1.0.0`. This information is for your use. Logtash
doesn't currently manage or validate the version information.

Description::
A description of the pipeline configuration. This information is for your use.

Pipeline::
The pipeline configuration. You can treat the editor in the pipeline management
UI like any other editor. You don't have to worry about whitespace or indentation. 

image::static/images/new_pipeline.png[]

When you click *Save*, the pipeline runs on all Logstash instances that are
registered to use the pipeline. There is no validation done at the UI level.
The UI will save the new configuration, and Logstash will attempt to load it.
You need to check the local Logstash logs for configuration errors. If you're
using the Logstash monitoring feature in {xpack}, you can also navigate to the
Monitoring tab to check the status of your Logstash nodes.

You can specify multiple pipeline configurations that run in parallel on the
same Logstash node.

If you edit a pipeline configuration and save the changes, Logstash reloads
the configuration in the background and continues processing events.

If you delete a pipeline (for example, `apache`) from the UI, Logstash will
attempt to stop the pipeline if it's running. Logstash will wait until all
events have been fully processed by the pipeline. Before deleting a pipeline,
make sure you understand your data sources because stopping a pipeline may
lead to data loss. 
