SLS采集日志时,使用过滤插件排除指定日志
一、背景
阿里云SLS用来采集kong、nginx、JVM等格式的日志,配置要采集的机器和日志路径,然后解析日志的时候选择对应的解析插件。
最近,遇到一个需求,因为存储的日志量越来越大,需要对部分Uri的采集给与排除在外,以此减少存储量来节省费用。
该日志的路径request_uri = /data/wifi.html, 每天的请求量在百万级别,而这个日志打印对我们排除问题没用。
所以,要么kong不打印该日志,要么sls不采集它。
在尝试了kong的修改关闭日志无果后,决定还是简单些,从采集端入手。
二、SLS采集的配置
新增过滤处理的插件,参考其官方文档:数据过滤类插件
因为kong access log 没有级别的概念,但是有uri,仿照官方的示例,很容易写出自己的过滤规则。
2、sls数据过滤插件
sls采集,增加过滤插件
request_uri = .^(?!.(/data/wifi.html)).*
保存配置,后期的日志就不会被采集到SLS了。
查询验证:
三、kong配置
虽然不太建议修改kong access log配置,但还是简单说明。
# vi /usr/local/share/lua/5.1/kong/templates/nginx_kong.lua# 关闭该日志(不好实现)location /data/wifi.html{access_log off;...... // 略}# kong check# kong reload注意: 虽然kong的配置文件是/usr/local/kong/nginx-kong.conf, 但是你不能直接修改,会在Kong reload之后被nginx_kong.lua所覆盖。
kong 作为生产在实时运行的,怎么说,去修改它都是一个风险。
最保险的方式还是修改采集端,因为我们的目标是减少费用。
如此,kong机器上有原始的日志,sls因为排除掉了该日志,也不会产生费用。
可谓是一举两得的好事。
