Поле гео.положение карты тайлов отсутствует при агрегации GeoHash в Kibana 4.0.1
Я пытаюсь заставить визуализацию карты тайлов работать в Kibana 4.0.1.
Я могу видеть geoip.location
данные в разделе "Обнаружение", но при переходе к "Визуализации их в виде карты листов" я выбираю Geo Coordinates
тип группы, затем тип агрегации GeoHash
тогда, когда я иду в Field
это пусто
- Кибана 4.0.1
- Logstash 1.4.2-1-2c0f5a1
- Elasticsearch 1.4.4
- Работает на Debian 7 64bit
Вот мой конфиг logstash:
input {
udp {
port => 5514
type => cisco
}
}
filter {
grok {
match => { "message" => "\<%{NUMBER:num}\>%{NUMBER:seq}: \*%{SYSLOGTIMESTAMP:date}: \%SEC-6-IPACCESSLOGP: list Internet\-In\-%{WORD:acl_ver} denied %{WORD:protocol} %{IP:src}\(%{NUMBER:sport}\) \-\> %{IP:dest}\(%{NUMBER:dport}\), %{INT:hitcnt}" }
add_tag => ["grok_match", "cisco_acl_message"]
remove_field => [ "message" ]
}
geoip {
source => "src"
target => "geoip"
add_tag => ["geoip"]
database => "/etc/logstash/GeoLiteCity.dat"
}
}
output {
elasticsearch {
host => localhost
index => [ "firewall-%{+YYYY.MM.DD}" ]
}
}
И это пример записи журнала:
{
"_index": "firewall-2015.04.105",
"_type": "cisco",
"_id": "dJhGF6RtQuGXtlBTRCu2mQ",
"_score": null,
"_source": {
"@version": "1",
"@timestamp": "2015-04-15T21:06:08.357Z",
"type": "cisco",
"host": "172.17.10.1",
"num": "190",
"seq": "1872",
"date": "Apr 15 21:08:05.878",
"acl_ver": "20150223",
"protocol": "tcp",
"src": "94.102.51.96",
"sport": "26820",
"dest": "12.34.56.78",
"dport": "5900",
"hitcnt": "1",
"tags": [
"grok_match",
"cisco_acl_message",
"geoip",
"_grokparsefailure",
"geoip"
],
"geoip": {
"ip": "94.102.51.96",
"country_code2": "NL",
"country_code3": "NLD",
"country_name": "Netherlands",
"continent_code": "EU",
"region_name": "07",
"city_name": "Amsterdam",
"postal_code": "1000",
"latitude": 52.349999999999994,
"longitude": 4.916699999999992,
"timezone": "Europe/Amsterdam",
"real_region_name": "Noord-Holland",
"location": [
4.916699999999992,
52.349999999999994
],
"coordinates": [
4.916699999999992,
52.349999999999994
]
}
},
"fields": {
"@timestamp": [
1429131968357
]
},
"sort": [
1429131968357
]
}
Есть идеи, что мне не хватает?
ОТВЕТ
После того, как Ален указал мне правильное направление, я начал смотреть на полевые отображения. Вот как я это сделал:
Сначала я проверил geoip
тип поля (мой индекс называется firewall*
)
curl http://localhost:9200/firewall*/_mapping/cisco/field/geoip.location?pretty
Это вернулось с:
{
"firewall-2015.04.107" : {
"mappings" : {
"cisco" : {
"geoip.location" : {
"full_name" : "geoip.location",
"mapping":{"location":{"type":"float"}}
}
}
}
}
}
float
тип расположение, поэтому я не могу добавить визуализацию карты плитки. Мне нужно изменить это на geo_point
,
После множества копаний я нашел один способ изменить отображение location
введите в geo_point
должен был использовать шаблон вывода. Я скопировал дефолт elasticsearch_templte.json
файл из
/opt/logstash/lib/logstash/outputs/elasticsearch/elasticsearch-template.json
в
/etc/logstash/templates/elasticsearch-firewall.json
Отредактируйте его и измените шаблон из logstash*
в firewall*
(или каков ваш шаблон имени индекса) "template" : "firewall*"
,
Отредактируйте файл конфигурации logstash и измените вывод на это:
output {
elasticsearch {
host => localhost
index => [ "firewall-%{+YYYY.MM.DD}" ]
template => "/etc/logstash/templates/elasticsearch-firewall.json"
template_name => "firewall"
}
}
Удалить firewall*
индекс.
ВНИМАНИЕ: Это удалит все ваши существующие данные для поиска! Если эти данные важны, вам нужно найти способ динамического изменения типа вашего поля без удаления индекса. Я видел упоминание об этом в поиске Google, поэтому я знаю, что это возможно.
curl -XDELETE http://localhost:9200/firewall*
Я перезапустил logstash и asticsearch после этого.
Как только я снова начал получать логи, я снова проверил отображение
curl http://localhost:9200/firewall*/_mapping/cisco/field/geoip.location?pretty
{
"firewall-2015.04.107" : {
"mappings" : {
"cisco" : {
"geoip.location" : {
"full_name" : "geoip.location",
"mapping":{"location":{"type":"geo_point"}}
}
}
}
}
}
Посмотрите, как тип местоположения сейчас geo_point
:-)
Теперь я могу добавить визуализацию Tile Map.
2 ответа
Кибана использует отображение поля, чтобы определить, является ли это географической точкой и, следовательно, может использоваться на карте.
Итак, вы должны проверить свое отображение и изменить поле на geo_point.
Смотрите док.
Просто хочу извлечь некоторую полезную информацию в отдельный ответ - может быть, она будет кому-то полезна.
Шаблон эластичного поиска Logstash соответствует только шаблонам с префиксом "logstash-". Вот почему поле geoip.location является двойным, а не geo_point, когда вы используете другое имя индекса (например, межсетевой экран *) без вашего собственного шаблона.
проверьте эту проблему, если вам нужна дополнительная информация - https://github.com/elastic/logstash/issues/3137