使用Logstash转义CSV输出中的换行符

时间:2016-11-14 19:25:45

标签: csv escaping logstash

我有以下logstash模板,它从mysql数据库中读取并输出到csv文件中:

input {
    jdbc {
        jdbc_connection_string => ...
        jdbc_user => ...
        jdbc_validate_connection => ...
        jdbc_password => ...
        jdbc_driver_library => ...
        jdbc_driver_class => ...
        jdbc_paging_enabled => ...
        jdbc_page_size => "1000"
        statement => "SELECT name, age, bio FROM person"
    }
}
output {
      csv{
            fields => ["name", "age", "bio"]
            path => "output.csv"
      }
}

这相当不错。但是,bio字段可能会有换行符,这会导致我的CSV输出混乱。我尝试使用过滤器/变异转换:

filter{
      mutate
      {
          gsub => ["bio", "\n", "LINE_BREAK"]
      }
}

但它不起作用。如何将此字段转义?

更新

我找到了解决方案。虽然不可能从我原来的问题中诊断出来。缺少的信息是我使用表ALIAS:

SELECT P.name, P.age, P.bio FROM person P

所以,过滤器是:

filter{
      mutate
      {
          gsub => ["P.bio", "\n", "LINE_BREAK"]
      }
}

由于某种原因,logstash无法识别此情况。因此,解决方案是在字段中添加别名:

SELECT P.name as name, P.age, P.bio as bio FROM person P

filter{
      mutate
      {
          gsub => ["bio", "\n", "LINE_BREAK"]
      }
}

ps:那些不是原始表/字段。实际查询更长,更复杂。这就是我使用表别名的原因

0 个答案:

没有答案