FileBeat详解

一、安装配置

1.windows 下安装 filebeat

windows下elk安装配置 filebeat

以8.6.2为例,下载地址
elasticsearch:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.6.2-windows-x86_64.zip
kibana:https://artifacts.elastic.co/downloads/kibana/kibana-8.6.2-windows-x86_64.zip
filebeat:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.2-windows-x86_64.zip

分别解压至
D:\Deploy\Elastic\search\8.6.2
D:\Deploy\Elastic\kibana\8.6.2
D:\Deploy\Elastic\filebeat\8.6.2\

2.启动

直接启动filebeat

cd /d D:\Deploy\Elastic\filebeat\8.6.2 && filebeat -c filebeat.yml -e

或者在filebeat安装目录下,启动命令行

filebeat -e -c filebeat.yml

3.配置收集日志到logstash

需要经过以下步骤

  1. 安装Filebeat。
  2. 配置Filebeat以发送日志到Logstash。
  3. 安装Logstash,配置Logstash以接收Filebeat的日志。
  4. 启动Filebeat和Logstash服务。
    以下是Filebeat配置文件的示例(filebeat.yml),该配置文件将指示Filebeat将日志发送到Logstash:
filebeat.inputs:

  - type: log
    # Unique ID among all inputs, an ID is required.
    id: my-avicit-id
    enable: true
    paths:  # 采集日志的路径
    - E:\AVICIT\xxxx\code\xxx-xxxx\logs\*.log

    # 日志多行合并采集,根据日志格式设置,可忽略
    multiline.pattern: '^\['
    multiline.negate: true
    multiline.match: after
    # 为每个项目标识,或者分组,可区分不同格式的日志
    tags: ["java-logs"]
output:
  # 输出到logstash中,logstash更换为自己的ip
  logstash:
    hosts: ["localhost:5044"]

配置说明:
①:配置 filebeat.inputs->path 这里的路径是所要收集日志的路径 。
②:配置 enabled: true 这个配置很重要,只有配置为true之后配置才可生效,否则不起作用。
③:配置Outputs ,这里的Outputs有elasticsearch,logstash。按照配置文件下面的示例配置即可。只能配置一个输出。默认是ElasticSearch
4. type:# 指定输⼊的类型为"stdin",表示标准输⼊,log标识读取的是日志文件
在这里插入图片描述

logstash 输出收到的项目日志至项目logstash 的控制台界面配置;

logstash.conf

input {
beats {
        port => 5044
        host => "172.17.4.55"
   }
}
output {

  stdout {
     codec => rubydebug
    }
}

启动docker logstash 的容器镜像

docker run -p 5044:5044 -it -v /var/lib/docker/volumes/logstash/config:/usr/share/logstash/config  --name logstash  logstash:7.5.1

docker logs -f logstash 查看logstash的镜像日志可以看到收集到项目启动的日志

在这里插入图片描述

配置logstash收集日志到ES

[root@db02 ~]# vim /etc/logstash/conf.d/filebeat_logstash_es.conf
input {
  beats {
    port => 3456
    codec => "json"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.51:9200"]
    index => "nginx_filebeat_logstash_es"
  }
}

FileBeat配置收集日志到ES

linux下的安装配置

# 1.安装
cd /usr/local
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.3-linux-x86_64.tar.gz
tar -zxf filebeat-7.16.3-linux-x86_64.tar.gz
rm -f filebeat-7.16.3-linux-x86_64.tar.gz
mv filebeat-7.16.3-linux-x86_64 filebeat
cd filebeat
mkdir -p conf/inputs.d
// 不要默认配置了,把默认配置进行重命名留存
mv filebeat.yml filebeat.example.yml
 
# 2.采集配置 ==============================
#   配置内容详见下面的"配置"
# 2.1)主配置
vim conf/filebeat.yml 
# 2.2)子配置配置
vim conf/inputs.d/nginx.yml
vim conf/inputs.d/runtime.yml
 
# 3.启动 filebeat
nohup ./filebeat -e -c conf/filebeat.yml &  # root 后台守护进程启动

调试说明

# 调试说明 ========================================
# 1)修改主配置 output为如下内容:
output.console:
  pretty: true
# 2)执行下面命令,如果屏幕有数据输出说明程序启动正常
    ./filebeat -e -c conf/filebeat.yml

配置

