Logstash基本介绍和工作流程input,filter,output等说明
什么是logstash (文档地址 https://www.elastic.co/guide/en/logstash/current/index.html)
- 开源的日志收集引擎,具备实时传输的能力
- 读取不同的数据源,并进行过滤,开发者自定义规范输出到目的地
- 日志来源多(如系统日志,应用日志,服务器日志等)
流程讲解
- logstash通过管道pipeline进行传输,必选的两个组件是输入input和输出output,还有个可选过滤器filter
- logstash将数据流中等每一条数据称之为一个event,即读取每一行数据的行为叫做事件
#输入
input {
...
}
# 过滤器
filter {
...
}
# 输出
output {
...
}
Logstash插件input,filter和output的插件的基本使用
简单的配置 test.conf
input {
# 从文件读取日志信息
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
filter {
}
output {
#标准输出
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-test-%{type}-%{host}"
}
}
input插件:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
file,http,kafka,rabbitmq等
filter插件:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
grok(号称将非标准化的日志数据转换成标准化并且可搜索数据最好的方式,常用于处理Niginx,sysLog等日志)
drop(跳过某些日志,不进入output)
geoip(获取地理信息)
output插件:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
elasticSearch,cvs,email,file等
阿里云服务器部署Logstash 6,目录文件,配置讲解,基本功能测试
- 下载安装包:wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.2.tar.gz
- 解压:tar -zxvf logstash-6.2.2.tar.gz
- 快速启动(需要java8 jre,目前不支持java9):./bin/logstash -e 'input {stdin {}} output {stdout {}}'
- 目录文件说明:https://www.elastic.co/guide/en/logstash/6.2/dir-layout.html
- 配置讲解:https://www.elastic.co/guide/en/logstash/6.2/logstash-settings-file.html
- logstash.yml 修改 pipeline.workers,根据CPU核数增加1到2即可
- jvm.options 修改 xms和xmx为相同,一般是系统内存三份之二
Logstash采集输送日志input filter output流程测试
bin/logstash -f test1.conf
./logstash -f ../config/test1.conf
codec的使用( Coder/decoder 两个单词首字母缩写)
Codec: 解码编码 数据格式
好处 更方便logstash与支持自定义数据格式的运维产品进行使用
logstash更细化的处理流程
input->decode->filter->encode->output
配置一 test1.conf
input {
# 从文件读取日志信息 输送到控制台
file {
path => "/Users/jack/Desktop/person/elk/elasticsearch-6.1.1/logs/elasticsearch.log"
#codec => "json" ## 以JSON格式读取日志
type => "elasticsearch"
start_position => "beginning"
}
}
# filter {
#
# }
output {
# 标准输出
# stdout {}
# 输出进行格式化,采用Ruby库来解析日志
stdout { codec => rubydebug }
}
filter使用
例子
切割插件mutate,随意输入一串以|分割的字符,比如 "123|000|ttter|sdfds*=123|dfwe
配置二 test2_filter.conf
input {
stdin {}
}
filter {
mutate {
split => ["message", "|"]
}
}
output {
# 标准输出
# stdout {}
# 输出进行格式化,采用Ruby库来解析日志
stdout { codec => rubydebug }
}
logstash案例实战之读取日志输出到elasticsearch
logstash配置文件:配置三 test3_es.conf
input {
file {
path => "/Users/jack/Desktop/person/elk/elasticsearch-6.1.1/logs/elasticsearch.log"
type => "elasticsearch"
start_position => "beginning" #从文件开始处读写
}
}
output{
elasticsearch{
hosts=>["127.0.0.1:9201"]
index => "es-message-%{+YYYY.MM.dd}"
}
stdout{codec => rubydebug}
}
验证
查看索引列表 http://localhost:9201/_cat/indices?v
查看数据 http://localhost:9201/es-message-2018.02.26/_search