Logstash
一 应用场景形容
当今相比流行的ELK框架,即Elasticsearch,Logstash,Kibana三个开源软件的组合来构建日记平台。其中Elasticsearch用于日记搜索,Logstash用于日记的鸠合,过滤,贬责等,Kibana用于日记的界面展示。
二 Logstash先容
Logstash是一款用于给与,贬责并输出日记的器具。Logstash不错贬责各式种种的日记,包括系统日记,WEB容器日记如Apache日记和Nginx日记和Tomcat日记等,各式应用日记等。
三 Logstash浅易使用
Logstash是用ruby说话编写,Jruby算作ruby证明器。是以运行Logstash只需要装配Java就行。本文示例使用的是logstash-5.1.1版块,条目java使用1.8版块。
由于logstash使用的是Jruby 是以需要装配java 运行环境。
下载后践诺 tar zxvf logstash-5.1.1.tar.gz 解压。
Cd 到bin 目次 不错敕令行践诺
使用bin/logstash agent --help 检察参数确认
-e 背面班师跟建设信息,而欠亨过-f 参数指定建设文献。不错用于快速测试
在敕令走时行
$ bin/logstash -e 'input {stdin {} } output {stdout {} }'
然后再输入一些信息
$ bin/logstash -e 'input {stdin {} } output {stdout {} }'
hello world
2015-01-31T12:02:20.438+0000 xxxxx hello world
这里通过stdin输入信息,然后通过stdout输出信息。在输入hello world后Logstash将贬责后的信息输出到屏幕
$ bin/logstash -e 'input {stdin {} } output {stdout { codec => rubydebug } }'
goodnight moon
{
"message" => "goodnight moon",
"@version" => "1",
"@timestamp" => "2015-01-31T12:09:38.564Z",
"host" => "xxxx-elk-log"
}
Elasticsearch
ElasticSearch是一个基于Lucene的搜索处事器。它提供了一个散布式多用户才调的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开拓的。
一ElasticSearch架构旨趣
ElasticSearch 把从logtash新收到的数据写到新的索引文献里。
Lucene 把每次生成的倒排索引,叫作念一个段(segment)。然后另外使用一个
commit 文献,记载索引内所有的 segment。而生成 segment 的数据起原,则是内
存中的 buffer。动态更新进程如下:
1. 现时索引有 3 个 segment 可用。索引现象如图 2-1;
2. 新给与的数据参预内存 buffer。
3. 内存 buffer 刷到磁盘,生成一个新的 segment,commit 文献同步更新
愚弄磁盘缓存兑现的准及时检索
既然触及到磁盘,那么一个不可幸免的问题就来了:磁盘太慢了!对咱们要务及时
性很高的处事来说,这种贬责还不够。是以,在第 3 步的贬责中,还有一个中间状
态:
1. 内存 buffer 生成一个新的 segment,刷到文献系统缓存中,Lucene 即可检索
这个新 segment。
2. 文献系统缓存果然同步到磁盘上,commit 文献更新。达到图 2-3 中的现象。
这一步刷到文献系统缓存的模范,在 Elasticsearch 中,是默许建设为 1 秒拆开
的,关于大大批应用来说,险些就卓绝于是及时可搜索了。Elasticsearch 也提供了
单独的 /_refresh 接口,用户如果对 1 秒拆开还不欢快的,不错主动调用该接
口来保证搜索可见。
注:5.0 中还提供了一个新的苦求参数: ?refresh=wait_for ,不错在写入数据
后不彊制刷新但一直比及刷新才复返。
不外关于 Elastic Stack 的日记场景来说,适值相背,咱们并不需要如斯高的及时
性,而是需要更快的写入性能。是以,一般来说,咱们反而和会过 /_settings
接口大概定制 template 的形势,加大 refresh_interval 参数:
# curl -XPOST http://127.0.0.1:9200/logstash-2015.06.21/_setting
s -d'
{ "refresh_interval": "10s" }
'如果是导入历史数据的场地,那甚而不错先所有关闭掉:
segment、buffer和translog对及时性的影响
# curl -XPUT http://127.0.0.1:9200/logstash-2015.05.01 -d'
{
"settings" : {
"refresh_interval": "-1"
}
}'
在导入完成以后,修改转头大概手动调用一次即可:
# curl -XPOST http://127.0.0.1:9200/logstash-2015.05.01/_refresh
translog 提供的磁盘同步驱散
既然 refresh 仅仅写到文献系统缓存,那么第 4 步写到本体磁盘又是有什么来驱散
的?如果这工夫发生主机诞妄、硬件故障等格外情况,数据会不会丢失?
这里,其实有另一个机制来驱散。Elasticsearch 在把数据写入到内存 buffer 的同
时,其实还另外记载了一个 translog 日记。也即是说,第 2 步并不是图 2-2 的状
态,而是像图 2-5 这么:
在第 3 和第 4 步,refresh 发生的时刻,translog 日记文献一经保抓原样,如图 2-
6:
也即是说,如果在这工夫发生格外,Elasticsearch 会从 commit 位置启动,归附整
个 translog 文献中的记载,保证数据一致性。
比及果然把 segment 刷到磁盘,且 commit 文献进行更新的时刻, translog 文献才
清空。这一步,叫作念 flush。一样,Elasticsearch 也提供了 /_flush 接口。
关于 flush 操作,Elasticsearch 默许建设为:每 30 分钟主动进行一次 flush,大概
当 translog 文献大小大于 512MB (老版块是 200MB)时,主动进行一次 flush。这两
个举止,不错分离通过 index.translog.flush_threshold_period 和
index.translog.flush_threshold_size 参数修改。
如果对这两种驱散形势齐不欢快,Elasticsearch 还不错通过
index.translog.flush_threshold_ops 参数,驱散每收到若干条数据后 flush
一次。
二 ElasticSearch装配建设
ElasticSearch官方网站下载解压后bin目次 运行ElasticSearch 即可,ElasticSearch默许是使用9200端口。
ElasticSearch建设汉典机窥探需要在elasticsearch.yml建设network.host: 0.0.0.0
Elasticsearch 启动的时刻不可使用 root用户,需要更换一个用户。
Kibana#elasticsearch#
1.Kibana先容
Kibana是一个基于浏览器页面的Elasticsearch前端展示器具。Kibana沿途使用HTML说话和Javascript编写的。Kibana的web 处事器使用的是nodejs。
2.装配建设Kibana
班师解压压缩包,启动bin目次下的 kibana. Kibana使用NodeJs,建设Kibana的web处事汉典机不错窥探需要修改kibana.yml建设server.host: "0.0.0.0"。
ELK 散布式部署
在需要鸠合日记的所有处事机器上部署logstash,算作logstash agent用于监控并过滤鸠合日记,将过滤后的内容发送到Redis, 通过Kibana 页面展示。结构大体如下图。
装配部署模范
两台虚机一个是ubuntu 一个是centos,在ubuntu上装上logstash agent 让他监控 tomcat的log 日记然后把监控信息输出到 redis上,建设的 conf 如下图
启动
然后再装配一个 logstash 算作index 将redis的鸠合信息发送给 在centos上装配的 elasticsearch。算作index的 logstash conf 建设 如下
Hosts 即是 elasticsearch 方位的ip。、
启动
在centos装配 kibana。
启动 elasticsearch。
启动kibana
在windows机上掀开 浏览器 窥探 http://192.168.28.112:5601/
成果如图
ELK 和soc整合
Kibana 在ELK中主若是作念前端展示作用,在和SOC整合时不错磋商只用elasticsearch 和logstash agent index 就不错。 Elasticsearch 的rest 通过 9200 端口不错用curl 大概 浏览器班师创建检索和查询成果。 Elasticsearch提供java的 rest client ,咱们不错通过
rest client 提供的接口类来兑现索引的创建和查询
代码截图
索引查询
try {
response = restClient.performRequest("GET", "/logstash-2017.01.16/type_count/AVlt0OE5nZJjoveOa64F",
Collections.singletonMap("pretty", "true"));
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
查询 index logstash-2017.01.16 type 为 type_count id为AVlt0OE5nZJjoveOa64F 一笔记载 成果 复返如下
{
"_index" : "logstash-2017.01.16",
"_type" : "type_count",
"_id" : "AVlt0OE5nZJjoveOa64F",
"_version" : 1,
"found" : true,
"_source" : {
"path" : "/work/apache-tomcat-7.0.73/logs/catalina.out",
"@timestamp" : "2017-01-16T07:17:23.149Z",
"@version" : "1",
"host" : "xia-VirtualBox",
"message" : "信息: Server startup in 1885 ms",
"type" : "type_count",
"tags" : [ ]
}
}