找回密码
 立即注册
首页 业界区 业界 LogStash输入插件详解

LogStash输入插件详解

呶募妙 2025-6-15 19:00:47
概述

官方文档:https://www.elastic.co/guide/en/logstash/7.17/input-plugins.html
输入插件使 Logstash 能够读取特定的事件源。
LogStash 提供了 50 + 种输入插件,常见类型包括:

  • 文件类:file, s3
  • 网络类:beats, tcp, udp, http, kafka
  • 数据库类:jdbc, mongodb,redis
  • 系统类:syslog, eventlog, windows_eventlog
  • 特殊类:stdin, generator
所有输入插件都支持以下核心参数:

  • add_field:值类型是哈希,默认值是{},其主要作用是向事件添加字段
  • codec:值类型是编解码器,默认值是plain,
  • enable_metric:值类型为布尔值,默认值是true,是否开启metric指标
  • id:值类型为字符串,此设置没有默认值。为插件配置添加一个唯一的ID。
  • tags:为事件添加标签,值类型是数组
  • type:值类型为字符串,type向此输入处理的所有事件添加一个字段。可以在 Kibana 中搜索它
常用输入插件-Stdin

Stdin是从标准输入读取事件。默认情况下,每个事件都被视为一行。如果需要合并多行,则需要使用多行编解码器。
stdin插件主要用于测试和开发环境,不适合生产环境的高吞吐量场景。
常用字段解释


  • add_field:值类型是哈希,默认值是{},其主要作用是向事件添加字段
  • codec:值类型是编解码器,默认值是line,
  • enable_metric:值类型为布尔值,默认值是true,是否开启metric指标
  • id:值类型为字符串,此设置没有默认值。为插件配置添加一个唯一的ID。
  • tags:为事件添加标签,值类型是数组
  • type:值类型为字符串,type向此输入处理的所有事件添加一个字段。可以在 Kibana 中搜索它
实战
  1. [root@ELK01 ~/logstash/config]# cat stdin.conf
  2. # 输入
  3. input {
  4.     stdin {
  5.         type => "stdin"
  6.         id => "my_stdin"
  7.         tags => ["stdin","my_stdin"]
  8.         add_field => {
  9.             "name" => "张三"
  10.             "age" => 18
  11.         }
  12.         codec => line
  13.     }
  14. }
  15. # 输出,以debug方式输出
  16. output {
  17.     stdout {
  18.         codec => rubydebug
  19.     }
  20. }
复制代码
启动LogStash验证
  1. [root@ELK01 ~/logstash/config]# logstash -f ./stdin.conf
  2. # 打印的日志信息省略
  3. 1 #输入1,然后回车
  4. {
  5.           "age" => "18",                      #add_field添加的字段
  6.           "host" => "ELK01",
  7.           "name" => "张三",
  8.           "type" => "stdin"                  # 指定的type类型
  9.       "@version" => "1",
  10.     "@timestamp" => 2025-06-15T05:34:25.042Z,
  11.           "tags" => [                         #添加的tag
  12.         [0] "stdin",
  13.         [1] "my_stdin"
  14.     ],
  15.        "message" => "1",                     #输入的字段
  16. }
复制代码
常用输入插件-file

参考文档:https://www.elastic.co/guide/en/logstash/7.17/plugins-inputs-file.html
在 Logstash 中,file输入插件是最常用的输入插件之一,主要用于从文件系统读取数据,常见的使用场景包括收集日志文件、监控文件变更,file插件能够读取所有的文件
常用字段解释


  • path(必需)

    • 功能:用于指定要监控的文件路径,可以使用绝对路径或相对路径。
    • 注意事项:

      • 若路径指向的是目录而非文件,该插件会递归读取目录下的所有文件。
      • 要保证 Logstash 进程拥有读取这些文件的权限。


  1. path => ["/var/log/*.log", "/data/app/*.out"]  # 支持使用通配符匹配多个文件
复制代码

  • start_position

    • 功能:确定首次读取文件时的起始位置。
    • 可选值:

      • beginning:从文件开头开始读取,适用于历史数据迁移的场景。
      • end(默认值):从文件末尾开始读取,适合实时日志收集的情况。


  1. start_position => "beginning"
复制代码

  • sincedb_path

    • 功能:指定 sincedb 文件的存储位置,该文件用于记录已读取文件的偏移量。
    • 默认值:$HOME/.sincedb_

  1. sincedb_path => "/data/logstash/sincedb"  # 生产环境建议使用专用目录
复制代码

  • ignore_older

    • 功能:设置一个时间阈值,超过该阈值的文件将被忽略。
    • 单位:秒、分钟、小时、天等,例如3600(3600 秒)、2h(2 小时)。

  1. ignore_older => "1d"  # 忽略超过1天未修改的文件
