Logstash知识点

Logstash的基本知识

Logstash是什么

logstash是开源数据收集引擎,可以用数据的统一和扩充。

相关版本支持(看这里

工作原理(看这里

  • 输入
    file:从文件系统上的文件读取,非常类似于UNIX命令 tail -0F
    syslog:在知名端口514上侦听syslog消息并根据RFC3164格式进行解析
    redis:使用redis通道和redis列表从redis服务器读取。Redis经常在集中式Logstash安装中用作“代理”,该安装会将来自远程Logstash“托运人”的Logstash事件排队。
    beats:处理 Filebeat其他beat发送的数据
  • 过滤器(使用方式
    date:用于完成日期转换,可以将日期类型的字符串生成为一个新的字段,用以替代默认的
    json:将字段内容转为JSON格式
    grok:将符合某个正则规则的内容重新定义为另一个字段中。Logstash预定义了很多的正则规则,通过这些文件还可以学习到很多正则高级写法,这些规则存放在以下目录:/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns
    mutate:该插件也是使用很频繁的插件,可以对字段内容做处理,比如重命名,删除,替换和修改事件中的字段。
    dissect:基于分割符来切割字段,避免grok消耗CPU的问题,性能是grok的三倍左右。但是需要每行日志格式相似,并有明显的分割符
    geoip:添加有关IP地址地理位置的信息(还在Kibana中显示惊人的图表!)
    fingerprint :创建一个或多个字段的一致哈希(指纹),并将结果存储在新字段中。
  • 输出
    流行的Logstash输出插件
    file:输出到文件
    email:收到输出时,它会根据某些条件发送电子邮件
    elasticsearch:输出到elasticsearch集群,这是Logstash最常见和最推荐的输出
    stdout:标准输出流
    redis:事件写入redis队列,并用作许多ELK实现的代理
    mongodb:输出到mongodb
    kafka:输出到kafka topic
  • 编解码器:
    编解码器基本上是流过滤器,可以作为输入或输出的一部分进行操作。编解码器使您可以轻松地将消息的传输与序列化过程分开。流行的编解码器有:
    json:以JSON格式编码或解码数据。
    plain插件:主要用于事件之间没有分隔的纯文本。
    multiline:将多行文本事件(例如java异常和stacktrace消息)合并为一个事件。

常用的过滤器和编解码器插件

执行模型

Logstash事件处理管道协调输入,过滤器和输出的执行。
Logstash在管道阶段(输入→过滤器和过滤器→输出)之间使用内存中有界队列来缓冲事件。为了帮助防止数据丢失,可以持久队列,将正在进行的事件持久保存到磁盘。死信队列为Logstash无法处理的事件提供磁盘存储。默认情况下,死信队列是禁用的。

Logstash配置文件

logstash.yml

包含Logstash配置标志。您可以在此文件中设置标志,而不是在命令行中传递标志。您在命令行上设置的所有标志都将覆盖logstash.yml文件中的相应设置。有关更多信息,请参见logstash.yml

pipelines.yml

包含用于在单个Logstash实例中运行多个管道的框架和说明。有关更多信息,请参见多管道

jvm.options

包含JVM配置标志。使用此文件来设置总堆空间的初始值和最大值。您也可以使用此文件设置Logstash的语言环境。在单独的行上指定每个标志。此文件中的所有其他设置都被视为专家设置。

log4j2.properties

包含log4j 2库的默认设置。有关更多信息,请参见Log4j2配置

startup.options (Linux)

在安装Logstash软件包时,system-install脚本将在安装过程结束时执行,并使用中指定的设置startup.options来设置选项,例如用户,组,服务名称和服务描述。

Logstash.config(看这里

基本结构:

input {
  插件{
    具体插件配置,插件的配置包括插件名称,后跟该插件的一组设置
    name => value
  }
}

filter {
  插件{
    具体插件配置
  }
}

output {
  插件{
    具体插件配置
  }
}

插件配置值的支持数据类型:

  • Array:users => [ {id => 1, name => bob}, {id => 2, name => jane} ]
  • Lists:path => [ "/var/log/messages", "/var/log/*.log" ]
  • Boolean:ssl_enable => true
  • Bytes:my_bytes => "1024" 表示1024个字节
  • codec:codec => "json"
  • Hash:match => { "field1" => "value1" "field2" => "value2" }
  • Number:port => 33
  • Password:my_password => "123456"
  • URI:my_uri => "http://foo:[email protected]"
  • Path:my_path => "/tmp/logstash"
  • String:"直接就是一个字符串"

logstash.config的配置示例

条件语句和临时字段(看这里

  1. 使用if条件语句可以在特定条件下过滤或输出事件,语法是:
    if EXPRESSION {
      ...
    } else if EXPRESSION {
      ...
    } else {
      ...
    }
  2. 使用@metadata代表临时字段,可用于条件语句中,该字段的值不会出现这结果集中

Logstash中的通信

同一个Logstash实例中连接多个管道的信息,请参阅多管道管道到管道通信

不同的Logstash实例之间建立通信,请使用Logstash到Logstash的通信,或使用中间队列,例如Kafka或Redis。

利用X-Pack配置集中式管道管理

x-pack介绍,在logstash中的可行的配置在Kibana中配置集中式管道管理

使用Logstash和相关的性能调优

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章