我们试图找到如何将来自AWS WAF / Kinesis Firehose的时间戳转换为Elasticsearch,以便其类型为日期字段。创建索引映射后,它具有时间戳记字段,但它是类型long
,即使类型epoch_millis
似乎有一个选项(也就是数据)。
Kibana界面说使用映射API更改字段类型,但我似乎无法弄清楚。示例here显示了如何创建新索引,但是kinesis正在创建/旋转索引,因此我们似乎需要一种方法来修改默认值。
该字段看起来像这样
"timestamp": {
"type": "long"
},
和完整的索引定义看起来像这样,但是它们都是定期创建的,因此我们试图找出如何更改默认值
"waf-prod-2018-10-05": {
"mappings": {
"waf-prod": {
"properties": {
"action": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"formatVersion": {
"type": "long"
},
"httpRequest": {
"properties": {
"args": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"clientIp": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"country": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"headers": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"httpMethod": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"httpVersion": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"uri": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"httpSourceId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"httpSourceName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"nonTerminatingMatchingRules": {
"properties": {
"action": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"ruleId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"rateBasedRuleList": {
"properties": {
"limitKey": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"maxRateAllowed": {
"type": "long"
},
"rateBasedRuleId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"terminatingRuleId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"terminatingRuleType": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"timestamp": {
"type": "long"
},
"webaclId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
},
答案 0 :(得分:0)
只需将timestamp
格式添加到映射:
"timestamp": {
"type": "date",
"format": "epoch_millis"
}
答案 1 :(得分:0)
模板的代码取决于你的 ES 版本。 如果您使用的是 7.x 版本。 您需要删除字段(映射类型字段,在您的情况下由“waf-prod”调用)在属性之前和映射之后.你可以试试这样做(比如这是我在ES 7.x的配置):
PUT _template/template_waf-logs
{
"order": 0,
"index_patterns": [
"aws-waf-logs-detected-requests-*"
],
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "0",
"refresh_interval": "5s"
}
},
"mappings": {
"properties": {
"httpRequest": {
"properties": {
"clientIp": {
"type": "keyword",
"fields": {
"keyword": {
"type": "ip"
}
}
}
}
},
"timestamp": {
"type": "date",
"format": "epoch_millis"
}
}
}
}