Search Elasticsearch for a previous log event and copy some fields from it into the current event. Below are two complete examples of how this filter might be used.
The first example uses the legacy 'query' parameter where the user is limited to
an Elasticsearch query_string.
Whenever logstash receives an "end" event, it uses this elasticsearch
filter to find the matching "start" event based on some operation identifier.
Then it copies the @timestamp field from the "start" event into a new field on
the "end" event. Finally, using a combination of the "date" filter and the
"ruby" filter, we calculate the time duration in hours between the two events.
if [type] == "end" {
elasticsearch {
hosts => ["es-server"]
query => "type:start AND operation:%{[opid]}"
fields => { "@timestamp" => "started" }
}
date {
match => ["[started]", "ISO8601"]
target => "[started]"
}
ruby {
code => "event.set('duration_hrs', (event.get('@timestamp') - event.get('started')) / 3600)"
}
}The example below reproduces the above example but utilises the query_template. This query_template represents a full Elasticsearch query DSL and supports the standard Logstash field substitution syntax. The example below issues the same query as the first example but uses the template shown.
if [type] == "end" {
elasticsearch {
hosts => ["es-server"]
query_template => "template.json"
fields => { "@timestamp" => "started" }
}
date {
match => ["[started]", "ISO8601"]
target => "[started]"
}
ruby {
code => "event.set('duration_hrs', (event.get('@timestamp') - event.get('started')) / 3600)"
}
}template.json:
{
"size": 1,
"sort" : [ { "@timestamp" : "desc" } ],
"query": {
"query_string": {
"query": "type:start AND operation:%{[opid]}"
}
},
"_source": ["@timestamp"]
}As illustrated above, through the use of 'opid', fields from the Logstash events can be referenced within the template. The template will be populated per event prior to being used to query Elasticsearch.
Notice also that when you use query_template, the Logstash attributes result_size
and sort will be ignored. They should be specified directly in the JSON
template, as shown in the example above.
Authentication to a secure Elasticsearch cluster is possible using one of the following options:
Authorization to a secure Elasticsearch cluster requires read permission at index level and monitoring permissions at cluster level.
The monitoring permission at cluster level is necessary to perform periodic connectivity checks.
This plugin supports the following configuration options plus the [plugins-filters-elasticsearch-common-options] described later.
| Setting | Input type | Required |
|---|---|---|
No |
||
No |
||
a valid filesystem path |
No |
|
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
||
No |
Also see [plugins-filters-elasticsearch-common-options] for a list of options supported by all filter plugins.
-
Value type is hash
-
Default value is
{}
Hash of aggregation names to copy from elasticsearch response into Logstash event fields
Example:
filter {
elasticsearch {
aggregation_fields => {
"my_agg_name" => "my_ls_field"
}
}
}-
Value type is password
-
There is no default value for this setting.
Authenticate using Elasticsearch API key. Note that this option also requires
enabling the ssl option.
Format is id:api_key where id and api_key are as returned by the
Elasticsearch {ref}/security-api-create-api-key.html[Create API key API].
-
Value type is path
-
There is no default value for this setting.
SSL Certificate Authority file
-
Value type is password
-
There is no default value for this setting.
Cloud authentication string ("<username>:<password>" format) is an alternative for the user/password pair.
For more info, check out the {logstash-ref}/connecting-to-cloud.html[Logstash-to-Cloud documentation].
-
Value type is string
-
There is no default value for this setting.
Cloud ID, from the Elastic Cloud web console. If set hosts should not be used.
For more info, check out the {logstash-ref}/connecting-to-cloud.html[Logstash-to-Cloud documentation].
-
Value type is hash
-
Default value is
{}
Hash of docinfo fields to copy from old event (found via elasticsearch) into new event
Example:
filter {
elasticsearch {
docinfo_fields => {
"_id" => "document_id"
"_index" => "document_index"
}
}
}-
Value type is array
-
Default value is
{}
An array of fields to copy from the old event (found via elasticsearch) into the new event, currently being processed.
In the following example, the values of @timestamp and event_id on the event
found via elasticsearch are copied to the current event’s
started and start_id fields, respectively:
fields => {
"@timestamp" => "started"
"event_id" => "start_id"
}-
Value type is array
-
Default value is
["localhost:9200"]
List of elasticsearch hosts to use for querying.
This option can accept an environment variable containing one or more hostnames separated by whitespace. Strings separated by whitespace are treated as separate entries.
Examples:
-
ES_HOSTS="es1.example.com es2.example.com:9201 es3.example.com:9201" -
ES_HOSTS="127.0.0.1:9200 127.0.0.2:9200" -
ES_HOSTS="http://127.0.0.1 http://127.0.0.2" -
ES_HOSTS="https://127.0.0.1:9200/mypath https://127.0.0.2:9200/mypath"
-
Value type is string
-
Default value is
""
Comma-delimited list of index names to search; use _all or empty string to perform the operation on all indices.
Field substitution (e.g. index-name-%{date_field}) is available
-
Value type is uri
-
There is no default value for this setting.
Set the address of a forward HTTP proxy.
An empty string is treated as if proxy was not set, and is useful when using
environment variables e.g. proxy ⇒ '${LS_PROXY:}'.
-
Value type is string
-
There is no default value for this setting.
Elasticsearch query string. More information is available in the {ref}/query-dsl-query-string-query.html#query-string-syntax[Elasticsearch query string documentation].
-
Value type is string
-
There is no default value for this setting.
File path to elasticsearch query in DSL format. More information is available in the {ref}/query-dsl.html[Elasticsearch query documentation].
-
Value type is string
-
Default value is
"@timestamp:desc"
Comma-delimited list of <field>:<direction> pairs that define the sort order
-
Value type is array
-
Default value is
["_elasticsearch_lookup_failure"]
Tags the event on failure to look up previous log event information. This can be used in later analysis.
-
Value type is string
-
There is no default value for this setting.
Basic Auth - username