filestream安装使用全套+filebeat的模块用法

1 filestream介绍

官方宣布:输入类型为log在filebeat7.16版本已经弃用了

Filestream 是 Filebeat 中的一种 输入类型(Input),用于处理日志文件的读取。它是为了取代 Filebeat 中传统的 log 输入(Input)设计的,更加现代化和高效

  • filestream 直接与操作系统的文件系统事件接口(如 Linux 的 inotify 或 Windows 的 ReadDirectoryChangesW)集成,从而更高效地监听文件变化

  • 专为处理容器化环境或日志动态生成的场景设计,能够动态追踪日志文件的创建和删除

  • 使用唯一的文件标识符(如 inode + dev)而非文件路径,避免因路径变化导致日志丢失或重复采集

  • 未来版本中,filestream 将成为日志文件采集的首选,逐步取代 log 输入

2 filestream解析nginx json日志

1.filebeat执行该文件

yaml 复制代码
cat > 11-filestream-to-es.yaml <<EOF
filebeat.inputs:
- type: filestream
  paths:
    - /var/log/nginx/access.log
  # 配置解析
  parsers:
      # 解析json格式
    - ndjson:
        # 将解析的数据放在哪个字段,若为""代表放在顶级字段中
        target: ""
        # 对哪个字段进行解析,若不指定,则默认会对message字段进行解析,并删除该字段。
        message_key: message

output.elasticsearch:
  hosts: 
  - "http://10.0.0.91:9200"
  - "http://10.0.0.92:9200"
  - "http://10.0.0.93:9200"
  index: "zhiyong18-luckyboy-log-filestream-nginx"

setup.ilm.enabled: false
setup.template.name: "zhiyong18-luckyboy"
setup.template.pattern: "zhiyong18-luckyboy-log*"
setup.template.overwrite: false
setup.template.settings:
  index.number_of_shards: 5
  index.number_of_replicas: 0
EOF

2.索引可以正常创建,discover 中看到内容和 之前的 nginx json 格式采集一样

3 filestream多行匹配

1.filebeat执行该文件

yaml 复制代码
cat > 12-filestream_multiple-to-es.yaml <<EOF
filebeat.inputs:
- type: filestream
  paths:
    - /app/apache-tomcat-10.1.25/logs/catalina.out
  parsers:
    - multiline:
        type: pattern
        pattern: '^\d{2}'
        negate: true
        match: after

output.elasticsearch:
  hosts: 
  - "http://10.0.0.91:9200"
  - "http://10.0.0.92:9200"
  - "http://10.0.0.93:9200"
  index: "zhiyong18-luckyboy-log-filestream-tomcat-errorlog"

setup.ilm.enabled: false
setup.template.name: "zhiyong18-luckyboy"
setup.template.pattern: "zhiyong18-luckyboy-log*"
setup.template.overwrite: false
setup.template.settings:
  index.number_of_shards: 5
  index.number_of_replicas: 0
EOF

2.验证采集的错误日志

4 filestream count多行匹配+json采集

1.准备测试文件 /tmp/apps.json

json 复制代码
{
  "name": "韩V童",
  "hobby": ["下海","睡觉","抽奖"]
}
{
   "name": "康Z阳",
   "hobby": ["看美女","打游戏","学习"]
}

2.编写测试 filebeat 采集配置。

注意:如果这条索引同时匹配到了多个索引模版,可能就会报错。建议修改匹配模式

