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使用

多输出

如果你需要输出数据到多处可以类似如下配置,一下是采用stdoutelasticsearch来完成

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的异常等等。

简单介绍就到这,下一篇练习如何使用。

参考文档