logstash 1.4.0 安装
logstash更新到了1.4.0版本了,结构的变化更加方便管理使用了。原来是jar包结构,现在是使用常见的bin目录结构。目前下载1.4.0真心不容易啊,花了1天时间下载完。
简单运行 (注:windows运行会错误,请使用linux测试)
首先我们下载二进制包
curl -O https://download.elasticsearch.org/logstash/logstash/logstash-1.4.0.tar.gz
然后解压并且进入该目录
tar -zxvf logstash-1.4.0.tar.gz
cd logstash-1.4.0
最后运行
bin/logstash -e 'input { stdin { } } output { stdout {} }'
运行后可以在控制台输入一些字符试一试(运行需要时间,1秒左右吧),比如
hello world
2014-04-03T02:16:21.620+0000 avalon hello world # 控制台自动输出
是不是真的很简单。好,我们来结束这次运行Ctrl+c
,回车一下清除日志的输出。
简单格式化数据
上面简单运行了是不是很有趣?现在我们来对录入的格式进行一点点处理, 然后录入的数据按照json的格式显示,并且加上一些附带的信息,键入下面命令
bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'
然后输入一点信息试一试
good morning
{
"message" => "good morning",
"@version" => "1",
"@timestamp" => "2014-04-03T02:24:16.635Z",
"host" => "avalon"
}
上面只是非常基础的格式化,如果你需要进行结果的格式化一般需要filter来辅助完成,它非常灵活的处理你录入的数据。(后续详细介绍)
储存数据到Elasticsearch
现在,你可能感觉到,数据只是全部录入logstash,并不是分开的,你需要的是一个分布式的日志收集。别担心logstash提供了采用
Elasticsearch数据储存统计,而Elasticsearch可以满足你的要求。键入下面命令下载Elasticsearch
curl -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.1.tar.gz
解压
tar zxvf elasticsearch-1.0.1.tar.gz
cd elasticsearch-1.0.1/
注 每个版本的logstash都有对应匹配的的Elasticsearch,请使用匹配的版本
默认的logstash与Elasticsearch集成式很方便的,首先运行在一个终端运行Elasticsearch
./bin/elasticsearch
然后再另外的一个终端运行logstash
bin/logstash -e 'input { stdin { } } output { elasticsearch { host => localhost } }'
键入一点信息
you know, for logs
然后访问http://localhost:9200/_search?pretty
或者使用以下命令获取
curl 'http://localhost:9200/_search?pretty'
然后你会获得以下数据
{
took: 50,
timed_out: false,
_shards: {
total: 5,
successful: 5,
failed: 0
},
hits: {
total: 1,
max_score: 1,
hits: [
{
_index: "logstash-2014.04.03",
_type: "logs",
_id: "QjayIqUPT0WuHuAS-vl1mQ",
_score: 1,
_source: {
message: "you konw, for logs",
@version: "1",
@timestamp: "2014-04-03T02:50:00.204Z",
host: "avalon"
}
}
]
}
}
恭喜!你成功完成了Logstash集成Elasticsearch
Elasticsearch插件
如果你想查询logstash的数据可以使用Elasticearch-kopf插件,关于Elasticearch-kopf你可以参考这里http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-plugins.html,安装在Elasticsearch的解压目录下键入,它会自动下载安装
bin/plugin -install lmenezes/elasticsearch-kopf
安装完成你可以访问http://localhost:9200/_plugin/kopf
使用
多输出
如果你需要输出数据到多处可以类似如下配置,一下是采用stdout
和elasticsearch
来完成
bin/logstash -e 'input { stdin { } } output { elasticsearch { host => localhost } stdout { } }'
默认索引
你可能注意到了logstash会在elasticsearch中添加一个索引,索引格式类似于logstash-YYYY.MM.DD
。这会明天在0(GMT)点产生一个索引。
logstash会自动匹配索引。当然,也可以自定义配置,你可以使用Elasticsearch Curator tool
向高级配置迈进
熟悉高级配置之前,我们得先了解logstash的实现的基础结构。
事件生命周期
input、output、codec、filter都是logstash的配置核心。通过创建事件的处理,logstash可以提取数据,把数据提供给Elasticsearch,然后你可以通过Elasticsearch来查询你的数据。让我们来看看logstash提供了什么可以配置的东西吧。如果想知道更多关于logstash的事件请访问logstash 事件周期
input(输入)
input的机制是让日志数据进入logstash。比如下面常用的:
- [] file: 以文件来读取日志数据,像linux的
tail -0a
命令。 - syslog:监听514端口的系统日志消息,并根据RFC3164格式解析。
- redis: 采用redis来读取。
- lumberjack: 采用lumberjack protocol来处理事件。现在叫logstash-forwarder
filter(过滤或者提取)
filter通常使用是介入logstash的链中处理数据。它通常与条件判断一起使用,一些常用的filter
- grok: 几乎可以解析任何文本的数据,它能把数据格式化成你需要的查询格式。系统提供了120种正则,很多都是你需要的。
- mutate: 你可以使用它重命名,删除,替换和修改field。
- drop: 当一个事件完成了后丢弃,比如debug事件。
- clone: 克隆一个事件,可以增加或者删除field。
- geoip: 增加有关ip地理位置的信息(在kibana显示)
output(输出)
输出时logstash的最后处理阶段了。一个事件可以通过多个输出来处理,但是一旦所有的输出都完成,这事件将运行结束。一些例子。
- elasticsearch: 如果你打算把你的数据保存在一个高效、便捷、容易的地方,elasticsearch是不错的选择。
- file: 保存入文件
- graphite: 将数据发送到graphite。graphite是一个开源工具,用于储存图像变量http://graphite.wikidot.com/
- statsd: 是一个服务”静态监听,类似于计数器和定时器,通过UDP发送数据到后端服务”。
codec(编解码)
codec其实可以作为输入或者输出的一部分。codec可以很方便的让你进行序列化的数据传输。比如json、msgpack和plain(文本)
- json: json格式的编码/解码
- multiline: 如果需要多行文本事件,这个就可以把多行合并成为一个单行事件。如java的异常等等。
简单介绍就到这,下一篇练习如何使用。