数据流
日志的流转路径:
logstash收集log4j的日志,并对日志进行过滤,输出给elasticsearch,kibana从es的索引中查询数据进行展示。
问题
有一部分日志没有多大的意义,但是占据了很大的磁盘空间,因此想通过filter将其过滤掉,再将有用的日志输出给es。
filter
filter的过滤插件很多,用得最多的就是grok,感兴趣的可以学一下。本次需求实现用不到grok,就不赘述了。以下是logstash的配置文件。
input {
gelf {
port => 7999
codec => "json"
}
}
filter {
#过滤所有 tenant 为 unmarked 的日志
if [tenant] == "unmarked" {
drop {}
}
#过滤 message 中所有以 "应变数据已经被采集" 开头的日志
if ([message] =~ "应变数据已经被采集") {
drop {}
}
}
output {
elasticsearch {
hosts => "192.168.0.123:9200"
index => "logstash-%{tenant}-%{+YYYY.MM.dd}"
}
}
过滤掉tenant为“unmarked”的日志,以及message以“应变数据已经被采集”开头的日志并删除。
报错回顾
修改配置文件后,启动logstash出现了一个报错如下:
[root@www bin]# ./logstash -f ../conf/logstash.conf
fetched an invalid config {:config=>"input {\n\tgelf {\n\t\tport => 7999\n\t\tcodec => \"json\"\n\t}\n}\n\n\nfilter {\n\tif [tenant]=\"unmarked\" {\n\t\tdrop {}\n\t}\n}\n\n\noutput {\n\telasticsearch {\n\t\thosts => \"192.168.0.123:9200\"\n\t\tindex => \"logstash-%{tenant}-%{+YYYY.MM.dd}\"\n\t}\n}\n\n\n\n", :reason=>"Expected one of [, #, in, not , ==, !=, <=, >=, <, >, =~, !~, and, or, xor, nand, { at line 10, column 13 (byte 78) after filter {\n\tif [tenant]", :level=>:error}
从中可以看出:配置文件的第10行、第13列有错误。错误为符号错误;
因为我之前写的是:
filter {
if [tenant] = "unmarked" {
drop {}
}
}
不能写=,要写==才行。