Filebeat

Filebeat:轻量型日志分析与 Elasticsearch | Elastic

安装

### rpm
(1)下载filebeat软件包
wget .。。。/filebeat-7.17.5-x86_64.rpm

(2)安装filebeat
rpm -ivh filebeat-7.17.5-x86_64.rpm

(3)验证filebeat安装是否成功
filebeat -h


### 二进制
(1)下载filebeat软件包
wget http://192.168.15.253/ElasticStack/day04-/filebeat-7.17.5-linux-x86_64.tar.gz

(2)解压软件包
tar xf filebeat-7.17.5-linux-x86_64.tar.gz -C /oldboyedu/softwares/

(3)验证filebeat安装是否成功
cd /oldboyedu/softwares/filebeat-7.17.5-linux-x86_64/
ln -svf `pwd`/filebeat /usr/local/sbin/
filebeat -h

配置

创建filebeat的配置文件初体验
(1)创建工作目录
mkdir /app/filebeat/config -p
测试 stdin
编写配置文件
vim /app/filebeat/config/stdin.yaml
# 配置filebeat的输入端
filebeat.inputs:
  # 指定输入端的类型为标准输入
  - type: stdin
  # 指定filebeat的输出端为console
  output.console:
  # 表示输出的内容以漂亮的格式显示
    pretty: true
    
filebeat -e -c /app/filebeat/config/stdin.yaml 

image-20241006154524975

测试 tcp

vim /app/filebeat/config/tcp.yaml
filebeat.inputs:
  # 指定类型为tcp
- type: tcp
  # 定义tcp监听的主机和端口
  host: 0.0.0.0:8888
# 指定filebeat的输出端为console
output.console:
  # 表示输出的内容以漂亮的格式显示
  pretty: true

filebeat -e -c /app/filebeat/config/tcp.yaml 

使用telnet 或者 nc 客户端测试

image-20241006154816082

image-20241006154958770


测试filebeat.inputs: - log

vim /app/filebeat/config/log.yaml
filebeat.inputs:
  # 指定输入类型是log
- type: log
  # 指定文件路径
  paths:
    - /tmp/aaa/*.log
    - /tmp/aaa/*/*.json
    # 注意,两个*可以递归匹配
    - /tmp/aaa/**/*.exe
# 指定filebeat的输出端为console
output.console:
  # 表示输出的内容以漂亮的格式显示
  pretty: true

image-20241006155541757

[root@elk101 aaa]# echo 222 > bbb/1.log
无检测
[root@elk101 aaa]# echo 3333 > 1.json
无检测
## 强力检测
[root@elk101 aaa]# echo 4444 > 1.exe
[root@elk101 aaa]# echo 55555 >  ccc/cccc/ccccc/2.exe

image-20241006155843768

image-20241006155936922


通用input字段案例

filebeat input插件的通用字段(common options):
	- enabled:
		是否启用该组件,有true和false,默认值为true。当设置为false时,表示该input组件不会被加载执行!
	- tags:
		给每条数据添加一个tags标签列表。
	- fields
		给数据添加字段。
	- fields_under_root
		该值默认值为false,将自定义的字段放在一个"fields"的字段中。若设置为true,则将fields的KEY放在顶级字段中。
    - processors:
		定义处理器,对源数据进行简单的处理。
参考链接:
	https://www.elastic.co/guide/en/beats/filebeat/7.17/defining-processors.html
综合案例1:
1 关闭对/tmp/aaa目录下的收集
2 开启一个8888端口来监控
3 对数据打标签    
4 加上一些字段  
5.不接受linux开头的信息
6.又error 就删除"class","tags" 字段
7. 对数据转换
vi /app/filebeat/config/zh.yaml
filebeat.inputs:
- type: log
  paths:
    - /tmp/aaa/*.log
    - /tmp/aaa/*/*.json
    - /tmp/aaa/**/*.exe
  # 是否启用该类型,默认值为true。
  enabled: false
- type: tcp
  enabled: true
  host: "0.0.0.0:8888"
  # 给数据打标签,会在顶级字段多出来多个标签
  tags: ["超级","无敌","飞起来"]
  # 给数据添加KEY-VALUE类型的字段,默认是放在"fields"中的
  fields:
    school: "清华"
    class: "linux"
    classroom: "总统办公室"
    ip: "110.120.110.4"
    port: 55555
  # 若设置为true时,则将fields添加的自定义字段放在顶级字段中,默认值为false。
  fields_under_root: true
  # 定义处理器,过滤指定的数据
  processors:
    # 删除消息是以 linux 开头的事件(event)
  - drop_event:
      when:
        regexp:
          message: "^linux"
    # 如果消息包含 error 内容,删除指定的自定义字段或者 tags
  - drop_fields:
      when:
        contains:
          message: "error"
      fields: ["class","tags"]
      ignore_missing: false
    # 修改字段名称
  - rename:
      fields:
        # 源字段 -> 目标字段
        - from: "school"
          to: "学校"
        - from: "log"
          to: "日志"
    # 转换字段数据类型,并存放在指定的字段中
  - convert:
      fields:
        - {from: "ip", to: "aaaa.aaaaa_ip", type: "ip"}
        - {from: "port", to: "bbbb.bbbbbb_port", type: "integer"}
# 指定filebeat的输出端为console
output.console:
  # 表示输出的内容以漂亮的格式显示
  pretty: true

image-20241006162433917


将指定文件转为json格式数据收集

vi /app/filebeat/config/json.yaml
filebeat.inputs:
- type: log
  paths:
    - /tmp/aaaa/*
  # 排除以log结尾的文件
  exclude_files: ['\.log$']
  # 只采集包含指定信息的数据 
  # include_lines: ['linux']
  # 只要包含特定的数据就不采集该事件(event)
  # exclude_lines: ['^linux']
  # 将message字段的json数据格式进行解析,并将解析的结果放在顶级字段中
  json.keys_under_root: true
  # 如果解析json格式失败,则会将错误信息添加为一个"error"字段输出
  json.add_error_key: true

# 指定filebeat的输出端为console
output.console:
  # 表示输出的内容以漂亮的格式显示
  pretty: true

image-20241006163106731

多行匹配

filebeat.inputs:
- type: log
  paths:
    - /app/apache-tomcat-9.0.73/logs/catalina*
  multiline.type: pattern
  multiline.pattern: '^\d{2}'
  multiline.negate: true
  multiline.match: after

image-20241006185227678