Получение метки времени от WAF/Kinesis до Elasticsearch
Мы пытаемся найти, как преобразовать временную метку из AWS WAF/Kinesis Firehose в Elasticsearch, чтобы ее тип был полем даты. Когда создается индексное отображение, оно имеет поле метки времени, но это тип long
, хотя, кажется, есть вариант для типа epoch_millis
(что это за данные).
Интерфейс Kibana говорит, что для изменения типа поля используется API-интерфейс сопоставления, но я не могу этого понять. Приведенный здесь пример показывает, как сделать это с созданием новых индексов, но 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
}
}
}
}
}
}
},
2 ответа
Код шаблона зависит от вашей версии 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"
}
}
}
}
- См. Документацию по AWS здесь: https://aws.amazon.com/blogs/security/how-to-analyze-aws-waf-logs-using-amazon-elasticsearch-service/
- Обновите свои знания ответом сообщества ES здесь: https://discuss.elastic.co/t/root-mapping-definition-has-unsupported-parameters-when-creating-custom-index/240690
- Пояснение к добавлению типа сопоставления : https://discuss.elastic.co/t/common-error-root-mapping-definition-has-unsupported-parameters/63300/2
- Объясняется версией ES: /questions/35616580/elasticsearch-opredelenie-kornevogo-sopostavleniya-imeet-nepodderzhivaemyie-parametryi-index-notanalyzed/35616588#35616588
Просто добавьте timestamp
формат для отображения:
"timestamp": {
"type": "date",
"format": "epoch_millis"
}