一、安装配置fluent-bit、采集nginx日志案例
下载路径:https://github.com/fluent/fluent-bit/archive/refs/tags/v1.8.12.tar.gz
1、解压fluent-bit的tar包
2、安装依赖包cmake flex.x86_64、bison.x86_64、 gcc.x86_64、gcc-c++.x86_64((cmake依赖包必须是3.0以上的版本)在cenos镜像中就有)
官方依赖包
解压fluent-bit的tar包
3、进入到解压后的目录找到build目录
进入到build目录执行cmake进行编译安装(cmake必须是3.0以上版本)
执行以下命令进行编译安装
cmake -DCMAKE_INSTALL_PREFIX=/home/zz/panjian/ .. #指定路径编译
make
# 为管理员添加属组权限 方便管理员进入到当前用户解压后的路径/home/zz/fluent-bit-1.8.12/build中执行make install /home/zz/panjian
sudo chmod -R 750 /home/zz/fluent-bit-1.8.12/build
sudo make install /home/zz/panjian/ # 此时需要用户须有sudo权限,如无sudo权限 可使用有sudo权限的用户执行,执行后 在修改 指定的路径权限为zz:如下:
sudo chown -R zz:zz /home/zz/panjian # 修改路径权限 为当前用户 否则无法进入
指定安装后的目录结构作用
二、进行配置文件修改以实现采集nginx日志
编辑input_nginx.con配置文件(采集的日志的位置和采集日志文件的位置记录)
#编辑主配置文件如下
[SERVICE]
Flush 1 #buffer里的数据每隔1秒写到output插件里,这里写到ES里。
Daemon yes #守护进程 使用ststemcat 的启动方式应设置为off
Log_Level info #fluent-bit的日志级别
Log_FIle /root/iSoft/fluent-bit/log/flb.log #定义服务的日志文件
storage.path /root/iSoft/fluent-bit/log/flb-storage #在文件系统中设置一个位置来存储数据流和数据块
storage.sync normal #在从文件系统写入和读取数据时启用数据完整性检查
storage.checksum off #如果输入插件已启用文件系统存储类型,则此属性将设置内存中可以达到的最大块数 。这有助于控制内存使用量
storage.backlog.mem_limit 5M #如果设置了 storage.path,Fluent Bit 将查找未传送且仍在存储层中的数据块,这些数据块称为积压数据。此选项配置在处理这些记录时要使用的最大内存值提示。
Parsers_File parsers.conf # 引用了parsers.conf,里面配置所有几个常程序,结构处理日志的正则表达式
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
@INCLUDE input_nginx.conf #引用input_nginx.conf配置文件
@INCLUDE output_es.conf #引用output_es.conf配置文件
@INCLUDE filter.conf #引用filter.conf配置文件
编辑input_nginx.conf配置文件
[INPUT]
Name tail # tail #指定了input插件的类型,这里是tail类型
tag nginxaccess # 给采集的日志打个标签,后面filter和output根据这个标签选择数据源
parser nginx # 引用parsers.conf配置文件中的nginx配置项(json化处理nginx日志)
Path /usr/local/nginx/logs/access.log # 定义采集日志的路径
DB /root/iSoft/fluent-bit/db/nginx.db # 记录哪个文件采集到哪一行 (非常重要)
DB.Sync Full # 用哪种方法同步数据到磁盘,full为安全优先
Mem_Buf_Limit 32MB # 一旦buffer里的数据超过Mem_buf_limit,tail就会暂停采集,直到buffer数据被flush到output。
Skip_Long_Lines On # 跳过长度大于Buffer_Max_Size的行
Buffer_Chunk_Size 32k # tail命令的buffer初始大小
Buffer_Max_Size 32k # tail命令的buffer最大值
Refresh_Interval 10 # 定时扫描磁盘上的新文件的间隔
Rotate_Wait 5 # 文件rotate后的等待一段时间后再继续监控这个文件,以防flush一些pending data
Ignore_Older 10d # 忽略近十天来未更改的文件
storage.type filesystem # 指定要使用的缓冲机制。它可以是内存或文件系统。filesystem类型是文件系统 (在主配置文件一旦配置了文件系统,在input配置中一定要此行配置(参考官方文档))
编辑 output_es.conf配置文件
[OUTPUT]
Name es # 输出的插件类型
Match nginxaccess # 匹配input配置文件中的tar标记的数据源
Host 192.168.1.128 # es的hostname 可以是域名也可以是IP地址
Port 9200 # es的端口号
Index nginx_log # 生成的索引名称 默认的是fluent-bit
Type my_nginx_log # 类型的名称
Logstash_Format On # 启用日志哈希格式兼容性。此选项采用布尔值:真/假、开/关,启用Logstash_Format后,索引名称将使用前缀和日期组成
Logstash_Prefix nginx-log # 索引的前缀
Logstash_DateFormat %Y.%m.%d # 索引的后缀
Generate_ID on # 启用后, 为传出记录生成_id。这可以防止在重试 ES 时出现重复记录。
Time_Key_Nanos On # 启用Logstash_Format时,启用此项配置属性将:发送纳秒级精度时间戳。(防止在同一秒或者毫秒中相同的日志无法采集的问题)将时间戳精确到纳秒级别 如果不启用同一秒/毫秒的相同日志将会丢失
编辑parsers.conf配置文件(使用正则表达式解析日志)
可以使用下面的链接自行编译正则表达式解析 需要的日志Rubular: a Ruby regular expression editor
[PARSER]
Name nginx
Format regex
Regex ^(?[^ ]) (?[^ ]) (?[^ ]) [(?[^]])] "(?\S+)(?: +(?[^"]?)(?: +\S)?)?" (?[^ ]) (?[^ ]) "(?[^ ])" "(?[^"]+)" (?[^ ]) [(?
[^]])] [(?[^]])]
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z # 此位置匹配了日志解析后的时间,需要注释, 改用output的Time_Key_Nanos 将时间精确到纳秒
# Time_Format %d/%b/%Y:%H:%M:%S %z
Time_Key_Nanos On
Types timestamp:float costs:integer # 定义字段的类型(方便在kibana中查询)
启动命令 ./fluent-bit -c ../etc/fluent-bit/fluent-bit.conf