目 录CONTENT

文章目录

ELK:Filebeat轻量化的日志数据采集器

Administrator
2025-10-22 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

 

字数 1018,阅读大约需 6 分钟

ELK:Filebeat轻量化的日志数据采集器

核心:从安全设备、云、容器、主机还是 OT 进行数据收集Filebeat提供一种轻量型方法,用于转发和汇总日志与文件。


Filebeat 是 Elastic Stack(以前称为 ELK Stack)的一部分,是一个轻量级的、开源的日志数据采集器(或称为传送工具)。它通常作为代理程序安装在需要收集日志的服务器上,用于监控指定的日志文件或位置,收集日志事件,并将它们转发到 Elasticsearch、Logstash 或 Kafka 等目标进行后续存储、处理和分析

主要功能和特点

轻量高效:Filebeat 使用 Go 语言编写,资源占用少,对服务器性能影响极小,适合部署在生产环境的边缘节点上。

实时监控:它可以实时监控日志文件的变化,并及时收集新增的日志行。

可靠传输:Filebeat 能够跟踪文件的读取位置(偏移量),确保在程序重启或网络中断后可以从上次中断的地方继续收集,避免数据丢失或重复。

输出多样:除了 Elasticsearch 和 Logstash,它还可以将数据输出到 Kafka 等其他系统。

集成 Elastic Stack:Filebeat 与 ELK Stack(Elasticsearch、Logstash、Kibana)无缝集成,是整个日志分析流程中的重要一环。

在 ELK Stack 中的作用

在典型的 ELK 架构中,Filebeat 扮演着数据收集和传输的入口角色:
收集:部署在各个应用服务器上的 Filebeat 负责收集本地的日志文件。
传输:将收集到的日志数据安全、可靠地传输到 Logstash(进行进一步处理和解析)或直接传输到 Elasticsearch。
存储与分析:数据最终存储在 Elasticsearch 中,并通过 Kibana 进行可视化分析和管理。

Filebeat 的核心价值在于提供了一种高效、可靠的方式,将分散在各个服务器上的日志数据集中起来,以便进行统一的分析和监控

数据管道

Filebeat 使用背压敏感协议,以应对更多的数据量。如果 Logstash 正在忙于处理数据,则会告诉 Filebeat 减慢读取速度。一旦拥堵得到解决,Filebeat 就会恢复到原来的步伐并继续传输数据

演示说明

以开发环境:自定义treafik插件,并部署traefik,将http的request和response为例,将日志通过filebeat采集,推送到ES,在kibana里查看该日志信息为例:

容器部署


    
    
    
    filebeat:
    image: docker.elastic.co/beats/filebeat:7.15.0
    container_name: filebeat
    user: root
    command: filebeat -e -strict.perms=false
    volumes:
      - ./config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - elasticsearch
    networks:
      - platform-common-net

配置filebeat的filebeat.yml


    
    
    
  filebeat.inputs:
  # 采集 Traefik 访问日志
  - type: log
    enabled: false
    paths:
      - /var/log/traefik/access.log
    fields:
      log_type: traefik_access
      service: traefik
    fields_under_root: true
    json.keys_under_root: true
    json.add_error_key: true

  # 采集 Traefik 应用日志
  - type: log
    enabled: false
    paths:
      - /var/log/traefik/traefik.log
    fields:
      log_type: traefik_app
      service: traefik
    fields_under_root: true
    json.keys_under_root: true
    json.add_error_key: true

  # 直接从容器标准输出采集
  - type: container
    enabled: true
    paths:
      - "/var/lib/docker/containers/*/*.log"

    processors:
      - add_docker_metadata:
          host: "unix:///var/run/docker.sock"

      - drop_event:
          when:
            not:
              equals:
                container.name: "traefik-docker-traefik-1"

      - decode_json_fields:
          fields: ["message"]
          target: "json"
          overwrite_keys: true

      - drop_event:
          when:
            not:
              equals:
                stream: "stdout"

      # 解析到 app 命名空间,避免所有字段冲突
      - decode_json_fields:
          fields: ["log"]
          target: "app"
          overwrite_keys: false

      - drop_fields:
          fields: ["log", "stream", "time", "container","json","agent"]
          ignore_missing: true
      # - include_fields:
      #     fields:
      #       # - "@timestamp"
      #       - "app"

# 输出到 Elasticsearch
output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  index: "traefik-logs-%{+yyyy.MM.dd}"

# 索引模板设置
setup.template.name: "traefik-logs"
setup.template.pattern: "traefik-logs-*"
setup.ilm.enabled: false

# Kibana 配置(用于自动导入 Dashboard)
setup.kibana:
  host: "kibana:5601"

# 日志级别
logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/filebeat
  name: filebeat
  keepfiles: 7
  permissions: 0644

检查日志采集

在treaifk查看标准输入输出,这里是插件输出的request等信息

在kibana查看对应日志索引,检查是否有traefik的日志信息

可以看到:traefik的标准输出日志被filebeat成功采集并在kibana里可视化,在message字段里对应的json就是请求通过traefik的插件记录的request和response信息;✌️

 

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区