我们有一个问题:我们正在使用带有转发器 filebeat 的 logstash。我们已经上传了 2100 万条日志,现在我们在 logstash 中的配置文件中进行了更改。我们不想删除所有数据并重新加载它,所以我们想知道是否有更新字段的方法。但是我们不想更新每个字段,只有在其中有特定内容的情况下。任何人都可以帮助我们并给出一个代码示例吗?谢谢你的帮助!
{
"_index": "logstash-2016.06.06",
"_type": "log",
"_id": "4f63b12b098bd5ff02de89e7057347c8ea39ae96",
"_score": null,
"_source": {
"message": "[06/Jun/2016:23:59:58 -0700] \"GET CFNetwork/758.4.3 Darwin/15.5.0\"",
"@version": "1",
"@timestamp": "2016-06-06T21:59:58.000Z",
"type": "log",
"fields": null,
"beat": {
"hostname": "xxx",
"name": "xxx"
},
"source": "xxx",
"offset": xxx,
"input_type": "log",
"count": 1,
"host": "xxx",
"iOSVersion": "Unknown",
"tags": [
"beats_input_codec_plain_applied"
],
"@uuid": "79e6a34e-13e4-9b5b-467b3a1f04fa",
"fingerprint": "xxx",
"logDate": "06/Jun/2016:23:59:58",
"timezone": "0700",
"httpRequest": "GET",
"network": "CFNetwork",
"CFNetworkNumber": "758.4.3",
"DarwinVersion": "Darwin",
"darwinVersionNumber": "15.5.0"
},
"fields": {
"@timestamp": [
1465250398000
]
},
"sort": [
1465250398000
]
}
因此,我们通过在 logstash 配置中的匹配表中使用 CFNetworkNumber 和 DarwinVersion 来获取 iOSVersion。在这个例子中,iOSVersion 是未知的,因为这个组合还没有在配置中。所以我想添加一个这个案例并更新那些文档,如果它是未知的,但在这个变化之后 cas 是已知的。所以我在 logstash 配置中添加的是:
else if [darwinVersionNumber] == "15.5.0" {
if[CFNetworkNumber] == "758.4.3" {
mutate{
gsub => ["iOSVersion", "Unknown", "9.3.2"]
}
}
}