聊起日志,大家一定有很多感触。日志首先要格式化,然后记录关键的业务信息,这样在出问题的时候才能方便排查。今天我们分享一下日志的收集(filebeat),检索(ek)。至于像阿里的SLS,日志易等SAS服务,为什么我们不去使用,有两个原因。1 网络 2数据敏感性。
filebeat:轻量级的日志采集器,这是filebeat地址。它的优点比较多,大家可以自己去查看。说到具体如何收集某个模块的日志,假定我们的日志文件的路径是/home/webserver/log/java/test/。现在我们解压filebeat的tar包之后,会有一个配置文件filebeat.yml文件
有几个关键的配置
#=========================== Filebeat inputs =============================
filebeat.inputs:
paths:日志文件的路径
multiline.pattern: ^\[INFO 多行合并的正则
multiline.negate: true 与pattern同时出现
multiline.match: after 与pattern同时出现
multiline.timeout: 10s 定义超时时间,如果开始一个新的事件在超时时间内没有发现匹配,也将发 送日志,默认是5s
ignore_older: 1h
1 可以指定Filebeat忽略指定时间段以外修改的日志内容
2 文件被忽略之前,确保文件不在被读取,必须设置ignore older时间范围大于 close_inactive
3如果一个文件正在读取时候被设置忽略,它会取得到close_inactive后关闭文 件,然后文件被忽略
close_older: 1h 如果一个文件在某个时间段内没有发生过更新,则关闭监控的文件handle。默认1h
close_inactive:1h
1 启动选项时,如果在制定时间没有被读取,将关闭文件句柄
2 读取的最后一条日志定义为下一次读取的起始点,而不是基于文件的修改时间
3 如果关闭的文件发生变化,一个新的harverster将在scan_frequency运行后被 启动
4 建议至少设置一个大于读取日志频率的值,配置多个prospector来实现针对不 同更新速度的日志文件
5 使用内部时间戳机制,来反映记录日志的读取,每次读取到最后一行日志时开 始倒计时,使用2h 5m 来表示
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
hosts: ["59.37.4.65:9200"] Elasticsearch的地址
index: "filebeat-wuhan-%{+yyyy.MM.dd}" 自定义index的名称,用来区分不同模块的index
setup.template.name: "filebeat-wuhan" 与index同时出现
setup.template.pattern: "filebeat-wuhan" 与index同时出现
这样,日志的采集设置就完成。下面说说检索,一般利用kibaba的discover或者 log来查看,统计,分析。但针对多个index的聚合检索,还是不方便。这里我们使用 logtrail来查询聚合日志,这里降低了查看日志的成本,只要需简单的and,or语法就可以接近实时的情况查看日志。
输入框那里就是lucene的查询语法,这里有详细的说明 query-string-syntax。当然, kibaba还有其它插件,大家也可以分享一下。针对上面阐述的,各位可以实际操作一下,有问题,多多交流。