Logstash-读取文件

file区段

Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化。
这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。所以,不要担心 logstash 会漏过你的数据。

.sincedb 文件中记录了每个被监听的文件的 inode, major number, minor number 和 pos。

Setting Input type Required Effect
close_older number or string_duration No 文件输入将关闭上次读取指定持续时间的任何文件(如果指定了数字,则为秒).默认1hour。 这具有不同的含义,具体取决于文件是tailed或read。 如果是tailed,并且传入数据中存在大的时间间隔,则可以关闭文件(允许打开其他文件),但是在检测到新数据时将排队等待重新打开。 如果read,文件将在从读取最后一个字节后的closed_older秒后关闭。 如果将插件升级到4.1.0+,读取不拖尾并且不切换到使用读取模式,则保留此设置以实现向后兼容性。
delimiter string No 设置新行分隔符,默认为“\ n”。 请注意,在读取压缩文件时,不使用此设置,而是使用标准的Windows或Unix行结尾。
discover_interval number No 我们多长时间在路径选项中展开文件名模式以发现要观看的新文件。 该值是stat_interval的倍数,例如 如果stat_interval是“500 ms”,则可以每15 X 500毫秒 - 7.5秒发现新文件文件。
exclude array No 排除(与文件名匹配,而不是完整路径)。 文件名模式在这里也是有效的。path => "/var/log/" \n exclude => ".gz"
file_chunk_count number No 与file_chunk_size结合使用时,此选项设置在移动到下一个活动文件之前从每个文件中读取多少块(带或条带)。 例如,file_chunk_count为32,file_chunk_size为32KB,将处理每个活动文件的下一个1MB。 由于默认值非常大,因此在移动到下一个活动文件之前,文件会被有效地读取到EOF。
file_chunk_size number No 以块或块的形式从磁盘读取文件内容,并从块中提取行。 请参阅file_chunk_count以查看默认情况下更改此设置的原因和时间。
file_completed_action string, one of ["delete", "log", "log_and_delete"] No 在读取模式下,完成文件时应执行什么操作。 如果指定了删除,则将删除该文件。 如果指定了log,则将文件的完整路径记录到file_completed_log_path设置中指定的文件中。 如果指定了log_and_delete,则会执行上述两个操作。
file_completed_log_path string No 应该将完整读取的文件路径附加到哪个文件。 当file_completed_action为log或log_and_delete时,仅指定文件的此路径。 重要提示:此文件仅附加到 - 它可能会变得非常大。 您负责文件轮换。
file_sort_by string, one of ["last_modified", "path"] No 应该使用“监视”文件的哪个属性对其进行排序。 可以按修改日期或完整路径字母对文件进行排序。 以前,已发现并因此“监视”的文件的处理顺序取决于操作系统。
file_sort_direction string, one of ["asc", "desc"] No 在排序“已观看”文件时,在升序和降序之间进行选择。 如果最早的数据首先是重要的,那么last_modified + asc的默认值是好的。 如果最新的数据首先更重要,那么选择last_modified + desc。 如果对文件完整路径使用特殊命名约定,那么path + asc可能有助于控制文件处理的顺序。
ignore_older number or string_duration No 当文件输入发现在指定持续时间之前最后修改的文件(如果指定了数字,则为秒),将忽略该文件。 在发现之后,如果修改了被忽略的文件,则不再忽略它并读取任何新数据。 默认情况下,禁用此选项。 注意这个单位是几秒钟。
max_open_files number No 此输入在任何时候消耗的最大file_handles数是多少。 如果需要处理的文件多于此数字,请使用close_older关闭某些文件。 这不应设置为OS可以执行的最大值,因为其他LS插件和OS进程需要文件句柄。 内部设置默认值4095。
mode string, one of ["tail", "read"] No 您希望文件输入在什么模式下运行。关闭几个文件或读取许多内容完整的文件。 读取模式现在支持gzip文件处理。 如果指定“read”,则忽略以下其他设置:start_position(文件始终从头开始读取)close_older(达到EOF时文件自动关闭)如果指定“read”,则注意以下设置:ignore_older(不处理旧文件)file_completed_action(处理文件时应采取的操作)file_completed_log_path(应该将完成的文件路径记录到哪个文件)
path array Yes 要用作输入的文件的路径。 您可以在此处使用文件名模式,例如/var/log/.log。 如果使用/var/log//.log这样的模式,将对所有* .log文件进行/ var / log的递归搜索。 路径必须是绝对的,不能是相对的。
sincedb_clean_after number or string_duration No sincedb记录现在有一个与之关联的最后一个活动时间戳。 如果在过去N天内未在跟踪文件中检测到任何更改,则其sincedb跟踪记录将过期,并且不会保留。 此选项有助于防止inode回收问题。 Filebeat有一个关于inode回收的常见问题.
sincedb_path string No 将写入磁盘的sincedb数据库文件的路径(跟踪受监视日志文件的当前位置)。 默认情况下会将sincedb文件写入<path.data> / plugins / inputs / file注意:它必须是文件路径而不是目录路径
sincedb_write_interval number or string_duration No 使用受监视日志文件的当前位置编写自动数据库的频率(以秒为单位)。
start_position string, one of ["beginning", "end"] No 选择Logstash最初开始读取文件的位置:开头或结尾。 默认行为将文件视为实时流,因此从最后开始。 如果您要导入旧数据,请将其设置为开头。
stat_interval number or string_duration No 我们统计文件的频率(以秒为单位),以查看它们是否已被修改。 增加此间隔将减少我们进行的系统调用次数,但会增加检测新日志行的时间。
# file区段配置示例
input {
  file {
    path => ["/var/log/*.log", "/var/log/message"]
    type => "system"
    start_position => "beginning"
  }
}

