LogStash的安装与使用教程

Logstash的介绍

Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。输入插件从数据源那里消费数据,过滤器插件根据你的期望修改数据,输出插件将数据写入目的地。

LogStash的安装

  1. LogStash的下载地址
  2. 安装JDK1.8
  3. 上传下载的安装包到/opt/logstash目录下,解压tar -zxvf logstash-6.5.4.tar.gz
  4. 配置全局环境变量vi /etc/profile添加如下内容
export JAVA_HOME=/usr/java/jdk1.8.0_152
export LOGSTASH_HOME=/opt/logstash/logstash-6.5.4
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$LOGSTASH_HOME/bin
  1. 查看是否安装成功:logstash -V
    显示所安装的版本号:logstash 6.5.4
  2. 运行第一个程序测试:
logstash -e'input {stdin {}} output {stdout {}}'

启动后再命令行输入Hello Word! 回车,在控制台会显示

{
      "@version" => "1",
       "message" => "Hello Word! ",
          "host" => "master",
    "@timestamp" => 2019-01-07T05:23:53.238Z
}
  1. Ctrl+C可以停止!

常用插件

File input plugin

通常,日志记录会在每行写入的末尾添加换行符。默认情况下,假定每个事件都是一行,并且一行被视为换行符之前的文本。如果您想将多个日志行连接到一个事件中,您将需要使用多行编解码器。插件在发现新文件和处理每个发现的文件之间循环。发现的文件具有生命周期,它们从“观察”或“忽略”状态开始。生命周期中的其他状态是:“主动”,“关闭”和“未观看”。

默认情况下,使用4095个文件的窗口来限制正在使用的文件句柄数。处理阶段有许多阶段:

  • 检查自上次以来“关闭”或“忽略”文件的大小是否已更改,如果是,则将其置于“已观看”状态。
  • 选择足够的“监视”文件来填充窗口中的可用空间,这些文件变为“活动”。
  • 打开并读取活动文件,默认情况下,每个文件从最后的已知位置读取到当前内容(EOF)的末尾。

文件的读取策略:

  1. 在某些情况下,能够控制首先读取哪些文件,排序以及文件是完全读取还是带状/条带化是很有用的。
  2. 完全读取的是文件A,然后是文件B,然后是文件C,等等。
  3. 带状或带状读取是先读取文件A,然后读取文件B,然后读取文件C,如此循环,再读取文件A,直到读取所有文件

带状读取是通过更改file_chunk_count或者file_chunk_size指定的。如果您希望所有文件中的一些事件尽可能早地出现在Kibana中,那么绑定和排序可能非常有用。

该插件的两种模式Tail模式与Read模式

Tail模式

在这种模式下,插件的目标是跟踪更改的文件,并在添加到每个文件时发出新的内容。在这种模式下,文件被视为一个永不结束的内容流,EOF没有特殊的意义。插件总是假设会有更多的内容。当文件被旋转时,检测到较小或为零的大小,当前位置被重置为零并继续流。必须先看到分隔符,然后才能将累积的字符发出一行。

  1. 在Tail模式下的文件

无论文件是通过重命名还是复制操作旋转,都可以通过此输入检测和处理文件旋转。要支持在轮换发生后写入旋转文件一段时间的程序,请在文件名模式中包含原始文件名和轮换文件名(例如/ var / log / syslog和/var/log/syslog.1)观看(path选项)。对于一个重命名,索引节点将作为从已移动被检测 /var/log/syslog到/var/log/syslog.1因此“状态”也在内部移动,旧内容将不会被重读,但重命名文件中的任何新内容都将被读取。对于复制/截断复制的内容到新文件路径(如果发现),将被视为新发现并从头开始读取。因此,复制的文件路径不应该在要监视的文件名模式中(path选项)。将检测到截断并将“最后读取”位置更新为零。

Read模式

在这种模式下,插件将每个文件视为内容完整,即有限的行流,现在EOF非常重要。不需要最后一个分隔符,因为EOF意味着可以将累积的字符作为一行发出。此外,这里的EOF意味着可以关闭文件并将其置于“未监视”状态——这将自动释放活动窗口中的空间。这种模式还可以处理内容完整的压缩文件。读取模式还允许在完全处理文件之后执行操作。

与Flume的区别:在过去尝试模拟读模式同时仍然假设无限流并不理想,专用读模式是一种改进。

对监视文件读取的当前位置上

该插件通过在一个名为sincedb的单独文件中记录当前位置来跟踪每个文件中的当前位置。这使得停止和重新启动Logstash成为可能,并让它在不丢失在停止Logstash时添加到文件中的行数的情况下,从停止的地方继续运行。

