概述

官方文档: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 中搜索它

实战

[root@ELK01 ~/logstash/config]# cat stdin.conf
# 输入
input {
stdin {
type => "stdin"
id => "my_stdin"
tags => ["stdin","my_stdin"]
add_field => {
"name" => "张三"
"age" => 18
}
codec => line
}
} # 输出,以debug方式输出
output {
stdout {
codec => rubydebug
}
}

启动LogStash验证

[root@ELK01 ~/logstash/config]# logstash -f ./stdin.conf
# 打印的日志信息省略
1 #输入1,然后回车
{
"age" => "18", #add_field添加的字段
"host" => "ELK01",
"name" => "张三",
"type" => "stdin" # 指定的type类型
"@version" => "1",
"@timestamp" => 2025-06-15T05:34:25.042Z,
"tags" => [ #添加的tag
[0] "stdin",
[1] "my_stdin"
],
"message" => "1", #输入的字段 }

常用输入插件-file

参考文档:https://www.elastic.co/guide/en/logstash/7.17/plugins-inputs-file.html

在 Logstash 中,file输入插件是最常用的输入插件之一,主要用于从文件系统读取数据,常见的使用场景包括收集日志文件、监控文件变更,file插件能够读取所有的文件

常用字段解释

  • path(必需)

    • 功能:用于指定要监控的文件路径,可以使用绝对路径或相对路径。
    • 注意事项:
      • 若路径指向的是目录而非文件,该插件会递归读取目录下的所有文件。
      • 要保证 Logstash 进程拥有读取这些文件的权限。
path => ["/var/log/*.log", "/data/app/*.out"]  # 支持使用通配符匹配多个文件
  • start_position

    • 功能:确定首次读取文件时的起始位置。
    • 可选值:
      • beginning:从文件开头开始读取,适用于历史数据迁移的场景。
      • end(默认值):从文件末尾开始读取,适合实时日志收集的情况。
start_position => "beginning"
  • sincedb_path

    • 功能:指定 sincedb 文件的存储位置,该文件用于记录已读取文件的偏移量。
    • 默认值:$HOME/.sincedb_<hash>
sincedb_path => "/data/logstash/sincedb"  # 生产环境建议使用专用目录
  • ignore_older

    • 功能:设置一个时间阈值,超过该阈值的文件将被忽略。
    • 单位:秒、分钟、小时、天等,例如3600(3600 秒)、2h(2 小时)。
ignore_older => "1d"  # 忽略超过1天未修改的文件
  • exclude

    • 功能:用于排除不需要监控的文件。
exclude => ["*.gz", "*.bak"]  # 排除压缩文件和备份文件
  • stat_interval

    • 功能:设置检查文件更新的时间间隔。
    • 默认值:1(秒)
stat_interval => 5  # 每5秒检查一次文件更新
  • discover_interval

    • 功能:设置扫描目录以发现新文件的时间间隔,在监控目录时会用到。
    • 默认值:15(秒)
discover_interval => 30  # 每30秒扫描一次目录
  • file_completed_action与file_completed_log_path

    • 用于处理已完成读取的文件
file_completed_action => "log"  # 可选值: log, delete, archive
file_completed_log_path => "/var/log/logstash/completed_files.log"
  • file_sort_by与file_sort_direction

    控制文件读取顺序
file_sort_by => "last_modified"  # 可选值: path, last_modified
file_sort_direction => "asc" # 可选值: asc(升序), desc(降序)
  • delimiter

    • 指定行分隔符(适用于非标准换行符的文件)
delimiter => "\r\n"  # Windows格式换行符
  • max_open_files

    • 限制最大打开文件数(防止系统资源耗尽)
max_open_files => 1024  # 默认值为4095
  • sincedb_write_interval

    • 设置 sincedb 写入间隔(提高性能)
sincedb_write_interval => 15  # 每15秒写入一次sincedb
  • sincedb_clean_after

    • 清理过期的 sincedb 记录
sincedb_clean_after => "7d"  # 清理7天未访问的文件记录,默认值为14天
  • mode

    选择监控模式(默认是tail,即追加模式)
mode => "read"  # 一次性读取文件,读完即关闭,默认值为tail

实战

定义配置文件

[root@ELK01 ~/logstash/config]# cat file.conf
input {
file {
id => "my_app_log"
codec => "plain"
tags => ["file","myfile"]
add_field => {
"name" => "zhangsan"
"age" => 18
}
type => "file"
# 读取日志的文件路径
path => "/tmp/apps*.log"
# 读取的开始位置
# 该参数剩下的前提条件时"sincedb*"文件中没有对新文件的记录.
start_position => beginning
# sincedb文件
sincedb_path => "/data/logstash/sincedb"
ignore_older => "3d"
# 读取频率,1秒
stat_interval => 1
max_open_files => 1024
sincedb_write_interval => 10
mode => tail
}
}
output {
stdout {
codec => rubydebug
}
}

启动logstash

[root@ELK01 ~/logstash/config]# logstash -f ./file.conf
[2025-06-15T14:22:35,596][INFO ][logstash.javapipeline ][main] Pipeline Java execution initialization time {"seconds"=>0.58}
[2025-06-15T14:22:35,657][INFO ][logstash.javapipeline ][main] Pipeline started {"pipeline.id"=>"main"}
[2025-06-15T14:22:35,717][INFO ][filewatch.observingtail ][main][my_app_log] START, creating Discoverer, Watch with file and sincedb collections
[2025-06-15T14:22:35,734][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}

写入内容至/tmp/apps01.log

[root@ELK01 /tmp]# echo hello logstash file >> apps.log

查看控制台

{
"@version" => "1",
"host" => "ELK01",
"path" => "/tmp/apps.log",
"message" => "hello logstash file", # 我们写入文件的内容
"type" => "file",
"name" => "zhangsan",
"tags" => [
[0] "file",
[1] "myfile"
],
"@timestamp" => 2025-06-15T06:24:17.191Z,
"age" => "18"
}

查看sincedb文件

[root@ELK01 /tmp]# cat /data/logstash/sincedb
2490408 0 64768 44 1749968657.193113 /tmp/apps.log # 2490408表示文件的inodb
# 0 表示磁盘分区
# 64768表示文件当前偏移量,单位字节
# 44表示记录文件元数据(如权限、所有者)最后修改的时间戳(秒级)。
# /tmp/apps.log表示读取的日志文件

持续更新其它插件

LogStash输入插件详解的更多相关文章

  1. Maven系列第6篇:生命周期和插件详解,此篇看过之后在maven的理解上可以超越同级别90%的人!

    maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第6篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...

  2. Uploadify 上传文件插件详解

    Uploadify 上传文件插件详解 Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中 ...

  3. Google自写插件详解

    谷歌插件详解,跳转至个人主页查看. GoogleExtension

  4. ThreeJS系列1_CinematicCameraJS插件详解

    ThreeJS系列1_CinematicCameraJS插件详解 接着上篇 ThreeJS系列1_CinematicCameraJS插件介绍 看属性的来龙去脉 看方法作用 通过调整属性查看效果 总结 ...

  5. Web自动化框架LazyUI使用手册(3)--单个xpath抓取插件详解(selenium元素抓取,有此插件,便再无所求!)

    概述 前面的一篇博文粗略介绍了基于lazyUI的第一个demo,本文将详细描述此工具的设计和使用. 元素获取插件:LazyUI Elements Extractor,作为Chrome插件,用于抓取页面 ...

  6. Android核心分析之十五Android输入系统之输入路径详解

       Android用户事件输入路径 1 输入路径的一般原理 按键,鼠标消息从收集到最终将发送到焦点窗口,要经历怎样的路径,是Android GWES设计方案中需要详细考虑的问题.按键,鼠标等用户消息 ...

  7. JQuery自定义插件详解之Banner图滚动插件

      前  言 JRedu JQuery是什么相信已经不需要详细介绍了.作为时下最火的JS库之一,JQuery将其"Write Less,Do More!"的口号发挥的极致.而帮助J ...

  8. maven生命周期和插件详解

    生命周期 什么是生命周期? maven的生命周期就是对所有的构建过程进行抽象和统一.maven从大量项目和构建工具中总结了一套高度完善的.易扩展的生命周期.这个生命周期包含项目的清理.初始化.编译.测 ...

  9. Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解

    生成器设计思路: 连接数据库 -> 获取表结构 -> 生成文件 1 下载与安装 官网文档入口 最方便的 maven 插件使用方式 贴至pom 文件 2 新建配置文件 填充配置信息(官网示例 ...

  10. maven打包插件详解

    maven-jar-plugin插件的使用及详解 该插件的xml配置及详解如下: <plugin> <groupId>org.apache.maven.plugins</ ...

随机推荐

  1. 《HelloGitHub》第 108 期

    兴趣是最好的老师,HelloGitHub 让你对开源感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...

  2. 在IIS Express下部署NuGet私服

    用途 个人开发,部署自己的NuGet pkg. 环境 Win11 IIS Express (轻度使用,不安装IIS,而使用VS预装的IIS Express) VS2022 步骤 开发环境准备 因我拟用 ...

  3. Hack The Box-Chemistry靶机渗透

    通过信息收集访问5000端口,cif历史cve漏洞反弹shell,获取数据库,利用低权限用户登录,监听端口,开放8080端口,aihttp服务漏洞文件包含,获取root密码hash值,ssh指定登录 ...

  4. 《机器人SLAM导航核心技术与实战》先导课:SLAM的应用价值与技术难点

    <机器人SLAM导航核心技术与实战>先导课:SLAM的应用价值与技术难点 视频讲解 [先导课]3.SLAM的应用价值与技术难点-视频讲解 [先导课]3.1.SLAM的应用价值与技术难点-S ...

  5. Codeforces Round 1016 (Div. 3)题解

    题目地址 https://codeforces.com/contest/2093 锐评 在所有题意都理解正确的情况下,整体难度不算太难.但是偏偏存在F这么恶心的题意,样例都不带解释一下的,根本看不懂题 ...

  6. mybatis数据的批量插入

    1:xml的配置 <insert id="insertUserBatch"> insert into user(username, birthday, sex, add ...

  7. Vue的前端项目开发环境搭建

    一.本机window端:安装Node.js,其实质性功能相当于,java的maven https://nodejs.org/en/download/ 二.本机window端:检查Node.js的版本 ...

  8. .NET周刊【3月第5期 2025-03-30】

    国内文章 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp智能体框架开发语音交互 https://www.cnblogs.com/GreenShad ...

  9. MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别?

    MySQL InnoDB 引擎中的聚簇索引和非聚簇索引的区别 在 MySQL 的 InnoDB 存储引擎中,聚簇索引和非聚簇索引是两种常见的索引类型,它们在数据存储结构和使用场景上有显著区别. 1. ...

  10. AI提示词:一个通用C++ ECS系统实现(事件条件动作系统)

    AI提示词 using eca_cond = bool(*)(...); using eca_action = void(*)(...); class eca_info { public: eca_c ...