1. 主配置 filebeat/conf/filebeat.yml
# ============================== Filebeat inputs ===============================
 
filebeat.config.inputs:
  enabled: true
  path: ${path.config}/conf/inputs.d/*.yml
  reload.enabled: true
  reload.period: 10s
 
# ============================== Filebeat logging ===============================
 
logging.level: info
logging.to_files: true
logging.files:
  rotateonstartup: false
  path: /usr/local/filebeat/logs/filebeat.log
  name: filebeat
  # rotateeverybytes: 104857600
  interval: 24h
  keepfiles: 2
  permissions: 0644
 
# ============================== Filebeat modules ==============================
 
#filebeat.config.modules:
#  path: ${path.config}/modules.d/*.yml
#  reload.enabled: false
#  reload.period: 10s
 
# ================================== Outputs ===================================
output.kafka:
  hosts: ["xx.xx.xx.xx:9092", "xx.xx.xx.xx:9092", "xx.xx.xx.xx:9092"]
  topic: 'pc_app-%{[app_id]}-%{[app_type]}-%{[app_env]}-%{[log_type]}-%{[data_type]}'
  required_acks: 1

注Note:

topic 如果没有 需要先申请

2. 子配置

Note: 只需修改 paths 和 fields 字段

  1. Nginx配置
    filebeat/conf/inputs.d/nginx.yml
- type: log
  paths:
    #- /usr/local/nginx/logs/access-json.log
  encoding: utf8
  scan_frequency: 5s
  fields:
    app_id: nginx
    app_type: prod_official
    app_env: prod
    log_type: access
    data_type: json
  fields_under_root: true
 
- type: log
  paths:
    #- /usr/local/nginx/logs/error.log
  encoding: utf8
  scan_frequency: 5s
  fields:
    app_id: nginx
    app_type: prod_official
    app_env : prod
    log_type: error
    data_type: raw
  fields_under_root: true
  1. 业务代码日志
    filebeat/conf/inputs.d/runtime.yml
- type: log
  paths:
#    - /var/www/20230103/api/runtime/logs/runtime*.log
#    - /var/www/20230103/app/runtime/logs/runtime*.log
#    - /var/www/20230103/crm/runtime/logs/runtime*.log
#    - /var/www/20230103/console/runtime/logs/runtime*.log
#    - /var/www/20230103/pc/runtime/logs/runtime*.log
  encoding: utf8
  scan_frequency: 5s
  fields:
    app_id: runtime
    app_type: official
    app_env: yf
    log_type: all
    data_type: raw
  fields_under_root: true
- type: log
  paths:
#    - /var/www/prod/api/runtime/logs/runtime*.log
#    - /var/www/prod/app/runtime/logs/runtime*.log
#    - /var/www/prod/crm/runtime/logs/runtime*.log
#    - /var/www/prod/console/runtime/logs/runtime*.log
#    - /var/www/prod/pc/runtime/logs/runtime*.log
  encoding: utf8
  scan_frequency: 5s
  fields:
    app_id: runtime
    app_type: official
    app_env: prod
    log_type: all
    data_type: raw
  fields_under_root: true
  1. Request请求日志
    filebeat/conf/inputs.d/downstream.yml
- type: log
  paths:
    - /var/www/prod/api/runtime/logs/downstream*.log
    - /var/www/prod/app/runtime/logs/downstream*.log
    - /var/www/prod/crm/runtime/logs/downstream*.log
    - /var/www/prod/console/runtime/logs/downstream*.log
    - /var/www/prod/pc/runtime/logs/downstream*.log
  encoding: utf8
  scan_frequency: 5s
  fields:
    app_id: downstream
    app_type: official
    app_env: prod
    log_type: all
    data_type: json
  fields_under_root: true

日志格式示例

Nginx格式设置

# 日志格式
log_format json '{"@timestamp":"$time_iso8601",'
 '"host":"$server_addr",'
  '"clientip":"$remote_addr",'
  '"size":$body_bytes_sent,'
  '"responsetime":$request_time,'
  '"upstreamtime":"$upstream_response_time",'
  '"upstreamhost":"$upstream_addr",'
  '"http_host":"$host",'
  '"url":"$request",'
  '"referer":"$http_referer",'
  '"agent":"$http_user_agent",'
  '"http_x_forwarded_for":"$http_x_forwarded_for",'
  '"request_body":"-",'
  '"http_cookie":"-",'
  '"http_user_agent":"$http_user_agent",'
  '"status":"$status"}';
  
# 示例
{"@timestamp":"2022-03-30T15:48:50+08:00","host":"192.168.2.22","clientip":"100.125.68.198","size":1552,"responsetime":0.005,"upstreamtime":"0.005","upstreamhost":"127.0.0.1:9000","http_host":"passport.xiaofenglang.com","url":"POST /passport/prod/selectUser HTTP/1.1","referer":"-","agent":"-","http_x_forwarded_for":"10.15.1.84","request_body":"-","http_cookie":"-","http_user_agent":"-","status":"200"}

总结:
首先配置修改设定 filebeat 配置,看手机哪些日志,filebeat 会把收集到日志推送到 kafka内,最后入ElasticSearch内进行存储。

二、fileBeat 配置文件详解

filebeat.inputs:
#采集数据类型,指定文件的输入类型log或者stdin
  - type: log
    enable: true
    # 日志采集的路径
    paths:  
    - D:\input\a\*.log
    
    #制定正则表达式,用来制定要匹配的行,在输入中匹配符合正则表达式列表的那些行,可以有几个
    include_lines: ['^ERR', '^WARN']

    #exclude_lines:指定正则表达式,用来指定不要匹配的行,在输入中排出符合正则表达式列表的那些行,可以有几个
    exclude_lines: ['^DBG']
    
    #exclude_files:忽略掉符合正则表达式列表的文件,默认为每一个符合path定义的文件都创建一个harvester
    exclude_files: [".gz$"]
    
    #encoding:指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的
    encoding: plain
    
    #向输出的每一条日志添加额外的信息,比如“level:debug”方便后续对日志进行分组统计。
    fields:
    level: debug
    
    #multiline:实用于日志中的每一条日志占据多行的情况,比如各种语言的报错信息调用栈
    #file对于多行日志的处理,日志多行合并采集
    #不以时间格式开头的行都合并到上一行的末尾
    multiline.pattern: '^\['    
    multiline.negate: true
    multiline.match: after
    max_lines: 500
    timeout: 5s
    
    #pattern:正则表达式
    #negate:true或false;默认是false,匹配pattern的行合并到上一行;
    #true,不匹配pattern的行合并到上一行
    #match:after或before,合并到上一行的末尾或开始 
    max_lines:合并最大行,默认500
    timeout: 一次合并事件的超时时间,默认5s,防止合并消耗太多时间设置卡死
    
    # 给filebeat采集到的数据加上标签
    tags: ["java-logs"]

    #显示filebeat自身的日志,可以设置日志的level,路径,名字
    logging.level: info
    logging.to_files: true
    logging.to_syslog: false
    logging.files:
    path: D:\input\filebeat_log
    name: filebeat.log
   
    #不常用配置,了解下:
    #close_older如果一个文件在某个时间段内没有发生过更新则关闭监控的文件handle。默认1h,change只会在下一次scan才会被发现。
    close_older: 1h
    
    scan_frequency: filebeat以多快的频率去prospector指定的目录下面检测文件更新(比如是否有新增文件),如果设置为0s,则filebeat会尽可能地感知更新(占用的CPU会变高)。默认是10s。
    
    max_bytes:日志文件中增加一行算一个日志事件,max_bytes限制在一次日志事件中最多上传的字节数,多出的字节会被丢弃。
    
    tail_files:如果设置为true,filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件一次发送,而不是从文件开始处重新发送所有内容。
    
    backoff: filebeat检测到某个文件到了EOF之后,每次等待多久再去检测文件是否有更新,默认为1s

    max_backoff:filebeat检测到某个文件到了EOF之后,等待检测文件更新的最大时间,默认是10s

    registry_file:记录filebeat处理日志文件的位置的文件,如果容器重启,可以从记录的位置开始取日志

#filebeat可以指定输出源
output:
  # 输出到logstash中,logstash更换为自己的ip,5044为logstash监控的端口,需要与logstash的配置文件对应
  logstash:
    hosts: ["localhost:5044"]
    index: "logstash-%{+yyyy.MM.dd}"
 
  #输出到file
output.file:
  path: "/tmp/filebeat"
  filename: filebeat
  	
  #输出到控制台
output.console:
    pretty: true
 

三、Filebeat工作原理

Filebeat是使用GO语言开发,由两个主要组件组成:prospector 和harvester。这些组件一起工作来读取文件(tail file)并将事件数据发送到您指定的输出。

工作原理如下:。

  • 采集器 harvester :的主要职责是读取单个文件的内容。读取每个文件,并将内容发送到 the output。
  • 查找器 prospector :的主要职责是管理 harvester 并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个 harvester。当Filebeat启动时,它会启动一个或者多个prospector监控日志路径或日志文件,每个日志文件会有一个对应的harvester,harvester按行读取日志内容并转发至后台程序。Filebeat维护一个记录文件读取信息的注册文件,记录每个harvester最后读取位置的偏移量。

在这里插入图片描述
在这里插入图片描述

其他两个beat 框架的介绍

beats是一个代理,将不同类型的数据发送到elasticsearch。beats可以直接将数据发送到elasticsearch,也可以通过logstash将数据发送elasticsearch。

beats有三个典型的例子:Filebeat、Topbeat、Packetbeat。Filebeat用来收集日志,Topbeat用来收集系统基础设置数据如cpu、内存、每个进程的统计信息,Packetbeat是一个网络包分析工具,统计收集网络信息。这三个是官方提供的。后续会慢慢介绍这三个beat。

ELK的目标是建立一个平台,可以很容易的创建新的beats。为了这个目录,开发了libbeat,该Go库包含了所有beats公共部分来处理任务,如批量插入到elasticsearch,安全的发送事件到logstash,logstash和elasticsearch多节点的负载均衡,异步或同步的发送事件模式。该libbeat平台还提供了检测机制,当下游服务器负载高或者网络拥堵,自动的降低发送速率。

在这里插入图片描述

Topbeat

收集系统负载、内存、硬盘以及每个进程的情况。

Topbeat是跨平台的。周期性的发送指标到elasticsearch。可以通过kibana创建自定义仪表盘如系统负载、服务器概述、内存或cpu使用情况、top进程、每个进程占用cpu或内存比例、磁盘使用情况等等。
在这里插入图片描述

Packetbeat

想象一下如果你想监控和解决一个复杂的分布式系统,每个组件使用不同的编程语言,web框架和数据库技术。Packetbeat是分布式的,实时的嗅探每个事务的请求与响应,并将相关数据插入到elasticsearch中。packetbeat被动的嗅探网络流量,因此不会干扰应用程序。

Packetbeat是开源的,任何人都可以添加支持新的协议。社区添加了对mongodb的支持,基于UDP和TCP的DNS支持等等。

当然,你也可以添加新的支持。期待ing
在这里插入图片描述

Filebeat 是一个轻量级的开源日志文件数据收集器,它可用于将日志和事件数据从多个来源发送到诸如 Elasticsearch、Logstash、Kafka 等目的地。下面是 Filebeat 配置文件的详细解释: 1. `filebeat.inputs`: 这是一个数组,定义了要收集的日志文件的来源和类型。每个输入都包含一个 `type` 字段表示文件类型,如日志文件、系统日志等,以及相关的配置信息。 2. `filebeat.outputs`: 这也是一个数组,定义了将收集到的日志数据发送到的目的地。可以配置多个输出,例如 Elasticsearch、Logstash 等。每个输出通常包含一个 `hosts` 字段,表示要发送到的目标主机和端口。 3. `filebeat.modules`: 这是一个数组,定义了预定义模块的配置。预定义模块提供了对常见日志文件的结构化解析和分析功能,可以轻松集成到 Filebeat 中。 4. `filebeat.config.modules`: 这是一个布尔值,用于指定是否启用预定义模块。如果设置为 true,则 Filebeat 将加载并启用配置文件中定义的预定义模块。 5. `filebeat.autodiscover`: 这是一个对象,用于自动发现和动态管理容器化环境中的日志文件。可以根据特定的标签或其他条件自动配置输入。 6. `filebeat.registry.path`: 这是一个字符串,指定用于保存 Filebeat 状态和元数据的注册表文件的路径。注册表文件记录了已经发送的日志文件的位置,以便在重启后继续从上次中断的位置发送。 7. `filebeat.harvester.buffer_size`: 这是一个整数,表示每个 harvester(日志收集器)的缓冲区大小,用于在发送之前缓冲日志事件。 以上是一些常见的 Filebeat 配置文件的详细解释,你可以根据具体需求进行配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值