启动logstash
1 | bin/logstash -f /opt/logstash/conf.d/ -r true |
start.sh 启动脚本
1 |
|
crontab
1 | * * * * * /opt/logstash/start.sh check |
logstash config 命名
思考:如果
logstash
配置了多个config
(多个input
或多个filter
),怎样来控制它们被执行的顺序呢?
答案是logstash
是按照config
file
的文件名,按照字母顺序合并了所有的config
file
,然后才处理的。
- 最佳命名实践
1 | 00_input.conf |
条件判断
1 | output { |
比较操作有:
- 相等:
==
,!=
,<
,>
,<=
,>=
- 正则:
=~(匹配正则)
,!~(不匹配正则)
- 包含:
in(包含)
,not in(不包含)
布尔操作:
and(与)
,or(或)
,nand(非与)
,xor(非或)
一元运算符:
!(取反)
()
(复合表达式),!()
(对复合表达式结果取反)
remove _field
删除字段
1
2
3mutate {
remove_field => [ "source" ]
}删除嵌套字段(Nested fields)
1
2
3mutate {
remove_field => [ "[host][name]" ]
}注意:如果没有
host
字段,[host][name]
引用会创建一个空的host
字典,为了避免这种情况,可以按以下方式去做:1
2
3
4
5if [host] and [host][name] == "null" {
mutate {
remove_field => [ "[host][name]" ]
}
}
logstash-logback-encoder
logback
发送日志到logstash
解决
logstash
到elasticsearch
时区差8小时的问题1
2
3<timestamp>
<timeZone>GMT+8</timeZone>
</timestamp>配置过滤器,过滤掉不需要的日志
1
2
3
4
5
6
7<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>return message.contains("api_monitor");</expression>
</evaluator>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
pom.xml
1 | <dependency> |
logback-spring.xml
1 | <springProfile name="pro"> |
使用中遇到的问题
gsub
有问题
1 | mutate { |
正常
1 | mutate { |
1 | mutate { |