用于全局变化子索引模式的Logstash配置 [英] Logstash configuration to globally mutate sub index patterns

查看:20
本文介绍了用于全局变化子索引模式的Logstash配置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ELK堆栈,带有一些已配置的索引模式。作为内部需求的一部分,我需要将一个json对象(它是该索引模式的一部分)全局编辑为";string";。 到目前为止,这样的json对象是由许多子字段随机填充的,比如";date";、";temps";以及更多的子字段。 所有这些都由ELK自动管理,但我需要将它们全部处理并转换(强制转换)为&q;字符串&q;。

所以,基本配置如下:

type A: "long"
type B: "int"
type C: "string"
type D: "json object"

其中,类型D是嵌套的json对象,它包括(作为子字段)许多其他索引模式和字段,如(例如)";typeD.date";、";typeD.temps";、";typeD.explit";等等。

我需要将所有&typeD*";对象转换为字符串。 到目前为止,我尝试将.conf与logstash一起使用,但不起作用。我将在(多次)尝试后粘贴我的配置。我在自己的本地码头环境中尝试了所有这些配置。

我从中测试logstash的日志名为log_file.json,它包含许多采样行,还包括我要使用此变异操作全局编辑的索引模式。

input {
    file{
      type => "json"
      path => "/home/container/logstash/log_file.json"
      start_position => "beginning"
      sincedb_path => "/dev/null"
      codec => json
  }
}

filter {
   if [message] =~ /A{.+}z/ {
     json {
       source => "message"
    }

  json {
    source => "[message][typeD]"
}

  mutate {
    convert => ["typeD.*","string"]
}
  }
}

output {
  elasticsearch {
    hosts => "http://localhost:9200"
    index => "logstash-test-%{+yyyy.MM.dd}"
 }
  stdout{}
}

另外,通过Kibana登录后,我可以看到logstash已经正确创建并加载了(Conf)文件,但是它仍然无法将索引模式转换为字符串。

我需要知道哪些编辑是配置工作所必需的。logstash配置文件是否需要编辑?设置中是否有任何错误?

谢谢

推荐答案

您不能像convert => ["typeD.*","string"]那样进行通配符突变。你必须用递归函数编写一个Ruby过滤来迭代[TYPED]的所有内容。类似于

    ruby {
        code => '
            def stringify(object, name, event)
                if object == nil
                    event.set(name, "nil" )
                elsif object.kind_of?(Hash) and object != {}
                    object.each { |k, v| stringify(v, "#{name}[#{k}]", event) }
                elsif object.kind_of?(Array) and object != []
                    object.each_index { |i|
                        stringify(object[i], "#{name}[#{i}]", event)
                    }
                else
                    event.set(name, object.to_s)
                end
            end
            stringify(event.get("typeD"), "[typeD]", event)
        '
    }

也就是说,如果您要将数据发送到Elastic Search,最好在ElasticSearch中使用通配符匹配字段名的dynamic template执行此操作。

这篇关于用于全局变化子索引模式的Logstash配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