复制代码

  • exclude

    • 功能:用于排除不需要监控的文件。

  1. exclude => ["*.gz", "*.bak"]  # 排除压缩文件和备份文件
复制代码

  • stat_interval

    • 功能:设置检查文件更新的时间间隔。
    • 默认值:1(秒)

  1. stat_interval => 5  # 每5秒检查一次文件更新
复制代码

  • discover_interval

    • 功能:设置扫描目录以发现新文件的时间间隔,在监控目录时会用到。
    • 默认值:15(秒)

  1. discover_interval => 30  # 每30秒扫描一次目录
复制代码

  • file_completed_action与file_completed_log_path

    • 用于处理已完成读取的文件

  1. file_completed_action => "log"  # 可选值: log, delete, archive
  2. file_completed_log_path => "/var/log/logstash/completed_files.log"
复制代码

  • file_sort_by与file_sort_direction
    控制文件读取顺序
  1. file_sort_by => "last_modified"  # 可选值: path, last_modified
  2. file_sort_direction => "asc"     # 可选值: asc(升序), desc(降序)
复制代码

  • delimiter

    • 指定行分隔符(适用于非标准换行符的文件)

  1. delimiter => "\r\n"  # Windows格式换行符
复制代码

  • max_open_files

    • 限制最大打开文件数(防止系统资源耗尽)

  1. max_open_files => 1024  # 默认值为4095
复制代码

  • sincedb_write_interval

    • 设置 sincedb 写入间隔(提高性能)

  1. sincedb_write_interval => 15  # 每15秒写入一次sincedb
复制代码

  • sincedb_clean_after

    • 清理过期的 sincedb 记录

  1. sincedb_clean_after => "7d"  # 清理7天未访问的文件记录,默认值为14天
复制代码

  • mode
    选择监控模式(默认是tail,即追加模式)
  1. mode => "read"  # 一次性读取文件,读完即关闭,默认值为tail
复制代码
实战

定义配置文件
  1. [root@ELK01 ~/logstash/config]# cat file.conf
  2. input {
  3.     file {
  4.         id => "my_app_log"
  5.         codec => "plain"
  6.         tags => ["file","myfile"]
  7.         add_field => {
  8.             "name" => "zhangsan"
  9.             "age" => 18
  10.         }
  11.         type => "file"
  12.         # 读取日志的文件路径
  13.         path => "/tmp/apps*.log"
  14.         # 读取的开始位置
  15.         # 该参数剩下的前提条件时"sincedb*"文件中没有对新文件的记录.
  16.         start_position => beginning
  17.         # sincedb文件
  18.         sincedb_path => "/data/logstash/sincedb"
  19.         ignore_older => "3d"
  20.         # 读取频率,1秒
  21.         stat_interval => 1
  22.         max_open_files => 1024
  23.         sincedb_write_interval => 10
  24.         mode => tail
  25.     }
  26. }
  27. output {
  28.     stdout {
  29.         codec => rubydebug
  30.     }
  31. }
复制代码
启动logstash
  1. [root@ELK01 ~/logstash/config]# logstash -f ./file.conf
  2. [2025-06-15T14:22:35,596][INFO ][logstash.javapipeline    ][main] Pipeline Java execution initialization time {"seconds"=>0.58}
  3. [2025-06-15T14:22:35,657][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
  4. [2025-06-15T14:22:35,717][INFO ][filewatch.observingtail  ][main][my_app_log] START, creating Discoverer, Watch with file and sincedb collections
  5. [2025-06-15T14:22:35,734][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
复制代码
写入内容至/tmp/apps01.log
  1. [root@ELK01 /tmp]# echo hello logstash file >> apps.log
复制代码
查看控制台
  1. {
  2.       "@version" => "1",
  3.           "host" => "ELK01",
  4.           "path" => "/tmp/apps.log",
  5.        "message" => "hello logstash file", # 我们写入文件的内容
  6.           "type" => "file",
  7.           "name" => "zhangsan",
  8.           "tags" => [
  9.         [0] "file",
  10.         [1] "myfile"
  11.     ],
  12.     "@timestamp" => 2025-06-15T06:24:17.191Z,
  13.            "age" => "18"
  14. }
复制代码
查看sincedb文件
  1. [root@ELK01 /tmp]# cat /data/logstash/sincedb
  2. 2490408 0 64768 44 1749968657.193113 /tmp/apps.log
  3. # 2490408表示文件的inodb
  4. # 0 表示磁盘分区
  5. # 64768表示文件当前偏移量,单位字节
  6. # 44表示记录文件元数据(如权限、所有者)最后修改的时间戳(秒级)。
  7. # /tmp/apps.log表示读取的日志文件
复制代码
持续更新其它插件


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册