目录
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在管道阶段(输入→过滤器和过滤器→输出)之间使用内存中有界队列来缓冲事件。为了帮助防止数据丢失,可以持久队列,将正在进行的事件持久保存到磁盘。dead letter queue为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:bar@example.net"
- Path:my_path => "/tmp/logstash"
- String:"直接就是一个字符串"
条件语句和临时字段(看这里)
- 使用if条件语句可以在特定条件下过滤或输出事件,语法是:
if EXPRESSION { ... } else if EXPRESSION { ... } else { ... }
- 使用@metadata代表临时字段,可用于条件语句中,该字段的值不会出现这结果集中
Logstash中的通信
同一个Logstash实例中连接多个管道的信息,请参阅多管道和管道到管道通信。
不同的Logstash实例之间建立通信,请使用Logstash到Logstash的通信,或使用中间队列,例如Kafka或Redis。
利用X-Pack配置集中式管道管理
x-pack介绍,在logstash中的可行的配置,在Kibana中配置集中式管道管理
使用Logstash和相关的性能调优
-
如何确保数据的可扩展性、持久性和安全性?(看这里)
在输入插件和Logstash直接使用Kafka消息队列,输入插件把消息推送给Kafka,再由Kafka推送数据经过Logstash的Kafka输入插件输入Lagstash。
TCP,UDP和HTTP协议是将数据输入Logstash的常用方法。Logstash可以使用相应的TCP,UDP和 HTTP输入插件公开端点侦听器。TCP,UDP和HTTP源也可以通过Kafka推送数据到Logstash也可以直接通过负载均衡直接将数据输入给Logstash -
性能调优(看这里)
借助于JVisualVM工具可以分析JVM情况,根据情况进行性能调优 -
如何监控Logstash?使用API和使用X-Pack
Logstash提供了节点信息API、插件信息API、节点统计API、热点线程API来进行检索有关Logstash的运行情况。
X-Pack插件也提供了logstash相关的监控功能,将在Kibana中以图形方式展现 -
如何编写一个Logstash的Java插件(了解)