logstash.filter.kv Exception while parsing kv 解决办法

简介: logstash.filter.kv Exception while parsing kv 解决办法

异常信息如下

Exception while parsing kv


640.jpg

查看 logstash 配置文件


 

kv {
        source => "custmsg"
        field_split => ","
        value_split => "="
    }


那肯定是 custmsg 的问题了,是不是 custmsg 里面存在 “\n” 导致 kv filter 如何解析。  在 custmsg 中去掉 "\n" 试试


mutate {  
           gsub => [
                    "custmsg","\n", "" ,
                    "custmsg","\r", ""
                   ]  
           }

 

下面介绍 logstash  mutate  插件


mutate插件可以对事件中的数据进行修改,包括rename、update、replace、convert、split、gsub、uppercase、lowercase、strip、remove_field、join、merge等功能。


栗子

1、rename

对于已经存在的字段,重命名其字段名称。

 

filter {
    mutate {
        rename => ["syslog_host", "host"]
    }
}


2、update

更新字段内容,如果字段不存在,不会新建


filter {
    mutate {
        replace => { "message" => "%{source_host}: My new message" }
    }
}


3、replace


与 update 功能相同,区别在于如果字段不存在则会新建字段


filter {
    mutate {
        replace => { "message" => "%{source_host}: My new message" }
    }
}


4、convert


数据类型转换。


filter {
    mutate {
        convert => ["request_time", "float"]
    }
}

5、gsub


gsub 提供了通过正则表达式实现文本替换的功能。

filter {
    mutate {
        gsub => [
            # replace all forward slashes with underscore
            "fieldname", "/", "_",
            # replace backslashes, question marks, hashes, and minuses
            # with a dot "."
            "fieldname2", "[\\?#-]", "."
        ]
    }
}

6、uppercase/lowercase

大小写转换


filter {
    mutate {
        uppercase => [ "fieldname" ]
    }
}

7、split


将提取到的某个字段按照某个字符分割


filter {
    mutate {
        split => ["message", "|"]
    }
}

针对字符串 "123|321|adfd|dfjld*=123",可以看到输出结果:

{
    "message" => [
        [0] "123",
        [1] "321",
        [2] "adfd",
        [3] "dfjld*=123"
    ],
    "@version" => "1",
    "@timestamp" => "2014-08-20T15:58:23.120Z",
    "host" => "raochenlindeMacBook-Air.local"
}

8、strip


类似 trim,只去除首尾的空白字符

filter {
    mutate {
        strip => ["field1", "field2"]
    }
}



9、remove_field


删除字段:

filter {
    mutate {
        remove_field => [ "foo_%{somefield}" ]
    }
}

10、join


将类型为 array 的字段中的 array 元素使用指定字符为分隔符聚合成一个字符串。

如我们可以将 split 分割的结果再重新聚合起来:


filter {
    mutate {
        split => ["message", "|"]
    }
    mutate {
        join => ["message", ","]
    }
}

输出结果:


{
    "message" => "123,321,adfd,dfjld*=123",
    "@version" => "1",
    "@timestamp" => "2014-08-20T16:01:33.972Z",
    "host" => "raochenlindeMacBook-Air.local"
}

11、merge


对于几个类型为 array 或 hash 或 string 的字段,我们可以使用 merge 合并


filter {
    mutate {
        merge => [ "dest_field", "added_field" ]
    }
}


需要注意的是,array 和 hash 两个字段是不能 merge 的。

相关文章
|
4月前
|
Unix Go 数据库
influxdb: unable to parse points 异常解决总结
influxdb: unable to parse points 异常解决总结
51 3
|
缓存 关系型数据库 MySQL
【异常解决】缓存报错:Null key returned for cache operation (maybe you are using named params on classes withou
【异常解决】缓存报错:Null key returned for cache operation (maybe you are using named params on classes withou
651 0
|
6月前
|
索引
Elasticsearch exception [type=illegal_argument_exception, reason=index [.1] is the write index for data stream [slowlog] and cannot be deleted]
在 Elasticsearch 中,你尝试删除的索引是一个数据流(data stream)的一部分,而且是数据流的写入索引(write index),因此无法直接删除它。为了解决这个问题,你可以按照以下步骤进行操作:
350 0
|
6月前
|
存储 关系型数据库 API
Elasticsearch 报错index_closed_exception
`index_closed_exception` 是 Elasticsearch 中的一个异常类型,它通常发生在尝试对一个已经被关闭(closed)的索引执行搜索、写入或其他操作时。在 Elasticsearch 中,索引是用来存储和检索数据的逻辑命名空间,可以将其类比为关系型数据库中的表。
440 0
|
6月前
BurpSuite2021 -- Decode、Comparer、logger模块
BurpSuite2021 -- Decode、Comparer、logger模块
66 1
|
6月前
|
SQL 消息中间件 Kubernetes
Flink报错问题之Flink报错:Incompatible types for sink column 'xxx' at position x.如何解决
Flink报错通常是指在使用Apache Flink进行实时数据处理时遇到的错误和异常情况;本合集致力于收集Flink运行中的报错信息和解决策略,以便开发者及时排查和修复问题,优化Flink作业的稳定性。
|
Java 数据库
java实现数据库排序功能|compare排序出现IllegalArgumentException: Comparison method violates its general contract
java实现数据库排序功能|compare排序出现IllegalArgumentException: Comparison method violates its general contract
|
JSON 数据格式 索引
Elastic:doc[‘field‘].value与params._source[‘field‘]的区别;doc循环依赖问题
今天有同学问到doc['field'].value与params._source['field']用法的区别,起因在于下述的一道题的解法上,下面详细讲述下我的看法
204 0
Elastic:doc[‘field‘].value与params._source[‘field‘]的区别;doc循环依赖问题
|
SQL 存储 Java
ShuffleError:error in shuffle in fetcher解决办法
ShuffleError:error in shuffle in fetcher解决办法