先介绍下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
安装完成
进到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都会按照某种格式来返回我们输入的字符
运行命令:
./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类型等等