1、前言
Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。(当然,我们最喜欢的是Elasticsearch)。简单的说,logstash就是一个类似于flum的文件监听工具
2、原理介绍及组件
logstash在ELK系统中扮演着数据搬运的角色,举足轻重。我们可以看到logstash内部主要分为三个组件,输入(input),过滤器(filter),输出(output)
2.1、输入(input)
支持插件:elasticsearch,file,http_poller,jdbc,log4j,rss,rabbitmq,redis,syslog,tcp,udp…等
2.2、过滤器(filter)
支持插件:grok,json,mutate,split …等
2.3、输出(output)
支持插件:email,elasticsearch,file,http,mongodb,rabbitmq,redis,stdout,tcp,udp …等
3、logstash的优缺点
- 优点
1 、可伸缩性
节点应该在一组Logstash节点之间进行负载平衡。建议至少使用两个Logstash节点以实现高可用性。
2 、弹性
Logstash持久队列提供跨节点故障的保护。对于Logstash中的磁盘级弹性,确保磁盘冗余非常重要。
3、 可过滤
对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段
4 、可扩展
可扩展插件生态系统,提供超过200个插件,以及创建和贡献自己的灵活性。 - 缺点
1 、Logstash耗资源较大,运行占用CPU和内存高。
2 、另外没有消息队列缓存,存在数据丢失隐患。
3、下载解压安装
最新版 https://www.elastic.co/downloads/logstash
2.3.4版 https://www.elastic.co/downloads/past-releases/logstash-2-3-4
tar -xzvf logstash-2-3-4.tar.gz
4、配置结构
logstash在启动时要指定配置,这个配置中需要配置(input、filter、output)
#输入
Input{
}
#加工过滤
Filter{
}
#输出
Output{
}
以下我们简单举几个配置案例,并根据案例去启动观察
执行: ./logstash -f ./test*.conf
4.1、简单的输入输出 test1.conf
input{
stdin{}
}
output{
stdout{}
}
4.2、输入输出json test2.conf
input{
stdin{}
}
output{
stdout{
codec => json ##json输出
}
}
4.3、监听文件输出json test3.conf
input{
file{
path => "/usr/local/logs/*.log" ##指定类型为file,指定文件路径
}
}
output{
stdout{
#codec => json
}
}
4.4、监听文件输出到kafka test4.conf
input{
file{
path => "/usr/local/logs/*.log"
}
}
output{
stdout{codec => rubydebug}
kafka{
bootstrap_servers => "127.0.0.1:9092"
codec => json
topic_id => "kafka-logstash"
compression_type => "snappy"
}
}
4.5、监听文件输出到ES test5.conf
input{
file{
path => "/usr/local/logs/*.log"
}
}
output{
elasticsearch{
hosts=>["127.0.0.1:9200"]
index => "es-message-%{+YYYY.MM.dd}"
}
stdout{codec => rubydebug}
}
4.6、监听kafka输出到ES test6.conf
input{
kafka{
bootstrap_servers => ["127.0.0.1:9092"] ##kafka地址,可以是集群
##client_id => "kafka-logstash"
auto_offset_reset => "latest" ##从最新的偏移量开始消费
topics => ["kafka-logstash"] ## 数组类型,可配置多个topic
decorate_events => true #此属性会将当前topic、offset、group、partition等信息也带到message中
consumer_threads => 5
}
}
output{
elasticsearch{
hosts=>["127.0.0.1:9200"]
index => "rc-admin-business-log"
}
stdout{
#codec => json
}
}
以上是logstash的一些简单使用配置,logstash有非常灵活的配置,具体可以参考官网文档
相关参考:
https://www.cnblogs.com/huhangfei/p/7605511.html
https://www.elastic.co/cn/products/logstash
https://www.cnblogs.com/cjsblog/p/9459781.html