默认情况下,sincedb文件被放置在Logstash的数据目录中,文件名基于所监视的文件名模式(即path选项)。因此,更改文件名模式将导致使用一个新的sincedb文件,并且将丢失任何现有的当前位置状态。如果您以任意频率更改模式,那么使用sincedb_path选项显式地选择一个sincedb路径可能是有意义的。

通过标识符跟踪文件。该标识符由inode,主设备号和次设备号组成。在Windows中,从kernel32API调用中获取不同的标识符。
Sincedb记录现在可以过期,这意味着在一段时间后不会记住旧文件的读取位置。文件系统可能需要重用新内容的inode。理想情况下,我们不会使用旧内容的读取位置,但我们没有可靠的方法来检测发生了inode重用。这与读取模式更相关,其中在sincedb中跟踪了大量文件。但请记住,如果记录已过期,将再次读取先前看到的文件。

Sincedb文件是四列、五列或六列的文本文件:

  1. node编号(或等效的)。
  2. 文件系统的主要设备号(或同等设备)。
  3. 文件系统的次要设备号(或等效设备号)。
  4. 文件中的当前字节偏移量。
  5. 最后一个活动时间戳(浮点数)。
  6. 此记录匹配的最后一个已知路径(对于转换为新格式的旧sincedb记录,该路径为空)。

从远程网络卷读取

文件输入未在远程文件系统(如NFS,Samba,s3fs-fuse等)上进行全面测试,但偶尔会测试NFS。远程FS客户端给出的文件大小用于控制在任何给定时间读取的数据量,以防止读取已分配但尚未填充的内存。由于我们在标识符中使用设备major和minor来跟踪文件的“最后读取”位置,并且在重新装入设备主要和次要可以更改时,sincedb记录可能在重新安装时不匹配。读取模式可能不适用于远程文件系统,因为客户端发现时的文件大小可能与远程端的文件大小不同,这是由于远程客户端复制过程中的延迟。

文件输入配置选项

设置输入类型是否必须
close_oldernumber or string_durationNO
delimiterstringNO
discover_intervalnumberNO
excludearrayNO
file_chunk_countnumberNO
file_chunk_sizenumberNO
file_completed_actionstring, one of [“delete”, “log”, “log_and_delete”]NO
file_completed_log_pathstringNO
file_sort_bystring, one of [“last_modified”, “path”]NO
file_sort_directionstring, one of [“asc”, “desc”]NO
ignore_oldernumber or string_durationNO
max_open_filesnumberNO
modestring, one of [“tail”, “read”]NO
patharrayYes
sincedb_clean_afternumber or string_durationNO
sincedb_pathstringNO
sincedb_write_intervalnumber or string_durationNO
start_positionstring, one of [“beginning”, “end”]NO
stat_intervalnumber or string_durationNO
  1. close_older
  • 值类型是number或string_duration
  • 默认值是“1 hour”

文件输入将关闭上次读取指定持续时间的任何文件(如果指定了数字,则为秒)。这具有不同的含义,具体取决于文件是否被加尾或读取。如果拖尾,并且传入数据中存在大的时间间隔,则可以关闭文件(允许打开其他文件),但是在检测到新数据时将排队等待重新打开。如果读取,文件将在从最后一个字节被读取后的closed_older秒后关闭。

  1. delimiter
  • 值类型是字符串
  • 默认值是“\n”

设置新行分隔符,默认为“\ n”。请注意,在读取压缩文件时,不使用此设置,而是使用标准的Windows或Unix行结尾。

  1. discover_interval
  • 值类型是数字
  • 默认值是15

我们多长时间扩展path选项中的文件名模式以发现要观看的新文件。该值是倍数stat_interval,例如,如果stat_interval是“500 ms”,则可以每15 X 500毫秒 - 7.5秒发现新文件文件。在实践中,这将是最好的情况,因为需要考虑阅读新内容所花费的时间。

  1. exclude
  • 值类型是数组
  • 此设置没有默认值

排除(与文件名匹配,而不是完整路径)。文件名模式在这里也是有效的。
例如,如果你有path =>“/ var / log / *”

在Tail模式下,您可能希望排除gzip压缩文件:
exclude =>“* .gz”

  1. file_chunk_count
  • 值类型是数字
  • 默认值是4611686018427387903

当与file_chunk_size组合时,该选项设置在移动到下一个活动文件之前从每个文件读取多少块(带或条纹)。例如,file_chunk_count为32和file_chunk_size 32KB将处理每个活动文件中的下一个1MB。由于默认值非常大,因此在移动到下一个活动文件之前,该文件被有效地读入EOF。

  1. file_chunk_size
  • 值类型是数字
  • 默认值为32768(32KB)

