ref: Learning ELK Stack
Note:
《Learning ELK Stack 中文版》中由于版本问题导致多处配置和命令等无效或不正确,因此应参考官方文档。
ElasticSearch v5
ref: ElasticSearch 5学习(1)——安装Elasticsearch、Kibana和X-Pack
Elasticsearch
Elasticsearch 是一个基于Apache Lucene 的分布式开源搜索引擎。
Official Documentation:
https://www.elastic.co/downloads/elasticsearch/
- Download and unzip
- Run
$ bin/elasticsearch
- Run
$ curl -X GET http:localhost:9200/
Elasticsearch 插件
Kopf 是用JavaScript, AngularJS, JQuery和Twitter Bootstrap写的一个简单的Elasticsearch Web管理工具。
- 安装
$ bin/plugin install lmenezes/elasticsearch-kopf
- 访问
http://localhost:9200/_plugin/kopf/
Elasticsearch 基本概念
- 索引:具备某些共同特征的文档集,一个索引包含多个JSON格式文档;
- 文档:存储在索引里的JSON格式文档;
- 字段:文档内的基本单元;
- 类型:用于提供索引中的逻辑分区;
- 映射:用户来映射文档的每个字段,以及字段对应的给的数据类型。
- 分片:存储索引的实际物理实体;
- 主分片/副分片:在一个Elasticsearch索引中的每个文件存储在一个主分片和一些副分片中。而索引文件先存储在主分片中,然后在存储到相应的副分片中。
主分片和副分片驻留在不同的节点上,以便于满足多个请求情况下的故障转移和负载平衡。
- 集群:存储索引数据的节点集合;
Elasticsearch 配置文件为:elasticsearch.yml
集群配置为:
cluster.name: elasticsearch
- 节点;一个单一的 Elasticsearch运行实例;
节点可以有以下3中角色:
- 数据节点:索引,搜索文档;
node.master= false
node.data = true
- 主节点:管理集群;
node.master= true
node.data = false
- 路由节点/负载平衡节点:负载均衡,路由搜索请求,将文档索引到适当的节点;
node.master= false
node.data = false
Elasticsearch RESTful API
使用命令行查询集群的常见语法:
$ curl -X <VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>/<OPERATION_NAME>?<QUERY_STRING>' -d '<BODY>'
- 查看集群中所有可用索引:
$ curl -X GET 'http://localhost:9200/_cat/indices/?v'
- 查看集群中所有节点
$ curl -X GET 'http://localhost:9200/_cat/nodes/?v'
- 查看字段并排序
$ curl -X GET 'http://localhost:9200/logstash-*/_search?pretty' -d '{"query":{"match_all":{}}, "sort":{"open":{"order":"desc"}}, "size":3}'
Logstash
Logstash 是一个数据管道,主要用来收集、解析和分析大量结构化和非结构化的数据以及各各种系统产生的事件。
Official Documentation: https://www.elastic.co/guide/en/logstash/current/index.html/
运行 Logstash
- 使用标准输入、输出运行
$ bin/logstash -e 'input { stdin {} } output { stdout {} }'
- Logstash 可以配置将所有的输入输出到一个Elasticsearch实例中。
$ bin/logstash -e 'input {stdin {} } output {elasticsearch {hosts => ["localhost:9200"]}}'
配置Logstash
- Logstash采用JSON格式的配置文件
# 这是一条注释
input {}
filter {}
output {}
每一节都包含了一个或者多个插件的配置选项。如果使用了多个过滤插件,则配置文件中的顺序就指定了应用到事件处理流的顺序。
按照指定的配置文件启动Logstash
$ bin/logstash -f logstash.cfg
其中logstash.cfg为JSON格式的配置文件
# Logstash config
# logstash.cfg
# input
input {
file {
path => "/User/Jacky/Projects/Scripts/google.csv"
start_position => "beginning"
}
}
# filter
filter {
csv {
columns => ["date_of_record", "open", "high", "low", "close", "volume", "adj_close"]
separator => ","
}
date {
match => ["date_of_record", "yyyy-MM-dd"]
target => "@timestamp"
}
mutate {
convert => ["open","float"]
convert => ["high","float"]
convert => ["low","float"]
convert => ["close","float"]
convert => ["volume","float"]
convert => ["adj_close","float"]
}
}
# output
output {
elasticsearch {
hosts => ["localhost"]
}
}
特别注意 output
配置,如果配置为:
output {
elasticsearch {
host => "localhost:9200"
}
}
会报错,此处请参考Doc:
https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html#indexing-parsed-data-into-elasticsearch/
Logstash 插件类型
- 输入 input
- 过滤器 filter
- 输出 output
- 编解码器 codec
grok 插件
gork模式:
https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns/
Logstash 所有过滤插件列表和最新文档:
https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
Kibana
Kibana 是一个基于Apache 2.0 开源协议的开源数据可视化平台。
- 运行
$ bin/kibana
- 访问
http://localhost:5601/
创建可视化视图
- 桶buckets:将文档根据特定的条件进行分组,然后对分组后的文档计算度量。桶通常代表Kibana 的X轴;
- 度量metrics:对每个同桶中的字段的值进行计算,通常代表Kibana 的Y轴;