logstash -有条件地转换字段类型

gojuced7  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(197)

我继承了一个logstash配置,如下所示。我不想做大的改动,因为我不想破坏任何正在工作的东西。指标以json的日志形式发送,格式为-“metric”:“度量名称”,“值”:“int”。这一直运行得很好。但是,新指标的值中需要有一个字符串。它并不是真正的指标,而是用字符串表示处理的状态。根据以下过滤器,它将所有内容转换为整数,值中的任何字符串都将转换为0。要求是,如果值是字符串,则不应尝试转换。谢谢!

input {
      beats {
        port => 5044
      }
    }

    filter {
        grok {
           match => { "message" => "%{TIMESTAMP_ISO8601:ts} - M_%{DATA:task}_%{NUMBER:thread} - INFO - %{GREEDYDATA:jmetric}"}
           remove_field => [ "message", "ecs", "original", "agent", "log", "host", "path" ]
           break_on_match => false
        }

        if "_grokparsefailure" in [tags] {
            drop {}
        }

        date {
           match => ["ts", "ISO8601"]
           target => "@timestamp"
        }

        json {
            source => "jmetric"
            remove_field => "jmetric" 
        } 

        split {
            field => "points"
            add_field => {
                "metric" => "%{[points][metric]}"
                "value" => "%{[points][value]}"
            }
            remove_field => [ "points", "event", "tags", "ts", "stream", "input" ]
        }

        mutate {
            convert => { "value" => "integer" }
            convert => { "thread" => "integer" }
        }
    }
dohp0rv5

dohp0rv51#

即使你在logstash中处理事情,elasticsearch也会. -如果用默认值配置的话--进行动态Map,这可能会对你在logstash中的任何配置起作用。
请参阅Elasticsearch index templates
索引模板是在创建索引时通知Elasticsearch如何配置索引的一种方式。...索引模板可以包含组件模板的集合,也可以直接指定设置、Map和别名。
Map是pr index!这意味着当您应用新Map时,必须创建新索引。您可以“滚动”到新索引,或再次删除/导入数据。您的操作取决于您的数据、接收数据的方式等。ymmv...
无论如何,如果您的索引具有错误的Map,您将需要创建一个新的索引来获得新的Map。
PS!如果你有很多遗留数据,看看用于elasticsearch的reindex API。

相关问题