我有以下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:那些不是原始表/字段。实际查询更长,更复杂。这就是我使用表别名的原因