logstash not mapping to values in indices - elasticsearch

I have a sample log
2016-12-28 16:40:53.290 [debug] <0.545.0> <<"{\"user_id\”:\”79\”,\”timestamp\":\"2016-12-28T11:10:26Z\",\"operation\":\"ver3 - Requested for recommended,verified handle information\",\"data\":\"\",\"content_id\":\"\",\"channel_id\":\"\"}">>
for which I have written a logstash grok filter
filter{
grok {
match => { "message" => "%{URIHOST} %{TIME} %{SYSLOG5424SD} <%{BASE16FLOAT}.0> <<%{QS}>>"}
}
}
in http://grokdebug.herokuapp.com/ everything is working fine and values are getting mapped with filter.
When I am pushing values with this filter into elastic search it's not getting mapped and in message only I am getting whole log as it is.
Please let me know if I am doing something wrong.

Your kibana screen shot isn't loading, but I'll take a guess: you're capturing patterns, but not naming the data into fields. Here's the difference:
%{TIME}
will look for that pattern in your data. The debugger will show "TIME" as having been parsed, but logstash won't create a field without being asked.
%{TIME:myTime}
will create the field (and you can see it working in the debugger).
You would need to do this for any matched pattern that you would like to save.

Related

Indexing Errors when using quarkus logging-gelf extension and ELK stack

I have setup logging like described in https://quarkus.io/guides/centralized-log-management with an ELK Stack using version 7.7.
My logstash pipeline looks like the proposed example:
input {
gelf {
port => 12201
}
}
output {
stdout {}
elasticsearch {
hosts => ["http://elasticsearch:9200"]
}
}
Most Messages are showing up in my Kibana using logstash.* as an Index pattern. But some Messages are dropped.
2020-05-28 15:30:36,565 INFO [io.quarkus] (Quarkus Main Thread) Quarkus 1.4.2.Final started in 38.335s. Listening on: http://0.0.0.0:8085
The Problem seems to be, that the fields MessageParam0, MessageParam1, MessageParam2 etc. are mapped to the type that first appeared in the logs but actually contain multiple datatypes. The Elasticsearch log shows Errors like ["org.elasticsearch.index.mapper.MapperParsingException: failed to parse field [MessageParam1].
Is there any way in the Quarkus logging-gelf extension to correctly map the values?
ELK can auto-create your Elasticsearch index mapping by looking at the first indexed document. This is a very convenient functionality, but it comes with some drawback.
For example, if you have a field that can contains numbers or strings, if the first document contains a number for this field, the mapping will be created with a number field so you will not be able to index a document containing a String inside this field ...
The only workaround for this is to create the mapping upfront (you can only defines the fields that causing the issue, the other fields will be created automatically).
This is an ELK issue, there is nothing we can do at Quarkus side.

Elasticsearch: Fields necessary for map visualization on Kibana

I want to make use of the geoip logstash plugin to get geolocation info about some IP addresses seen in my logs;
I also want to be able to visualize such info on kibana;
I am going through a short overview of the process;
What the tutorial does not mention, is what are the geoip.* fields necessary for producing the map visualizations;
I want to keep only the strictly necessary fields and discard the rest;
Will keeping only geoip.longtitute and geoip.latitude do the job?
edit: At this point in time I am just using
{ geoip { source => "my_incoming_ip" } }
in my logstash filter;
It turns out the following field is necessary for producing the map visualization
geoip.location {
"lat": 38.7163,
"lon": -78.1704
}
The others can be ommited (i.e. mutate/remove)

Why the icon identification's field is a '?' and not 't' like the official example is?

I am new on Kibana.
I have the following problem: The fields that I send to elasticsearch by logstash can not be used in many situations on "Visualizes" and I note that they are marked with a '?' and not a 't' like the official fields.
By official fields I refer to that defined by
filter => {message => "%{COMBINEDAPACHELOG}"}
on logstash.conf.
When I use:
filter => {"message" => "%{TIMESTAMP_ISO8601:timelog} %{INT:id} %{QUOTEDSTRING:status} %{NUMBER:rkey} %{QUOTEDSTRING:origin} %{QUOTEDSTRING:resource} %{QUOTEDSTRING:result} %{QUOTEDSTRING:statuselastic} %{QUOTEDSTRING:statusmongo} %{QUOTEDSTRING:statusmkp} %{QUOTEDSTRING:my_message} %{TIMESTAMP_ISO8601:created_at} %{TIMESTAMP_ISO8601:last_update}"}
So, my fields come marked with '?' and can not be used on "Visualizes".
Here is the prints:
I already try use "mapping" to set "type" property. But without success.
I tried edit the fields on "Management" -> "Index Patterns" too, but the fields marked by '?' also are not there.
Go into the settings for the index and hit the reload button in the upper right corner (right next to the red trashcan -- it says refresh field list if you hover over it). If fields are added to an index after you add it to kibana, kibana does not automatically see the new fields. You have to let it know that something has changed.

How to remove the json. prefix on my elasticsearch field

I use ELK to get some info on my rabbitmq stuff.
Here my conf logstash side
json {
source => "message"
}
But in kibana I have to prefix all my fields with json.xxx:
json.sender, json.sender.raw,json.programld, json.programId.raw ...
How can I not have this json.-prefix in my field names, so that I only have to have: sender, programId, etc.?
Best regards and thanks for your help !
Bonus question : what are all these .'raw' I must use in kibana ?
According to the doc:
By default it will place the parsed JSON in the root (top level) of
the Logstash event, but this filter can be configured to place the
JSON into any arbitrary event field, using the target configuration.
So it feels like your json is wrapped in a container named "json" or you're setting the "target" in logstash without showing us.
As for ".raw", the default elasticsearch mapping will analyze the data you put in a field, so changing "/var/log/messages" into three words: [var, log, messages]" which can make it hard to search. To keep you from having to worry about this at the beginning, logstash creates a ".raw" version of each string, which is not analyzed.
You'll eventually make your own mappings, and you can make the original field not_analyzed, so you won't need the .raw versions anymore.

Remove unnecessary fields in ElasticSearch

We are populating Elasticsearch via logstash. The thing is that I see some unnecessary fields that I had like to remove like for example:
#version
file
geoip
host
message
offset
tags
Is it possible to do this by defining/extending a dynamic template? If yes, how? If no, can we do this via logstash configuration?
Your help is much appreciated.
You can remove fields using really any logstash filter - when the filter succeeds, it will remove the field.
It makes sense to me to use mutate:
filter {
mutate {
remove_field => [ "file" ]
}
}
That said, most of these fields are incredibly useful and really should not be removed.

Resources