附:file区段常用配置项及使用file区段的注意事项

编码插件codec

Codec 是 logstash 从 1.3.0 版开始新引入的概念(Codec 来自 Coder/decoder 两个单词的首字母缩写)。
有了它,我们可以在输入期处理不同类型的数据。

常见codec插件

json


nmap


rubydebug


multiline


multiline codec插件折叠多行消息并将它们合并为一个事件。

重要
如果您使用的是支持多个主机的Logstash输入插件,例如beats输入插件,则不应使用多行编解码器来处理多行事件。 这样做可能会导致流混合和损坏的事件数据。 在这种情况下,您需要在将事件数据发送到Logstash之前处理多行事件。

Setting Input type Required Effect
auto_flush_interval number No 当看到匹配的新行或者在这么多秒内没有附加新数据时,多行的累积将转换为事件。 没有默认值。 如果未设置,则不执行auto_flush。 单位:秒
charset string,可选范围见charset No 此输入中使用的字符编码。 例子包括UTF-8和cp1252
max_bytes bytes No 如果未正确定义事件边界,则事件的累积可使logstash退出并出现内存不足错误。 此设置确保在达到多个字节后刷新多行事件,它与max_lines组合使用。
max_lines number No 如果未正确定义事件边界,则事件的累积可使logstash退出并出现内存不足错误。 此设置确保在到达多行后刷新多行事件,它与max_bytes组合使用。
multiline_tag string No 使用给定标记标记多行事件。 此标记仅添加到实际上包含多行的事件中。
negate boolean No 否定正则表达式模式(如果不匹配)。默认false
pattern string Yes 正则表达式
patterns_dir array No Logstash默认带有一堆模式,因此除非您要添加其他模式,否则您不一定需要自己定义。
what string, one of ["previous", "next"] Yes 如果模式匹配,事件是否属于下一个或上一个事件?

Logstash——multiline 插件,匹配多行日志

过滤插件filter

扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!

所有filter插件都支持的几个配置项

Setting Input type Required Effect
add_field hash No 向事件添加任意字段。 字段名称可以是动态的,并使用%{field}包含事件的一部分。
add_tag array No 向事件添加任意标记。 标签可以是动态的,并使用%{field}语法包含事件的一部分。
enable_metric boolean No 禁用或启用此特定插件实例的度量标准记录,默认情况下,我们会记录所有可用的度量标准,但您可以禁用特定插件的度量标准收集。
id string No 为插件配置添加唯一ID。例如,如果您有2个date过滤器。 在这种情况下添加命名ID将有助于在使用监视API时监视Logstash。
periodic_flush boolean No 定期调用过滤器刷新方法。 可选的。
remove_field array No 从事件中删除任意字段。字段名称可以是动态的,并使用%{field}包含事件的一部分。
remove_tag array No 从事件中删除任意标记。 标签可以是动态的,并使用%{field}语法包含事件的一部分。

常见filter插件

date


日期筛选器用于解析字段中的日期,然后使用该日期或时间戳作为事件的logstash时间戳。

Setting Input type Required Effect
locale string No 区域设置主要用于解析月份名称(带MMM的模式)和工作日名称(带有EEE的模式)。
match array No [ field, formats... ]
tag_on_failure array No 没有成功匹配时,将值附加到标签字段
target string No 将匹配的时间戳存储到给定的目标字段中。 如果未提供,则默认更新事件的@timestamp字段。
timezone string No 时区ID。Joda.org available time zones page

Logstash时区、时间转换,message重组

grok


  • 使用正则表达式将非结构化事件数据解析为字段。
  • 解析任意文本并构造它。
  • 可以将非结构化日志数据解析为结构化和可查询的内容。

提示:logstash6.4.2的grok的正则文件位置:${logstach_home}/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns

mutate


mutate过滤器允许您对字段执行常规突变。 您可以重命名,删除,替换和修改事件中的字段。
logstash mutate split日志切分

dissect


使用分隔符将非结构化事件数据提取到字段中

geoip


添加有关IP地址的地理信息

json


解析json事件

kv


此过滤器有助于自动解析foo = bar种类的消息(或特定事件字段)。
举例

# string
ip=1.2.3.4 error=REFUSED
# filter
filter {
  kv { }
}
# result
ip: 1.2.3.4
error: REFUSED
# string
pin=12345~0&d=123&e=foo@bar.com&oq=bobo&ss=12345
# filter
filter {
  kv {
    field_split => "&?"
  }
}
# result
pin: 12345~0
d: 123
e: foo@bar.com
oq: bobo
ss: 12345
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • Logstash 配置一定要有一个 input 和一个 output。在演示过程中,如果没有写明 input,...
    g0阅读 4,642评论 0 1
  • Logstash使用一个名叫FileWatch的Ruby Gem库来监听文件变化。这个库支持 glob展开文件路...
    扳掘de阅读 411评论 0 0
  • 前言 日志这个东西在日常开发中起了很重要的作用。当你的服务部署到服务器上去,报了出了你意想不到的的错误,然后通过s...
    土豆肉丝盖浇饭阅读 12,501评论 0 4
  • 最近在学习ELK,安装ELK过程中,参照官网,ElasticSearch和Kibana的使用都很顺利,但是在使用l...
    junpassion阅读 11,208评论 0 1
  • 月圆月缺,冬去春来。我们以为那都是大自然具有的现象,我们接受,而且视为寻常。 其实,人间行路,又何尝不是这样?因为...
    紫洛轩阅读 275评论 0 0