elasticsearch - ES date_range 类型的logstash如何处理字段?
问题描述
这是目标 Elasticsearch 索引的映射:
"mappings": {
"_doc": {
"properties": {
"start_time": {
"format": "epoch_millis",
"type": "date"
},
"channel": {
"type": "keyword"
},
"end_time": {
"format": "epoch_millis",
"type": "date"
},
"range_time": {
"format": "epoch_millis",
"type": "date_range"
}
}
}
}
这是我相关的logstash配置文件:
filter {
mutate {
split => ["message", "|"]
add_field => {
"start_time" => "%{[message][1]}"
"end_time" => "%{[message][2]}"
"channel" => "%{[message][5]}"
**"range_time" => [
"%{[message][1]}",
"%{[message][2]}"
]**
}
remove_field => "message"
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => [ "localhost" ]
index => "test_live"
}
}
我的问题是如何编写 "range_time" => 部分 ([mutate][add_field][range_time]) 以将 date_range 类型数据发送到 ES。在控制台中,我得到了这样的输出:
{
"@timestamp" => 2021-04-19T01:46:40.617Z,
"start_time" => "20210401001401",
"end_time" => "20210401001408",
"range_time" => [
[0] "20210401001401",
[1] "20210401001408"
],
"host" => "localhost.localdomain",
"channel" => "SCTV-2",
"path" => "/**/",
"@version" => "1"
}
但是输出不能正确地将数据写入索引。我怎么能这样做?
解决方案
一个date_range
字段包含两个名为gte
和的字段lte
。
所以你只需要这样做:
add_field => {
...
"[range_time][gte]" => "%{[message][1]}"
"[range_time][lte]" => "%{[message][2]}"
}
推荐阅读
- node.js - Youtube.analytics.query api 给出禁止错误
- google-chrome - 如何阻止 CORB 阻止对以 CORS 标头响应的数据资源的请求?
- parameters - 在 r-markdown 中嵌入参数化的绘图对象
- c# - 如何在c#模型类中解析RDF本体(乌龟文件)
- html - 元素不想绝对定位,ag-Grid 中的自定义单元格编辑器
- ionic-framework - Vue-router 推送到命名视图
- c# - 找不到包“Microsoft.AspNet.WebApi.Client”.Net Core 2.2 的编译库位置
- yolo - 在 yolov3-tiny 上训练模型,但平均损失总是等于 -nan
- python-3.x - 用大名称命名文本文件时出错
- python - 如何为python中的所有print()输出设置前缀?