yaml 复制代码
cat > 13-filestream_json_multiple_line-to-es.yaml <<EOF
filebeat.config.modules:
  # 注意,此处的"${path.config}"对应的路径是/etc/filebeat目录
  path: ${path.config}/modules.d/*.yml
  # 支持热加载
  reload.enabled: true
  # 指定每间隔多长时间检测一次"${path.config}/modules.d/*.yml"
  reload.period: 5s

output.elasticsearch:
  hosts: 
  - "http://10.0.0.91:9200"
  - "http://10.0.0.92:9200"
  - "http://10.0.0.93:9200"
  index: "zhiyong18-luckyboy-log-modules-nginx"

etup.ilm.enabled: false
setup.template.name: "zhiyong18-luckyboy-modules"
setup.template.pattern: "zhiyong18-luckyboy-log-modules*"
setup.template.overwrite: false
setup.template.settings:
  index.number_of_shards: 5
  index.number_of_replicas: 0
EOF

3.查看采集到的日志

5 filebeat模块介绍

filebeat模块是官方提供的一种对各种中间件进行日志采集的解决方案,用于简化常见服务(如 NGINX、MySQL、Apache 等)日志的采集、解析和可视化过程。

  • 模块在/etc/filebeat/modules.d/ 下, 启用模块本质上是将 /etc/filebeat/modules.d/ 目录下的 *.yml.disabled 文件更名为 *.yml

  • filebeat启用,禁用和查看模块

bash 复制代码
# 查看支持的模块
[root@elk91 filebeat]# ll modules.d/ | egrep "tomcat|nginx"
-rw-r--r-- 1 root root   784 May 30 21:52 nginx.yml.disabled
-rw-r--r-- 1 root root   623 May 30 21:52 tomcat.yml.disabled

# 进行模块开启操作
[root@elk91 filebeat]# filebeat modules enable nginx tomcat
Enabled nginx

# 查看已开启的模块
[root@elk91 filebeat]# ll modules.d/ | egrep "tomcat|nginx"
-rw-r--r-- 1 root root   784 May 30 21:52 nginx.yml
-rw-r--r-- 1 root root   623 May 30 21:52 tomcat.yml

# 禁用模块
[root@elk91 filebeat]# filebeat modules disable nginx tomcat

模块大全:

bash 复制代码
[root@elk93~]# ls /etc/filebeat/modules.d/
activemq.yml.disabled     cyberark.yml.disabled          infoblox.yml.disabled         nginx.yml                snyk.yml.disabled
apache.yml.disabled       cylance.yml.disabled           iptables.yml.disabled         o365.yml.disabled        sonicwall.yml.disabled
auditd.yml.disabled       envoyproxy.yml.disabled        juniper.yml.disabled          okta.yml.disabled        sophos.yml.disabled
awsfargate.yml.disabled   f5.yml.disabled                kafka.yml.disabled            oracle.yml.disabled      squid.yml.disabled
aws.yml.disabled          fortinet.yml.disabled          logstash.yml.disabled         osquery.yml.disabled     suricata.yml.disabled
azure.yml.disabled        gcp.yml.disabled               microsoft.yml.disabled        panw.yml.disabled        system.yml.disabled
barracuda.yml.disabled    googlecloud.yml.disabled       misp.yml.disabled             pensando.yml.disabled    threatintel.yml.disabled
bluecoat.yml.disabled     google_workspace.yml.disabled  mongodb.yml.disabled          postgresql.yml.disabled  tomcat.yml
cef.yml.disabled          gsuite.yml.disabled            mssql.yml.disabled            proofpoint.yml.disabled  traefik.yml.disabled
checkpoint.yml.disabled   haproxy.yml.disabled           mysqlenterprise.yml.disabled  rabbitmq.yml.disabled    zeek.yml.disabled
cisco.yml.disabled        ibmmq.yml.disabled             mysql.yml.disabled            radware.yml.disabled     zookeeper.yml.disabled
coredns.yml.disabled      icinga.yml.disabled            nats.yml.disabled             redis.yml.disabled       zoom.yml.disabled
crowdstrike.yml.disabled  iis.yml.disabled               netflow.yml.disabled          santa.yml.disabled       zscaler.yml.disabled
cyberarkpas.yml.disabled  imperva.yml.disabled           netscout.yml.disabled         snort.yml.disabled

6 使用模块采集nginx日志

前提: nginx 模块已经开启,nginx日志是常规格式

1.修改nginx模块配置

yaml 复制代码
cat > /etc/filebeat/modules.d/nginx.yml <<EOF
- module: nginx
  access:
    enabled: true
    var.paths: ["/var/log/nginx/access.log*"]
  error:
    enabled: true
    var.paths: ["/var/log/nginx/error.log*"]
  ingress_controller:
    enabled: false
EOF

2.filebeat执行该文件。

可能遇到的故障:

  • 由于之前创建了大量索引模式,可能会导致索引匹配冲突,要么改优先级或匹配其他索引。
    • 索引模式冲突举例:zhiyong18-luckyboy-log*zhiyong18-luckyboy-log-modules*
  • vim access.log 后日志不采集,或这不写入。需要重启nginx
yaml 复制代码
cat > 14-modules_nginx-to-es.yaml <<'EOF'
filebeat.config.modules:
  # 注意,此处的"${path.config}"对应的路径是/etc/filebeat目录
  path: ${path.config}/modules.d/*.yml
  # 支持热加载
  reload.enabled: true
  # 指定每间隔多长时间检测一次"${path.config}/modules.d/*.yml"
  reload.period: 5s


output.elasticsearch:
  hosts: 
  - "http://10.0.0.91:9200"
  - "http://10.0.0.92:9200"
  - "http://10.0.0.93:9200"
  index: "zhiyong18-luckyboy-log-modules-nginx"

# 禁用索引的生命周期(Index Lifecycle Management,简称"ilm"),如果不禁用则忽略自定义索引名称
setup.ilm.enabled: false
# ES的索引模板名称,和ES最好别冲突
setup.template.name: "zhiyong18-luckyboy-modules"
# ES索引模板的匹配模式
setup.template.pattern: "zhiyong18-luckyboy-log*"
# 如果索引模板已经存在,是否覆盖,推荐设置为false
setup.template.overwrite: false
EOF
json 复制代码
    "source": {
      "geo": {
        "continent_name": "Africa",
        "country_iso_code": "SC",
        "country_name": "Seychelles",
        "location": {
          "lon": 55.6667,
          "lat": -4.5833
        }
      },

3.去 discover 查看,官方模块非常详细,把日志中隐藏的国家、IP、状态码都显示出来了

7 nginx模块中经纬度混合问题

1.在使用了nginx模块采集原生nginx日志后,若发现地理位置坐标点全在一个字段中,无法确定其地理位置坐标点。需要使用数据映射。

下图为正确的示例,地理位置正确映射

2.创建一条索引模式,以后使用nginx模块采集日志时就匹配这条索引

索引名称 zhiyong18-luckyboy-modules
索引模式 zhiyong18-luckyboy-log*

3.索引设置:

json 复制代码
{
        "number_of_shards": 3,
        "number_of_replicas": 0
}

4.设置数据映射:source.geo.location --> 地理位置坐标点

5.创建后预览:

json 复制代码
{
  "template": {
    "settings": {
      "index": {
        "number_of_shards": "3",
        "number_of_replicas": "0"
      }
    },
    "mappings": {
      "properties": {
        "source": {
          "properties": {
            "geo": {
              "properties": {
                "location": {
                  "type": "geo_point"
                }
              }
            }
          }
        }
      }
    },
    "aliases": {}
  }
}

最后,创建地图查看分布图

最后,创建地图查看分布图

相关推荐
小张成长计划..22 分钟前
【Linux】18:基础IO
linux·运维·服务器
MIXLLRED1 小时前
解决——Ubuntu远程桌面指令更换网络
linux·网络·ubuntu
啊哈一半醒1 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
wunaiqiezixin2 小时前
MIT 6.S081 lazy 前置篇(lab5):缺页异常、惰性分配、写时复制、页面换出
linux·unix·os·xv6·mit6.s081
Benszen2 小时前
云计算基础-13:Linux网络管理实战-1
linux·运维·云计算
_kerneler2 小时前
Linux tiny RCU
linux
wuminyu4 小时前
虚拟线程底层ForkJoinPool的工作窃取算法机制
java·linux·c语言·jvm·c++
测试运维日常笔记6 小时前
tcpdump(Linux服务器)配合 Wireshark(本地分析)使用手顺与常用过滤语法详解
linux·服务器·tcpdump
jason_renyu6 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
linux·docker·新手docker学习·docker日志查询·docker服务管理
测试运维日常笔记7 小时前
Unix/Linux 系统软件包管理笔记
linux·笔记·unix