代码之家  ›  专栏  ›  技术社区  ›  PCL

从xml消息中删除前缀的日志存储

  •  0
  • PCL  · 技术社区  · 6 年前

    我使用logstash通过xml过滤器插件接收xml消息。考虑以下xml示例:

    <fruit.producer1:Apple>
        ...
    </fruit.producer1:Apple>
    <fruit.producer2:Apple>
        ...
    </fruit.producer2:Apple>
    

    我的过滤器配置如下:

    filter {
        xml {
            source => "message"
            force_array => false
            target => "fruit"
        }
    }
    

    发送到elasticsearch的过滤器后的结果是:

    ...
    "Apple": {
        ...
    },
    "Apple": {
        ...
    }
    ...
    

    如你所见,我无法区分 Apple producer1 producer2 . 我已经在过滤器配置中使用了remove\u namespaces设置,但是似乎什么都不起作用。如何确保在elasticsearch的输出中保留前缀信息?

    2 回复  |  直到 6 年前
        1
  •  0
  •   nitzien    6 年前

    在ElasticSearch2.0中,字段名中不允许使用点。可能这就是xml过滤器可能被这样编码的原因。您可以尝试添加另一个过滤器,将点改为下划线或其他内容。一个ruby过滤器应该在这里有帮助- https://discuss.elastic.co/t/field-name-cannot-contain/33251/38

        2
  •  0
  •   PCL    6 年前

    . : 在字段名中。解决方法是使用 gsub

    filter {
        mutate {
            gsub => [
                "message", "fruit.producer1:Apple", "fruit_producer1_Apple",
                "message", "fruit.producer2:Apple", "fruit_producer2_Apple"
           ]
        }
    
        xml {
            source => "message"
            force_array => false
            target => "fruit"
        }
    }
    

    "fruit": {
        "fruit_producer1_Apple": {
            ...
        },
        "fruit_producer2_Apple": {
            ...
        },
        ...
    }