行文本文件实时分析器,流量统计数据采集

  • 介绍

因项目需要,最近采用inotify和IO多路复用技术,实现了一个轻量级的实时行文本文件内容提取的程序,主要目的是用来监控网关nginx的Access Log,并且对Access Log在本地进行实时解析,字段提取和上报的功能。该程序占用内存较小,在10k左右,最多占用1个核的资源,提供采样上报,全量/增量分析文本以及特定字段内容过滤等功能。该程序可以通过自定义connector插件将本地提取以及过滤的信息上报到远程服务器,以实现服务端的流量监控和实时统计;在代码里面已经实现了两个connector,一个是标准输出connector,一个是udp connector;

  • 代码

https://github.com/gilbertwang1981/access_agent.git

 

  • 配置介绍
# 监听目录配置,可以监听多个目录,数组格式
[dir_file,array]
# 被监控的目录
dir[0]=/root/test0
# 被监控的文件
file[0]=/root/test0/access_log.txt

# 被监控的目录
dir[1]=/root/test1
# 被监控的文件
file[1]=/root/test1/access_log.txt

# 日志字段提取配置,字段名=字段位置(从0开始):字段的大小(字节)
[field]
client_ip=12:16
host=13:32
method=16:8
resp_time=21:8
time=23:32
url=28:64

# 系统配置
[system]
# 文本分隔符
separator=0x09
# 是否以守护进程的方式启动
is_daemon=false
# 是否从文件开始读
is_from_begin=false
# 采样率,比如5代表5%
sampling_rate=5

# 字段内容过滤器,精确匹配,匹配到的才会上报采集
[filter]
# 格式:字段名=字段值,不配置,代表不用过滤字段内容
url=/customLayout/home/top

# 定义connector的路径,最大connector可支持的数量为32
[connectors,array]
connector_so_path[0]=/root/access_agent/src/connector/stdout_connector/stdout_connector.so
connector_so_path[1]=/root/access_agent/src/connector/udp_connector/udp_connector.so
  • 实现自定义connector
extern int connnect_to_source(char * snd_buffer , int buffer_size , char * logbuffer);

int connnect_to_source(char * snd_buffer , int buffer_size , char * logbuffer) {
	printf("STDOUT connector,消息内容:%s\n" , logbuffer);

	return 0;
}

编译成动态连接库so文件,在配置文件中新增connector配置,可以配置多个connector,最多支持32个;传给connector的二进制数据,是按照配置文件中[field]配置项,组成的定长数据段;

# 定义connector的路径,最大connector可支持的数量为32
[connectors,array]
connector_so_path[0]=/root/access_agent/src/connector/stdout_connector/stdout_connector.so
connector_so_path[1]=/root/access_agent/src/connector/udp_connector/udp_connector.so
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值