0

我正在使用 fluent-bit 将日志转发到弹性数据库。我的所有字段都在默认字符串类型下以弹性索引,但我希望将一些字段索引为数字。

我试图通过向 docker 解析器和 json 解析器添加一个类型条目来在我的流利位配置中设置类型(不确定这里使用的是哪一个,这些是来自 k8s 集群的容器日志):

[PARSER]
Name   json
Format json
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
Types my_float_field:float my_integer_field:integer

[PARSER]
Name        docker
Format      json
Time_Key    time
Time_Format %Y-%m-%dT%H:%M:%S.%L
Time_Keep   On
Types my_float_field:float my_integer_field:integer

但是这些字段继续作为字符串类型出现在 ids log_processed.my_float_field 和 log_processed.my_integer_field 下的新弹性索引中。我确定我在做一些明显错误的事情,但我可以看到。

任何指针将不胜感激。

4

1 回答 1

0

使用Elasticsearch 索引模板

AFAIK JSON 解析器插件不支持“类型”参数。它保留原始 JSON 数据类型,因此如果my_float_field包含my_integer_field引用的值,JSON 解析器也会将它们解释为字符串。请参阅文档中的此示例

可以在默认解析器配置文件中找到的一个简单配置是解析 Docker 日志文件的条目(使用尾部输入插件时):

[PARSER]
    Name        docker
    Format      json
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S %z

以下日志条目是上面定义的解析器的有效内容:

{"key1": 12345, "key2": "abc", "time": "2006-07-28T13:22:04Z"}

处理后,它的内部表示将是:

[1154103724, {"key1"=>12345, "key2"=>"abc"}]

如果您在 Elasticsearch 输出插件中使用 Logstash 格式,您可以定义一个包含所需类型映射的Elasticsearch 索引模板。该模板将应用于每个新创建的索引(而不是现有索引)。Elasticsearch 7 中的格式发生了变化,因此请务必检查正确的文档版本。对于 7.7 版本:

PUT _template/template_1
{
  "index_patterns": ["fluent-bit-*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "my_float_field": {
        "type": "float"
      },
      "my_integer_field": {
        "type": "integer"
      }
    }
  }
}
于 2020-06-11T07:16:07.160 回答