Logstash
Elastic’s JVM-based pipeline that takes events in, parses them with filters such as grok, and sends them on, most often to Elasticsearch.
- What it is
- Logs
- Used for
- Observability
- Type
- Open source
- Made by
- Elastic N.V.
- License
- Apache 2.0 (core and plugins);
x-packcode under the Elastic License, included in the default download but not in the-ossbuilds - Facts checked
- 6 October 2026
What it is
Logstash is a server process that runs pipelines of three stages. Inputs receive events (from Beats and Elastic Agent, files, syslog, Kafka, S3 or a scheduled SQL query), filters parse and enrich them, and outputs send them on, most often to Elasticsearch. The best-known filter is grok, which turns an unstructured log line into named fields using about 120 built-in regular-expression patterns. Worker threads, one per CPU core by default, take events from a queue in batches of 125 and run them through the filters and outputs. That queue lives in memory unless you switch on the persistent queue, which writes events to disk (up to 1 GB by default) so they survive a restart; it is not replicated, so it does not survive losing the disk.
Logstash runs on the JVM: its core is Java and JRuby, plugins are Ruby gems (over 200 of them), and the downloads bundle a Temurin 21 JDK. It is free to use. The repository mixes licences: code outside the x-pack folder is Apache 2.0, code inside it is under the Elastic License, and the default download contains both; builds with -oss in the name contain only the Apache 2.0 parts. Elastic’s 2021 move of Elasticsearch and Kibana to SSPL and the Elastic License, and the AGPL option it added for them in 2024, did not apply to Logstash. Some features, such as managing pipelines centrally from Kibana, need a paid Elastic subscription.
Why teams pick it
- Flexible parsing in one readable config:
grok,date,mutate,drop,cloneandgeoipfilters, with conditionals between them - The natural fit for Elasticsearch and Kibana; the
beatsinput, and its successorelastic_agent, receive data from Elastic’s own shippers - Over 200 plugins, including Kafka, S3, JDBC and Redis, each a separate gem that is released on its own
- The persistent queue gives at-least-once delivery through restarts and crashes, for inputs that acknowledge what they receive
- The core stayed Apache 2.0 through all of Elastic’s licence changes
Watch out for
- Heavy for running on every host: a JVM for which Elastic recommends a 4 to 8 GB heap in typical ingestion setups
- The default memory queue loses in-flight events if the machine fails; the persistent queue is off by default, cannot protect inputs without acknowledgements (TCP, UDP), and is not replicated
- Mixed licensing to keep track of: the default download includes Elastic License code, the
-ossbuild drops everyx-packfeature, and centralized pipeline management needs a subscription - Grok patterns are regular expressions, so parsing a new log format means writing and testing patterns by hand
Alternatives
What all logs have in common →How it fits with other technologies
What Logstash uses
Parse web server logs from Beats, then index them and copy them to Kafka · bash
cat > /etc/logstash/conf.d/web.conf <<'EOF'
input {
beats { port => 5044 }
}
filter {
grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
date { match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] } # use the log’s own time
}
output {
elasticsearch { hosts => ["https://es.internal:9200"] }
kafka { bootstrap_servers => "kafka:9092" topic_id => "web-access" codec => json }
}
EOF
# keep queued events on disk across restarts (off by default)
echo 'queue.type: persisted' >> /etc/logstash/logstash.yml
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/web.conf --config.test_and_exit
sudo systemctl restart logstashChoosing a telemetry agent#
All five read from many sources, change data in flight and write it to many destinations. They differ in runtime, in the shape of data they were built around, and in who steers them.
| Fluentd | Logstash | Telegraf | OpenTelemetry Collector | Vector | |
|---|---|---|---|---|---|
| Written in | C and Ruby | Java and JRuby; downloads bundle a JDK | Go; one static binary | Go | Rust |
| Licence | Apache 2.0 | Apache 2.0, plus x-pack features under the Elastic License | MIT | Apache 2.0 | MPL 2.0 |
| Steward | CNCF (graduated 2019) | Elastic | InfluxData | CNCF (graduated 2026) | Datadog (bought its maker, Timber, in 2021) |
| Built around | Log events: tag, time, JSON record | Events of any shape, mostly logs | Metrics: measurement, tags, fields, time | Traces, metrics and logs in OTLP | Logs and metrics |
| Config | Own syntax: <source>, <filter>, <match> | Own DSL: input, filter, output | TOML | YAML | YAML, TOML or JSON |
| Plugins | 1,000+ external Ruby gems | 200+ Ruby gems | 400+ compiled in; others run as external programs via execd | Core and contrib distributions, or build your own with OCB | Built-in sources, transforms and sinks; VRL for custom logic |
| Buffer by default, and the durable option | Memory or file, chosen per output | Memory; persistent queue on disk is opt-in | Memory; disk buffer is experimental (since 1.32) | Memory; persistent queue with the file_storage extension | Memory (500 events per sink); disk buffer optional |
Which parts are open source#
Logstash is often lumped in with Elasticsearch’s licence changes. The repository’s LICENSE.txt says what applies today.
Core and plugins
Apache 2.0Every file outside the x-pack folder is Apache 2.0 unless it says otherwise. Plugins live in their own repositories under logstash-plugins and ship as Ruby gems.
The `x-pack` folder
Elastic LicenseElastic’s extra features, such as monitoring, central pipeline management and GeoIP database management, merged into the repository in April 2018. Their source is readable, but under the Elastic License, not an open-source licence.
Default download
bothContains the Apache 2.0 code and the x-pack code. Free features are on by default; subscription features, such as centralized pipeline management, need a paid licence or a 30-day trial.
`-oss` download
Apache 2.0 onlyElastic still publishes these builds (9.5.4 in September 2026). They include only Apache 2.0 features.
2021 and 2024
no changeIn January 2021 Elasticsearch and Kibana moved from Apache 2.0 to SSPL and the Elastic License, and in 2024 Elastic added AGPL as a third option for them. Elastic’s licensing FAQ says the changes covered only Elasticsearch and Kibana, and that Logstash and Beats remain Apache 2.0.
See it in a real stack
No architecture uses Logstash yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2009–2021
Jordan Sissel, who had worked at Google, Loggly and Heroku, started Logstash as an open-source project in 2009; the first prototype commit, by Pete Fritchman, is from August that year. The idea was a generic event processor: a log could be any timestamped piece of data, and inputs, filters and outputs could be combined freely. It was written in Ruby, with a short text config in three stages that made it easy to move data from any source to any destination.
Sissel says he designed Logstash from day one to work with Elasticsearch and Kibana, and the three became known as the ELK stack. In August 2013 he joined Elasticsearch, the company, which began selling support for Logstash the same day, alongside the release of Logstash 1.2.
JRuby became Logstash’s usual runtime for speed and for Java libraries, but crossing between Ruby and Java cost CPU and memory, so Elastic moved the internals to Java. A Java execution engine, previewed in 6.3 in 2018, became the default in 7.0 in 2019. When Elasticsearch and Kibana left Apache 2.0 in 2021, Logstash’s core stayed.
Why it’s built this way
- Three stages: input, filter, output
- Sissel wanted a generic system where any input, processing step and output could be composed. The simple model and text config proved a friendly way to get data from point A to point B.
- Built for Elasticsearch
- Sissel says he designed it from day one to work with Elasticsearch and Kibana: Logstash pulls events off systems, Elasticsearch stores and searches them, and Kibana charts the results.
- Run on JRuby, then move the core to Java
- JRuby gave Ruby code the JVM’s speed and its libraries. As more plugins were written in Java, compiling pipelines to JVM bytecode removed the cost of crossing between the two languages and cut startup and reload times.
Timeline
- 2009
Jordan Sissel starts Logstash; first prototype commit in August
- 2011
v1.0.0 tagged in May
- 2013
Sissel joins Elasticsearch in August; Logstash 1.2 released
- 2018
X-Pack source opens under the Elastic License and moves into the repository
- 2019
Logstash 7.0 makes the Java execution engine the default
- 2021
Elasticsearch and Kibana leave Apache 2.0; Logstash does not
- Elasticsearch press release: hiring Jordan Sissel, creator of Logstash (August 2013) · archived copy, original
- GitHub: first Logstash prototype commit (August 2009)
- GitHub: Logstash v1.0.0 tag (May 2011)
- Elastic blog: Logstash 7.0.0 released, by João Duarte (April 2019)
- Elastic blog: Meet the new Logstash Java execution engine, by Dan Hermann (June 2018)
- Elastic blog: Doubling down on open, by Shay Banon (February 2018)
- GitHub: Migrate x-pack-logstash source to logstash (April 2018)
- Elastic blog: Doubling down on open, Part II, by Shay Banon (January 2021)
Sources40 · facts checked 6 October 2026
- Logstash docs: How Logstash works (inputs, filters, outputs, codecs)
- Logstash docs: Memory queue (batch size 125, workers per core, lost on failure)
- Logstash docs: Persistent queues (off by default, 1 GB, not replicated)
- Logstash docs: JVM settings (4 to 8 GB heap)
- Logstash docs: Getting started (bundled Temurin 21 JDK)
- Logstash docs: Centralized pipeline management (subscription feature)
- Logstash docs: Grok filter (about 120 patterns, Oniguruma)
- Logstash docs: Date filter
- Logstash docs: Beats input (port 5044)
- Logstash docs: Elastic Agent input
- Logstash docs: Kafka integration plugin
- Logstash docs: Kafka output
- Logstash docs: S3 input
- Logstash docs: S3 output
- Logstash docs: JDBC input
- Logstash docs: Redis input
- logstash-patterns-core: ECS `COMBINEDAPACHELOG` pattern
- Logstash README (200+ plugins, one gem per plugin)
- Logstash LICENSE.txt (Apache 2.0 outside `x-pack`, Elastic License inside, `-oss` builds)
- Logstash licenses/ELASTIC-LICENSE.txt
- Elastic: Logstash OSS download (Apache 2.0 features only)
- Elastic: Licensing FAQ (Logstash and Beats remain Apache 2.0)
- Elastic blog: Doubling down on open, Part II (January 2021)
- Elastic blog: Elasticsearch is open source again, by Shay Banon (August 2024)
- Fluent Bit manual: Fluentd and Fluent Bit (Fluentd figures)
- Fluentd docs: Buffer plugins
- Fluentd docs: Config file syntax
- CNCF: Fluentd graduation announcement (April 2019)
- Telegraf docs (400+ plugins)
- Telegraf docs: Metrics (InfluxDB data model)
- Telegraf docs: External plugins (`execd`)
- Telegraf changelog: v1.32.0 adds an experimental disk buffer
- OpenTelemetry docs: Collector distributions and OCB
- OpenTelemetry Collector: exporterhelper (sending queue and persistent storage)
- CNCF: OpenTelemetry graduation announcement (May 2026)
- Vector README (Rust; logs, metrics, traces “coming soon”)
- Vector docs: Data model
- Vector docs: Buffering model
- Vector docs: Configuration (YAML, TOML, JSON)
- Datadog press release: Datadog acquires Timber Technologies (February 2021)