将nginx访问日志字节转换为Kibana4中的数字

时间:2015-11-10 03:55:42

标签: elasticsearch logstash kibana-4

我想创建一个使用我的nginx访问日志中的数据发送的字节总数的可视化。在尝试创建“度量标准”可视化时,我不能将bytes字段用作总和,因为它是字符串类型。

enter image description here

我无法在设置下更改它。

如何将此字段类型更改为数字/字节类型?

这是我的nginx访问日志的logstash配置

filter {
  if [type] == "nginx-access" {
    grok {
      match => { "message" => "%{NGINXACCESS}" }
    }
    geoip {
      source => "clientip"
    }
    useragent {
      source => "agent"
      target => "useragent"
    }
  }
}

由于每个logstash索引都是作为索引创建的,我猜我需要在这里更改它。

我尝试添加

mutate {
  convert => { "bytes" => "integer" }
}

但它似乎没有什么区别。

1 个答案:

答案 0 :(得分:1)

使用映射配置字段类型,映射在索引级别配置,几乎不能更改。使用Logstash,因为每天都会创建一个新索引,所以如果您不想更改这些映射,请等待第二天或删除当前索引(如果可以的话)。

默认情况下,这些映射由Elasticsearch自动生成,具体取决于索引的JSON文档的语法和应用的索引模板:

# Type String
{"bytes":"123"}

# Type Integer
{"bytes":123}

最后有两个解决方案:

  • 调整Logstash,使其生成一个整数,让Elasticsearch猜测字段类型→使用mutate / convert过滤器
  • 调整Elasticsearch,强制文档类型bytes的字段nginx-accessinteger类型→使用索引模板:

索引模板API:

PUT _template/logstash-nginx-access
{
  "order": 1,
  "template": "logstash-*",
  "mappings": {
    "nginx-access": {
      "properties": {
        "bytes": {
          "type": "integer"
        }
      }
    }
  }
}