falcon-log-agent
简介
falcon-log-agent是一个开源版的日志采集工具,旨在从流式的日志中抓取、统计日志中的特征信息。git
获取的特征信息,与开源版Open-Falcon监控系统打通。可用于业务指标的衡量、也可用于稳定性的建设。github
Feature
- 准确可依赖:历经滴滴线上业务近一年考验,统计准确性高。
- 性能高、资源消耗可控:性能优化程度高,单核单策略可支撑日志分析:20W条/秒
- 接入成本低:外挂式采集,只须要标准化日志便可;输出数据直接对接open-falcon。
什么是日志采集
日志采集,是一种外挂式的采集。经过读取进程打印的日志,来进行监控数据的采集与汇聚计算。json
falcon-log-agent如何工做
本agent即日志采集场景下的实时计算。实时读取文件内容,实时计算,将计算结果直接推送至falcon。vim
限定条件
- 要求日志必须包含时间:不包含时间的日志,只能根据当前时间统计日志条数,结果很是不许确。
- 不支持文件软链
- 日志时间必须有序:为了应对日志延迟落盘等,agent会根据日志的时间来判断某一周期的数据是否采集完成,若是日志时间顺序错乱,可能致使采集不许。
开始使用log-agent
构建性能优化
git clone https://github.com/didi/falcon-log-agent.git && cd falcon-log-agent && sh build.sh
修改配置文件并发
# base config cp cfg/dev.cfg cfg/cfg.json vim cfg/cfg.json # strategy config cp cfg/strategy.dev.json cfg/strategy.json vim cfg/strategy.json
启动/中止服务app
# start ./control start # stop ./control stop # status ./control status
基础配置项
基础配置项,即程序自己的配置项。默认是cfg/cfg.json,能够经过-c参数来指定。工具
日志相关性能
log_path:程序输出的日志目录 log_level:日志等级 log_rotate_size:日志切割大小 log_rotate_num:按配置切割以后,保留多少个文件,其余的清理掉
worker相关
worker_num:每一个日志文件,进行计算的并发数 queue_size:读文件和进行计算之间,有一个缓冲队列,若是队列满了,意味着计算能力跟不上,就要丢日志了。这个配置就是这个缓冲队列的大小。 push_interval:循环判断将计算完成的数据推送至发送队列的时间 push_url:推送的odin-agent的url
资源限制
max_cpu_rate:最大使用的cpu百分比。(可用核数=ceil(总核数*max_cpu_rate)) max_mem_rate:最打使用内存百分比。(最大内存=(内存总大小*max_mem_rate),最小为500M)
策略相关
update_duration:策略的更新周期 default_degree:默认的采集精度
其余
http_port:自身状态对外暴露的接口
采集策略
文件路径
文件路径,即file_path配置项。必需要求启动agent的用户,对这个文件有可读权限。
文件路径支持固定路径和动态路径两种:
- 固定路径:直接填写便可,如/var/log/falcon-log-agent.log
- 动态路径:可支持按照规则配置的根据时间变化的路径。例如:
好比:线上有些模块本身按照小时写入文件,路径为: /xiaoju/application/log/20150723/application.log.2015072312 对应的咱们的配置方式能够填写为: /xiaoju/application/log/${%Y%m%d}/application.log.${%Y%m%d%H} // ${}中不能包含/
时间格式
时间格式,即time_format配置项。
若是日志中没有时间格式,一旦遇到日志延迟落盘、或者日志量太大计算延迟的状况。会直接致使咱们的监控采集不许。
所以,咱们规定日志中必须有合法的时间格式。且在配置中time_format项指定。
若是想要添加本身的时间格式,能够直接在common/utils/util.go里添加。
目前已经支持的时间格式以下:
dd/mmm/yyyy:HH:MM:SS dd/mmm/yyyy HH:MM:SS yyyy-mm-ddTHH:MM:SS dd-mmm-yyyy HH:MM:SS yyyy-mm-dd HH:MM:SS yyyy/mm/dd HH:MM:SS yyyymmdd HH:MM:SS mmm dd HH:MM:SS PS:为了防止日志积压或性能不足致使的计算误差,日志采集的计算,依赖于日志的时间戳。 所以若是配置了错误的时间格式,将没法获得正确的结果。
采集规则
采集正则,包含两个配置项:pattern和exclude。
两个采集项都是正则表达式,正则表达式的支持状况见:google/re2
pattern表明须要彻底匹配出来的表达式。
exclude表明须要排除掉的表达式。
eg. 例如,我但愿统计code=500或400的日志数量,可是想排除掉关键字SpeciallyErrorNo。 配置以下: pattern: code=[45]00 exclude: SpeciallyErrorNo
采集周期
采集周期(step),对应着监控系统的上报周期。意味着多久合并上报一次。
假设每秒产生1条符合采集规则的日志,配置的采集方式为计数。 若是step为10 : 则每10s上报一次,值为10 若是step为60 : 则每60s上报一次,值为60
采集方式
采集方式(func)的意思是,当咱们从日志中筛选出一堆符合规则的日志以后,应该以哪一种规则来计算拿到最后的值来上报。
目前支持的采集方式有:
- cnt
- avg
- sum
- max
- min
举例:
假设: 正则表达式配置为 Return Success : (\d+)s Used 某一个周期内日志滚动: 2017/12/01 12:12:01 Return Success : 1s Used 2017/12/01 12:12:02 Return Success : 2s Used 2017/12/01 12:12:03 Return Success : 4s Used 2017/12/01 12:12:04 Return Success : 2s Used 2017/12/01 12:12:05 Return Success : 1s Used 首先,根据正则获取到括号内的值:一、二、四、二、1 接下来,根据不一样的计算方式,会获得不一样的结果: avg : (1 + 2 + 4 + 2 + 1) / 5 = 2 count : 5 sum : (1 + 2 + 4 + 2 + 1) = 10 max : Max(1, 2, 4, 2, 1) = 4 min : Min(1, 2, 4, 2, 1) = 1
采集名称
采集名称(name)对应open-falcon中的metric,即监控项。
标签
标签(tags)与open-falcon中的tags相对应。能够理解为肯定监控项的补充。
说明:机器A的第一个核的cpu空闲率。 采集名称(metric): cpu空闲率(cpu.idle) 标签(tags):两个标签: host=机器A;核数=第一个核
在主正则匹配完成后,而后匹配出tag的值,一块儿进行上报。
若没法匹配出tag的值,则视为该条数据未匹配到,该条日志将再也不计入统计。
其余
- degree: 精度
- comment: 备注
自身状态暴露
falcon-log-agent自己对外提供了一个http服务用来暴露自身状态。
主要提供的url以下:
- /health : 自身存活状态
- /strategy :当前生效的策略列表
- /cached : 最近1min内上报的点
自监控
在common/proc/metric/metric.go定义了一个自监控结构体。
在程序运行过程当中会不断收集信息,主要包括以下:
MemUsedMB 进程内存占用 ReadLineCnt 读日志行数 DropLineCnt 队列打满后,扔掉的日志行数 AnalysisCnt 分析完成的日志行数 AnalysisSuccCnt 分析成功匹配的日志行数 PushCnt 推送的监控数据点数 PushErrorCnt 推送错误的监控数据点数 PushLatency 推送监控数据延迟
这些数据,目前自监控的处理方式是:定时输出日志。
若是须要对接本身公司的监控系统,在common/proc/metric/metric.go修改HandleMetrics方法便可。
文档出自:https://github.com/didi/falcon-log-agent/blob/master/readme.md