以块或块的形式从磁盘读取文件内容,并从块中提取行。请参见file_chunk_count以了解为什么以及何时从默认设置更改此设置。

  1. file_completed_action
  • 值可以任何的:delete;log;log_and_delete
  • 默认是delete

在read模式下,完成文件时应执行什么操作。如果删除指定那么该文件将被删除。如果指定了log,则文件的完整路径将记录到file_completed_log_path设置中指定的文件中 。如果log_and_delete指定,则执行上述两个操作。

  1. file_completed_log_path
  • 值类型是字符串
  • 此设置没有默认值

应该将完全读取的文件路径添加到哪个文件中。只有当file_completed_action是log或log_and_delete时,才将此路径指定到文件。重要提示:此文件仅追加到-它可以变得非常大。你负责文件的轮换

  1. file_sort_by
  • 值可以是任何的:last_modified,path
  • 默认是last_modified

应该使用“监视”文件的哪个属性对其进行排序。可以按修改日期或完整路径字母对文件进行排序。以前,已发现并因此“监视”的文件的处理顺序取决于操作系统。

  1. file_sort_direction
  • 值可以是任何的:asc;desc
  • 默认是asc

在排序“监视”文件时,在升序和降序之间进行选择。如果最早的数据首先是重要的,那么默认值last_modified+ asc是好的。如果最新的数据首先更重要,那么选择last_modified+ desc。如果对文件完整路径使用特殊命名约定,则可能 path+ asc将有助于控制文件处理的顺序。

  1. ignore_older
  • 值类型是number或string_duration
  • 此设置没有默认值。

当文件输入发现在指定持续时间之前最后修改的文件(如果指定了数字,则为秒),将忽略该文件。在发现之后,如果修改了被忽略的文件,则不再忽略它,并且读取任何新数据。默认情况下,禁用此选项。注意这个单位是几秒钟。

  1. max_open_files
  • 值类型是数字
  • 此设置没有默认值

此输入在任何时候消耗的最大file_handles数是多少。如果需要处理的文件多于此数字,请使用close_older关闭某些文件。这不应该设置为OS可以执行的最大值,因为其他LS插件和OS进程需要文件句柄。内部设置默认值4095。

  1. mode
  • 值可以值Tail或者read
  • 默认值为tail

您希望文件输入在什么模式下运行。删除几个文件或读取许多内容完整的文件。读取模式现在支持gzip文件处理。如果指定“read”,则忽略以下其他设置:

  • start_position (始终从头开始读取文件)
  • close_older(达到EOF时文件会自动关闭)
    如果指定“read”,则注意以下设置:
  • ignore_older (不处理旧文件)
  • file_completed_action (处理文件时应采取什么行动)
  • file_completed_log_path (应该将完成的文件路径记录到哪个文件)
  1. path
  • 这是必须设置
  • 值类型是数组
  • 此设置没有默认值

要用作输入的文件的路径。您可以在这里使用文件名模式,例如/var/log/.log。
如果您使用类似/var/log/**/
.log的模式,将对所有*执行/var/log的递归搜索。日志文件。路径必须是绝对的,不能是相对的。

您还可以配置多个路径。请参阅Logstash配置页面的示例。

  1. sincedb_clean_after
  • 值类型是number或string_duration
  • 此设置的默认值为“2 weeks”。
  • 如果指定了数字,则将其解释为天数,并且可以是十进制,例如0.5是12小时。

sincedb记录现在有一个与之关联的最后一个活动时间戳。如果在过去N天内未在跟踪文件中检测到任何更改,则其sincedb跟踪记录将过期,并且不会保留。此选项有助于防止inode回收问题。

  1. sincedb_path
  • 值类型是字符串
  • 此设置没有默认值

将写入磁盘的sincedb数据库文件的路径(跟踪受监视日志文件的当前位置)。默认情况下会将sincedb文件写入<path.data>/plugins/inputs/file 注意:它必须是文件路径而不是目录路径

  1. sincedb_write_interval
  • 值类型是number或string_duration
  • 默认值是“15 seconds”

使用受监视日志文件的当前位置编写自动数据库的频率(以秒为单位)。

  1. start_position
  • 值可以是任何的:beginning,end
  • 默认值是“end”

选择Logstash最初开始读取文件的位置:开头或结尾。默认行为将文件视为实时流,因此从最后开始。如果您要导入旧数据,请将其设置为开头。

