我正在尝试使用kibana-4地理地图来处理ELB日志
当我点击发现标签时,我可以清楚地看到一个字段geoip.location,其值为[lat,lon] 但当我点击可视化标签 - >平铺地图 - >新搜索 - >地理坐标 我得到一个错误(没有显示任何错误我还检查了kibana日志 - 但没有任何东西)
我检查了检查元素 - 也没有检查
然后我选择GeoHash,但该字段为空(当我点击它的空白时带有一个复选图标)
我怎样才能看出错误是什么? 如何让这张地图发挥作用?
我的配置是:
input {
file {
path => "/logstash_data/logs/elb/**/*"
exclude => "*.gz"
type => "elb"
start_position => "beginning"
sincedb_path => "log_sincedb"
}
}
filter {
if [type] == "elb" {
grok {
match => [
"message", '%{TIMESTAMP_ISO8601:timestamp} %{NGUSERNAME:loadbalancer} %{IP:client_ip}:%{POSINT:client_port} (%{IP:backend_ip}:%{POSINT:backend_port}|-) %{NUMBER:request_processing_time} %{NUMBER:backend_processing_time} %{NUMBER:response_processing_time} %{POSINT:elb_status_code} %{INT:backend_status_code} %{NUMBER:received_bytes} %{NUMBER:sent_bytes} \\?"%{WORD:method} https?://%{WORD:request_subdomain}.server.com:%{POSINT:request_port}%{URIPATH:request_path}(?:%{URIPARAM:query_string})? %{NOTSPACE}"'
]
}
date {
match => [ "timestamp", "ISO8601" ]
target => "@timestamp"
}
if [query_string] {
kv {
field_split => "&?"
source => "query_string"
prefix => "query_string_"
}
mutate {
remove => [ "query_string" ]
}
}
if [client_ip] {
geoip {
source => "client_ip"
add_tag => [ "geoip" ]
}
}
if [timestamp] {
ruby { code => "event['log_timestamp'] = event['@timestamp'].strftime('%Y-%m-%d')"}
}
}
}
}
output {
elasticsearch {
cluster => "ElasticSearch"
host => "elasticsearch.server.com"
port => 9300
protocol => "node"
manage_template => true
template => "/etc/logstash/lib/logstash/outputs/elasticsearch/elasticsearch-template.json"
index => "elb-%{log_timestamp}"
}
}
答案 0 :(得分:1)
geo_ip索引在我的情况下不起作用,因为我的索引名称没有以logstash开头 -
如果您希望自定义索引名称获取geo-ip,则必须为该索引名称创建模板
弹出搜索的输出中的使用它
elasticsearch {
manage_template => true
template => "/etc/logstash/templates/custom_template.json"
}
您的模板应该如下所示
{
"template" : "index_name-*",
"settings" : {
"index.refresh_interval" : "5s"
},
"mappings" : {
"_default_" : {
"_all" : {"enabled" : true, "omit_norms" : true},
"dynamic_templates" : [ {
"message_field" : {
"match" : "message",
"match_mapping_type" : "string",
"mapping" : {
"type" : "string", "index" : "analyzed", "omit_norms" : true
}
}
}, {
"string_fields" : {
"match" : "*",
"match_mapping_type" : "string",
"mapping" : {
"type" : "string", "index" : "analyzed", "omit_norms" : true,
"fields" : {
"raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256}
}
}
}
} ],
"properties" : {
"@version": { "type": "string", "index": "not_analyzed" },
"geoip" : {
"type" : "object",
"dynamic": true,
"properties" : {
"location" : { "type" : "geo_point" }
}
}
}
}
}
}
答案 1 :(得分:0)
在我们的地图上,我们指定一个字段geoip.location,根据文档由geoip过滤器自动创建。
你能在发现中看到那个领域吗?如果没有,您可以尝试修改您的geoip过滤器
if [client_ip] {
geoip {
source => "client_ip"
add_tag => [ "geoip" ]
target => "geoip"
}
}
并查看您是否现在可以在新条目中看到geoip.location?
elasticsearch模板寻找" geoip"创建关联的geoip字段时的目标。
一旦我们创建了geoip.location,我们就可以在Kibana 4中使用以下步骤创建一个新地图。
Tile Map
'来自可视化类型列表geo coordinates
'存储桶类型 - 此时会标记错误 aggregation
'下拉菜单,选择' geohash
' field
'下拉菜单,选择' geoip.location
'