logstash启动文件conf之filter模块中字段转换问题

         我的logstash是从kafka中读取数据,取出来的数据格式为"zhangsan_1_25_student_15064573848";一个人的姓名_性别_年龄_职业_时间戳,我的需求是将每个字段分别存到elasticsearch中,所以首先需要对取出来的字符串拆分,以便模板能映射各个字段

filter{
    mutate{
        split => ["message","_"]  //使用split以下划线进行拆分

        add_field => { //由于拆分完,只有值,没有字段名,所以还要使用add_field添加字段
          "name" => "%{[message][0]}"  //姓名
        }
        add_field => {
          "gender" => "%{[message][1]}" //性别
        }
        add_field => {
          "age" => "%{[message][2]}" //年龄
        }
        add_field => {
          "job" => "%{[message][3]}" //职业
        }
        add_field => {
          "time" => "%{[message][4]}" //时间戳
        }
        convert => { "gender" => "integer"} //由于拆分完每个都是字符串,而对于age等字段我想存储为整型,所以要
        convert => { "age" => "integer"} //对字段进行转换,这里虽然写的是integer,但是模板会映射为long类型
        convert => { "time" => "integer"} //但是转换并没生效,后面会解释
        
        remove_field => ["message"]
    }
} 

        由于字段转换没生效,我开始思考是不是由于字段名是从add_field方法添加来的,所以才没生效;后来我再添加一个mutate就成功了,当时怎么转不过弯,又没规定一个filter里面只能写一个mutate。

filter{
    mutate{
        split=>["message","_"]

        add_field => {
          "name" => "%{[message][0]}"
        }
        add_field => {
          "gender" => "%{[message][1]}"
        }
        add_field => {
          "age" => "%{[message][2]}"
        }
        add_field => {
          "job" => "%{[message][3]}"
        }
        add_field => {
          "time" => "%{[message][4]}"
        }
        remove_field => ["message"]
    }
    mutate{ //要转换字段,请重新再添加一个mutate
        convert => { "gender" => "integer"}
        convert => { "age" => "integer"}
        convert => { "time" => "integer"}
    }
} 


Logstash 的配置文件可以放在任何你喜欢的位置,只要在启动时指定配置文件路径即可。一般来说,建议将配置文件放在项目的根目录下,文件名为 `logstash.conf`。 完整的配置文件内容如下: ``` input { tcp { port => 4560 codec => json_lines } } filter { json { source => "message" } grok { match => { "message" => "%{TIMESTAMP_ISO8601:logtime} \[%{DATA:thread}\] %{LOGLEVEL:level} %{DATA:class} - %{GREEDYDATA:logmsg}" } } mutate { add_field => { "timestamp" => "%{logtime}" "thread" => "%{thread}" "level" => "%{level}" "class" => "%{class}" "message" => "%{logmsg}" } } } output { jdbc { jdbc_connection_string => "jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false" jdbc_user => "username" jdbc_password => "password" jdbc_driver_library => "/path/to/mysql-connector-java-5.1.31.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" statement => "INSERT INTO log_table(timestamp,thread,level,class,message) VALUES(?,?,?,?,?)" use_prepared_statements => true flush_size => 100 max_flush_exceptions => 5 } } ``` 其,`input` 部分配置了监听的 TCP 端口和编码方式;`filter` 部分使用 `json` 插件解析消息,然后使用 `grok` 插件解析出日志信息的时间、线程、日志级别、类名和日志内容,并使用 `mutate` 插件添加新的字段;`output` 部分将解析后的字段写入 MySQL 数据库。需要根据实际情况修改数据库连接信息和日志表结构。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值