数据采集-Logstash初探
2019-02-13 本文已影响4人
neo_ng
outline
- 什么是Logstash
- Logstash安装
- 运行及常用命令
- 输入输出
- 过滤
什么是Logstash
Logstash 项目诞生于 2009 年 8 月 2 日。其作者是世界著名的运维工程师乔丹西塞(JordanSissel)
Logstash 是一个 input | decode | filter | encode | output 的数据流!codec 就是用来 decode、encode 事件的
Logstash 社区通常习惯用 shipper,broker 和 indexer 来描述数据流中不同进程各自的角色。如下图:
logstash-arch.jpg
Logstash安装
- 前提条件: 机器已经安装好jdk
- Elastic官网下载logstash安装
- 解压缩
运行及常用命令
采集控制台数据,输出数据至控制台,脚本支持参数
cd logstash/bin
./logstash -e 'input { stdin { } } output { stdout {} }'
-t 测试配置文件是否正确
-f 指定配置文件启动
输入输出
支持的输入
- stdin
- 文件
- TCP
- generator
- syslog
- Redis
- Collectd
支持的输出
- Stdout
- File
- Elasticsearch
- Redis
- TCP
- Statsd
- Exec
还支持的插件
- Kafka
- HDFS
- Scribe
输入输出配置文件例子
采集控制台数据,输出数据到文件
input {
stdin {
}
}
output {
stdout {
}
}
采集文件数据,输出数据至ES
input {
file {
path => ["/usr/local/package/testL.log"]
type => "system"
start_position => "beginning"
#表示多就去path路径下查看是够有新的文件产生。默认是15秒检查一次。
discover_interval => 15
close_older => 3600
#已经监听的文件,若超过这个时间内没有更新,就关闭监听该文件的句柄,默认一天
ignore_older => 86400
#logstash 每隔多 久检查一次被监听文件状态( 是否有更新) , 默认是 1 秒。
stat_interval => 1
}
}
output {
if "_grokparsefailure" not in [tags]{
#根据规则转化成功的日志才输出到es
elasticsearch {
# 导出到es,最常用的插件
codec => "json"
hosts => ["XX.XX.XX.XX:8030"]
index => "test_logstash"
#根据请求接口名动态生成动态
document_type => "test_logstash"
#flush_size => 500
#idle_flush_time => 1
}
#这里除了es,还可以把转换好的内容输出到其他路径
}else{
#转换失败的日志就不做处理
}
}
过滤器
丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素
Grok
Grok 是 Logstash 最重要的插件。你可以在 grok 里预定义好命名正则表达式,在稍后(grok参数或者其他正则表达式里)引用它。
实际运用中,我们需要处理各种各样的日志文件,如果你都是在配置文件里各自写一行自己的表达式,就完全不可管理了。所以,我们建议是把所有的 grok 表达式统一写入到一个地方。然后用 filter/grok 的 patterns_dir 选项来指明。
filter {
grok {
patterns_dir => "/path/to/your/own/patterns"
match => {
"message" => "%{SYSLOGBASE} %{DATA:message}"
}
overwrite => ["message"]
}
}
采坑记录:
logstash最佳实践
使用ELK搭建统一日志分析平台