logstash/docs/static/deploying.asciidoc

254 lines
11 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[[deploying-and-scaling]]
== Deploying and Scaling Logstash
The Elastic Stack is used for tons of use cases, from operational log and
metrics analytics, to enterprise and application search. Making sure your data
gets scalably, durably, and securely transported to Elasticsearch is extremely
important, especially for mission critical environments.
The goal of this document is to highlight the most common architecture patterns
for Logstash and how to effectively scale as your deployment grows. The focus
will be around the operational log, metrics, and security analytics use cases
because they tend to require larger scale deployments. The deploying and scaling
recommendations provided here may vary based on your own requirements.
[float]
[[deploying-getting-started]]
=== Getting Started
For first time users, if you simply want to tail a log file to grasp the power
of the Elastic Stack, we recommend trying
{filebeat-ref}/filebeat-modules-overview.html[Filebeat Modules]. Filebeat Modules
enable you to quickly collect, parse, and index popular log types and view
pre-built Kibana dashboards within minutes.
{metricbeat-ref}/metricbeat-modules.html[Metricbeat Modules] provide a similar
experience, but with metrics data. In this context, Beats will ship data
directly to Elasticsearch where {ref}/ingest.html[Ingest Nodes] will process
and index your data.
image::static/images/deploy1.png[]
[float]
==== Introducing Logstash
What are the main benefits for integrating Logstash into your architecture?
* Scale through ingestion spikes - Logstash has an adaptive disk-based
buffering system that will absorb incoming throughput, therefore mitigating
backpressure
* Ingest from other data sources like databases, S3, or messaging queues
* Emit data to multiple destinations like S3, HDFS, or write to a file
* Compose more sophisticated processing pipelines with conditional dataflow logic
[float]
[[scaling-ingest]]
=== Scaling Ingest
Beats and Logstash make ingest awesome. Together, they provide a comprehensive
solution that is scalable and resilient. What can you expect?
* Horizontal scalability, high availability, and variable load handling
* Message durability with at-least-once delivery guarantees
* End-to-end secure transport with authentication and wire encryption
[float]
==== Beats and Logstash
Beats run across thousands of edge host servers, collecting, tailing, and
shipping logs to Logstash. Logstash serves as the centralized streaming
engine for data unification and enrichment. The
<<plugins-inputs-beats,Beats input plugin>> exposes a secure,
acknowledgement-based endpoint for Beats to send data to Logstash.
image::static/images/deploy2.png[]
NOTE: Enabling persistent queues is strongly recommended, and these
architecture characteristics assume that they are enabled. We encourage you to
review the <<persistent-queues>> documentation for feature benefits and more
details on resiliency.
[float]
==== Scalability
Logstash is horizontally scalable and can form groups of nodes running the same
pipeline. Logstashs adaptive buffering capabilities will facilitate smooth
streaming even through variable throughput loads. If the Logstash layer becomes
an ingestion bottleneck, simply add more nodes to scale out. Here are a few
general recommendations:
* Beats should {filebeat-ref}/load-balancing.html[load balance] across a group of
Logstash nodes.
* A minimum of two Logstash nodes are recommended for high availability.
* Its common to deploy just one Beats input per Logstash node, but multiple
Beats inputs can also be deployed per Logstash node to expose independent
endpoints for different data sources.
[float]
==== Resiliency
When using https://www.elastic.co/products/beats/filebeat[Filebeat] or
https://www.elastic.co/products/beats/winlogbeat[Winlogbeat] for log collection
within this ingest flow, *at-least-once delivery* is guaranteed. Both the
communication protocols, from Filebeat or Winlogbeat to Logstash, and from
Logstash to Elasticsearch, are synchronous and support acknowledgements. The
other Beats dont yet have support for acknowledgements.
Logstash persistent queues provide protection across node failures. For
disk-level resiliency in Logstash, its important to ensure disk redundancy.
For on-premise deployments, it's recommended that you configure RAID. When
running in the cloud or a containerized environment, its recommended that you
use persistent disks with replication strategies that reflect your data SLAs.
NOTE: Make sure `queue.checkpoint.writes: 1` is set for at-least-once
guarantees. For more details, see the
<<durability-persistent-queues,persistent queue durability>> documentation.
[float]
==== Processing
Logstash will commonly extract fields with <<plugins-filters-grok,grok>> or
<<plugins-filters-dissect,dissect>>, augment
<<plugins-filters-geoip,geographical>> info, and can further enrich events with
<<plugins-filters-translate,file>>, <<plugins-filters-jdbc_streaming,database>>,
or <<plugins-filters-elasticsearch,Elasticsearch>> lookup datasets. Be aware
that processing complexity can affect overall throughput and CPU utilization.
Make sure to check out the other <<filter-plugins,available filter plugins>>.
[float]
==== Secure Transport
Enterprise-grade security is available across the entire delivery chain.
* Wire encryption is recommended for both the transport from
{filebeat-ref}/configuring-ssl-logstash.html[Beats to Logstash] and from
{logstash-ref}/ls-security.html[Logstash to Elasticsearch].
* Theres a wealth of security options when communicating with Elasticsearch
including basic authentication, TLS, PKI, LDAP, AD, and other custom realms.
To enable Elasticsearch security, see
{ref}/secure-cluster.html[Secure a cluster].
[float]
==== Monitoring
When running Logstash 5.2 or greater,
the https://www.elastic.co/products/x-pack/monitoring[Monitoring UI] provides
deep visibility into your deployment metrics, helping observe performance and
alleviate bottlenecks as you scale. Monitoring is an X-Pack feature under the
Basic License and is therefore *free to use*. To get started, see
{logstash-ref}/monitoring-logstash.html[Monitoring Logstash].
If external monitoring is preferred, there are <<monitoring,Monitoring APIs>>
that return point-in-time metrics snapshots.
[float]
[[adding-other-sources]]
=== Adding Other Popular Sources
Users may have other mechanisms of collecting logging data, and its easy to
integrate and centralize them into the Elastic Stack. Lets walk through a few
scenarios:
image::static/images/deploy3.png[]
[float]
==== TCP, UDP, and HTTP Protocols
The TCP, UDP, and HTTP protocols are common ways to feed data into Logstash.
Logstash can expose endpoint listeners with the respective
<<plugins-inputs-tcp,TCP>>, <<plugins-inputs-udp,UDP>>, and
<<plugins-inputs-http,HTTP>> input plugins. The data sources enumerated below
are typically ingested through one of these three protocols.
NOTE: The TCP protocol does not support application-level acknowledgements, so
connectivity issues may result in data loss.
For high availability scenarios, a third-party hardware or software load
balancer, like HAProxy, should be added to fan out traffic to a group of
Logstash nodes.
[float]
==== Network and Security Data
Although Beats may already satisfy your data ingest use case, network and
security datasets come in a variety of forms. Lets touch on a few other
ingestion points.
* Network wire data - collect and analyze network traffic with
https://www.elastic.co/products/beats/packetbeat[Packetbeat].
* Netflow v5/v9/v10 - Logstash understands data from Netflow/IPFIX exporters
with the <<plugins-codecs-netflow,Netflow codec>>.
* Nmap - Logstash accepts and parses Nmap XML data with the
<<plugins-codecs-nmap,Nmap codec>>.
* SNMP trap - Logstash has a native <<plugins-inputs-snmptrap,SNMP trap input>>.
* CEF - Logstash accepts and parses CEF data from systems like Arcsight
SmartConnectors with the <<plugins-codecs-cef,CEF codec>>. See this
https://www.elastic.co/blog/integrating-elastic-stack-with-arcsight-siem-part-1[blog series]
for more details.
[float]
==== Centralized Syslog Servers
Existing syslog server technologies like rsyslog and syslog-ng generally send
syslog over to Logstash TCP or UDP endpoints for extraction, processing, and
persistence. If the data format conforms to RFC3164, it can be fed directly
to the <<plugins-inputs-syslog,Logstash syslog input>>.
[float]
==== Infrastructure & Application Data and IoT
Infrastructure and application metrics can be collected with
https://www.elastic.co/products/beats/metricbeat[Metricbeat], but applications
can also send webhooks to a Logstash HTTP input or have metrics polled from an
HTTP endpoint with the <<plugins-inputs-http_poller,HTTP poller input plugin>>.
For applications that log with log4j2, its recommended to use the
SocketAppender to send JSON to the Logstash TCP input. Alternatively, log4j2
can also log to a file for collection with FIlebeat. Usage of the log4j1
SocketAppender is not recommended.
IoT devices like Raspberry Pis, smartphones, and connected vehicles often send
telemetry data through one of these protocols.
[float]
[[integrating-with-messaging-queues]]
=== Integrating with Messaging Queues
If you are leveraging message queuing technologies as part of your existing
infrastructure, getting that data into the Elastic Stack is easy. For existing
users who are utilizing an external queuing layer like Redis or RabbitMQ just
for data buffering with Logstash, its recommended to use Logstash persistent
queues instead of an external queuing layer. This will help with overall ease
of management by removing an unnecessary layer of complexity in your ingest
architecture.
For users who want to integrate data from existing Kafka deployments or require
the underlying usage of ephemeral storage, Kafka can serve as a data hub where
Beats can persist to and Logstash nodes can consume from.
image::static/images/deploy4.png[]
The other TCP, UDP, and HTTP sources can persist to Kafka with Logstash as a
conduit to achieve high availability in lieu of a load balancer. A group of
Logstash nodes can then consume from topics with the
<<plugins-inputs-kafka,Kafka input>> to further transform and enrich the data in
transit.
[float]
==== Resiliency and Recovery
When Logstash consumes from Kafka, persistent queues should be enabled and will
add transport resiliency to mitigate the need for reprocessing during Logstash
node failures. In this context, its recommended to use the default persistent
queue disk allocation size `queue.max_bytes: 1GB`.
If Kafka is configured to retain data for an extended period of time, data can
be reprocessed from Kafka in the case of disaster recovery and reconciliation.
[float]
==== Other Messaging Queue Integrations
Although an additional queuing layer is not required, Logstash can consume from
a myriad of other message queuing technologies like
<<plugins-inputs-rabbitmq,RabbitMQ>> and <<plugins-inputs-redis,Redis>>. It also
supports ingestion from hosted queuing services like
<<plugins-inputs-google_pubsub,Pub/Sub>>, <<plugins-inputs-kinesis,Kinesis>>, and
<<plugins-inputs-sqs,SQS>>.