Logstash学习总结


 

背景

先介绍下ELK stack

Elasticsearch

Elasticsearch 是基于 JSON 的分布式搜索和分析引擎,专为实现水平扩展、高可用和管理便捷性而设计

Logstash

Logstash 是动态数据收集管道,拥有可扩展的插件生态系统,能够与 Elasticsearch 产生强大的协同作用。

Kibana

Kibana 能够以图表的形式呈现数据,并且具有可扩展的用户界面,供您全方位配置和管理 Elastic Stack

ELK典型使用场景

用Elasticsearch作为后台数据的存储,kibana用来前端的报表展示。Logstash在其过程中担任搬运工的角色

我们先把logstash安装然后简单用起来,然后详细解析logstash

安装

依赖:jdk7及以上版本

Logstash版本:2.3.4

步骤: 
1. 官网下载tar.gz包

链接地址:链接 
2. 扔到机器上解压

tar zxvf logstash-2.3.4.tar.gz

安装完成

简单使用示例

1.命令行输入内容然后让logstash输出内容

进到bin目录下运行:

./logstash -e 'input { stdin { } } output { stdout {} }'

logstach输出:

Settings: Default pipeline workers: 2
Pipeline main started

表示启动成功

在控制台输入123,然后logstash输出如下:

123
2017-11-02T02:42:50.836Z localhost.localdomain 123

解释:

每位系统管理员都肯定写过很多类似这样的命令:

cat randdata | awk '{print $2}' | sort | uniq -c | tee sortdata。

这个管道符 | 可以算是 Linux 世界最伟大的发明之一(另一个是“一切皆文件”)。 
Logstash 就像管道符一样!

你输入(就像命令行的 cat )数据,然后处理过滤(就像 awk 或者 uniq 之类)数据,最后输出(就像 tee )到其他地方。

当然实际上,Logstash 是用不同的线程来实现这些的

数据在线程之间以 事件 的形式流传。不要叫行,因为 logstash 可以处理多行事件。

Logstash 会给事件添加一些额外信息。最重要的就是 @timestamp,用来标记事件的发生时间。因为这个字段涉及到 Logstash 的内部流转,所以必须是一个 joda 对象,如果你尝试自己给一个字符串字段重命名为 @timestamp 的话,Logstash 会直接报错。所以,请使用 filters/date 插件 来管理这个特殊字段

此外,大多数时候,还可以见到另外几个: 
- host 标记事件发生在哪里。 
- type 标记事件的唯一类型。 
- tags 标记事件的某方面属性。这是一个数组,一个事件可以有多个标签。

-e参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件

以上例子我们在运行logstash中,定义了一个叫”stdin”的input还有一个”stdout”的output,无论我们输入什么字符,Logstash都会按照某种格式来返回我们输入的字符

2.命令行输入内容然后让logstash以某种格式输出

运行命令:

./logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'  

logstach输出:

Settings: Default pipeline workers: 2
Pipeline main started

表示启动成功

在控制台输入123,然后logstash输出如下:

123
{
       "message" => "123",
      "@version" => "1",
    "@timestamp" => "2017-11-02T02:51:55.681Z",
          "host" => "localhost.localdomain"
}

命令解释: 
codec 指定了数据输出类型是rubydebug类型,还可以是json类型等等

3.命令行输入内容然后让logstash使用Elasticsearch存储

你可能感兴趣的:(LogStash)