此选项仅修改文件是新的且之前未见过的“初次接触”情况,即Logstash读取的sincedb文件中没有记录当前位置的文件。如果之前已经看过文件,则此选项无效,并且将使用sincedb文件中记录的位置。

  1. stat_interval
  • 值类型是number或string_duration
  • 默认值是“1 second”

我们统计文件的频率(以秒为单位)以查看它们是否已被修改。增加此间隔将减少我们进行的系统调用次数,但会增加检测新日志行的时间。

注意:发现新文件并检查它们是否已经增长/缩小发生在循环中。此循环将stat_interval在再次循环之前休眠几秒钟。但是,如果文件增长,则会读取新内容并将行排队。在所有增长的文件中读取和排队可能需要一些时间,尤其是在管道拥挤的情况下。因此整个循环时间是stat_interval文件读取时间的组合 。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在 Ubuntu 系统上安装 Logstash 的步骤: 1. 安装 Java:Logstash 是基于 Java 开发的,因此需要先安装 Java。在终端输入以下命令: ``` sudo apt install openjdk-8-jdk ``` 2. 导入 Logstash GPG 密钥: ``` wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - ``` 3. 添加 Logstash 软件包源: ``` echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list ``` 4. 更新软件包列表: ``` sudo apt update ``` 5. 安装 Logstash: ``` sudo apt install logstash ``` 6. 启动 Logstash: ``` sudo systemctl start logstash ``` 7. 验证 Logstash 是否在运行: ``` sudo systemctl status logstash ``` 如果 Logstash 启动成功,你应该能够看到类似于以下的输出: ``` ● logstash.service - logstash Loaded: loaded (/usr/lib/systemd/system/logstash.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2019-04-23 16:39:23 UTC; 3s ago Main PID: 20134 (java) Tasks: 21 Memory: 114.5M CPU: 2.228s CGroup: /system.slice/logstash.service └─20134 /usr/bin/java -Xms256m -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.compile.invokedynamic=true -Djruby.jit.threshold=0 -Djava.security.egd=file:/dev/urandom -Dlogstash.home=/usr/share/logstash -Dlogstash.config.path=/etc/logstash/conf.d -Dlogstash.log.dir=/var/log/logstash -Djava.io.tmpdir=/tmp/logstash -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/logstash -XX:ErrorFile=/var/log/logstash/hs_err_pid%p.log -cp /usr/share/logstash/logstash-core/lib/jars/animal-sniffer-annotations-1.14.jar:/usr/share/logstash/logstash-core/lib/jars/commons-codec-1.11.jar:/usr/share/logstash/logstash-core/lib/jars/commons-compiler-3.0.10.jar:/usr/share/logstash/logstash-core/lib/jars/error_prone_annotations-2.0.19.jar:/usr/share/logstash/logstash-core/lib/jars/hdr_histogram-2.1.9.jar:/usr/share/logstash/logstash-core/lib/jars/hsqldb-2.4.0.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-core-2.8.11.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-dataformat-cbor-2.8.11.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-dataformat-yaml-2.8.11.jar:/usr/share/logstash/logstash-core/lib/jars/janino-3.0.10.jar:/usr/share/logstash/logstash-core/lib/jars/javassist-3.22.0-CR2.jar:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.2.6.0.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-api-2.10.0.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-core-2.10.0.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-slf4j-impl-2.10.0.jar:/usr/share/logstash/logstash-core/lib/jars/logstash-core.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-analyzers-common-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-backward-codecs-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-core-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-grouping-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-highlighter-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-join-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-memory-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-misc-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-queries-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-queryparser-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-sandbox-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-spatial3d-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-spatial-extras-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-spatial-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/lucene-suggest-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/netty-all-4.1.24.Final.jar:/usr/share/logstash/logstash-core/lib/jars/opencensus-api-0.15.0.jar:/usr/share/logstash/logstash-core/lib/jars/opencensus-contrib-grpc-metrics-0.15.0.jar:/usr/share/logstash/logstash-core/lib/jars/parent-join-client-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/parent-join-common-7.5.0.jar:/usr/share/logstash/logstash-core/lib/jars/protobuf-java-3.6.1.jar:/usr/share/logstash/logstash-core/lib/jars/roaringbitmap-0.7.45.jar:/usr/share/logstash/logstash-core/lib/jars/snakeyaml-1.23.jar:/usr/share/logstash/logstash-core/lib/jars/sockslib-1.1.2.jar:/usr/share/logstash/logstash-core/lib/jars/taggi-1.0.jar:/usr/share/logstash/logstash-core/lib/jars/t-digest-3.2.jar org.logstash.Logstash Apr 23 16:39:23 ubuntu systemd[1]: Started logstash. ``` 现在你已经成功安装Logstash

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值