Elasticsearch
Elasticsearch
es
是一种在分布式环境中快速、可扩展的搜索和分析引擎。它建立在Apache Lucene
上。Lucene
定义如下Apache Lucene是一种高性能、全功能的完全用java写的广西搜索引擎库。它是一种几乎适合于任何需要全文搜索,特别是跨平台的应用程序的技术
Elasticseaarch
通过提供强大的RESTful API
隐藏了Lucene
背后的复杂性,使得查询索引数据更容易,并使其适用于任何编程语言。Elasticsearch
可以基于PB
级别的结构化或者非结构化数据建立跨多台服务器的分布式实时分析,这大大扩展了Lucene
的能力Elasticsearch
的基本概念es
中,一个索引包含多个JSON
格式的文档。在es
集群中的数量可以是任意的ELK
中,将Logstash
的JSON
文档发送到es
时,它们被存储为默认的索引模式"logstash-
%{+YYYY.MM.dd
}"URL
看起来如下http://localhost:9200/[索引]/[类型]/[操作]
es
中的文档是指存储在索引里的JSON
格式的文档。每一个文档都有一个类型和相应的唯一标识(ID
)。例如,存储在es
的文档看起来如下book_name : "learning elk"
Facebook
的索引中可以使用post
作为一种索引类型,使用comments
作为另一种索引类型string
、integer
、float
、double
等elasticsearch.yml
配置文件中名为cluster.name
的属性配置,默认为Elasticsearch: cluster.name: elasticsearch
Elasticsearch
运行实例,属于某个集群。节点可以扮演三种角色数据节点:用于索引文档,以及对这些文档执行搜索操作。如果要提升性能或者扩展集群,通常建议添加更多的数据节点。在elasticsearch.yml配置文件设置节点属性就可以将节点变成数据节点
node.master = false
node.data = true
主节点:负责集群的管理。对于大集群,建议有三个专用的主节点(一主两备),它们只作为主节点,不存储索引或执行搜索。配置如下
node.master = true
node.data = false
路由节点或负载均衡节点:既不作为主节点也不担当数据节点角色。只用于负载均衡,或路由搜索请求,又或将文档索引到适当的节点。这对于高负荷的搜索或索引操作非常有用
node.master = false
node.data = false
Elasticsearch API
API
常见语法curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>/<OPERATION_NAME>?<QUERY_STRING>' -d '<BODY>'
VERB:请求方法类型,包括GET/POST/PUT/DELETE/HEAD PROTOCOL:协议类型,http/https HOST:集群中主机名 PORT:es实例运行的端口,默认是9200 PATH:索引名、类型和要查询的文档ID,例如:/index/type/id OPERATION_NAME:执行操作的名称,例如:_search,_count等 QUERY_STRING:查询参数中指定可选参数。如?pretty用于完美输出json文档 BODY:用于请求正文文本
curl -XGET 'http://localhost:9200/logstash-2020.08.08/_search?pretty'
curl -XGET 'localhost:9200/_cat/indices?v'
curl -XGET 'http://localhost:9200/_cat/nodes?v'
curl -XGET 'http://localhost:9200/_cluster/health?pretty'
URL
即可curl -XGET 'http://localhost:9200/_cluster/health?level=cluster&pretty=true'
curl -XGET 'http://localhost:9200/_cluster/health?level=shareds&pretty=true'
curl -XGET 'http://localhost:9200/_cluster/health?level=indices&pretty=true'
ELK
中,索引是根据在Logstash
的es
输出插件中提供的索引名称自动创建的。尽管如此,还是来看一下如何手工创建索引curl -XPUT 'http://localhost:9200/<index_name>?pretty'
packtpub
的索引,可以执行以下命令curl -XPUT 'http://localhost:9200/packtpub?pretty'
curl -XPUT 'http://localhost:9200/packtpub/elk/1?pretty' -d '
{
book_name : "learning elk"
}'
{
"_index" : "packtpub",
"_type" : "elk",
"_id" : "1",
"_version" : 1,
"created" : true
}
curl -XGET 'http://localhost:9200/packtpub/elk/1?pretty'
{
"_index" : "packtpub",
"_type" : "elk",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
book_name : "learning elk"
}
}
source
字段包含了完整的文档curl -XDELETE 'http://localhost:9200/packtpub/elk/1?pretty'
{
"acknowledged" : true
}
Elasticsearch Query DSL
es
查询语句的强大之处在于,其是一个基于json
的领域特定语言,称为Query DSL
。Kibana
为了得到特定格式的结果,广泛使用了Query DSL
curl -XPOST 'http://localhost:9200/logstash-*/_search' -d '
{
"query" : { "match_all" : {} },
"size" : 3
}'
curl -XPOST 'http://localhost:9200/logstash-*/_search' -d '
{
"query" : { "match_all" : {} },
"sort" : { "open" : { "order" : "desc" } },
"size" : 3
}'
更详细的Query DSL相关资料请参考官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html https://www.elastic.co/guide/en/elasticsearch/reference/6.5/query-dsl.html
Elasticsearch
插件Bigdesk
插件JVM
、CPU
、OS
、主分片以及副本分片相关的各种统计信息,有助于分析集群节点信息https://github.com/lukas-vlcek/bigdesk
Elastic-Hammer
插件es
的前端界面。可用于查询集群,并在输入查询语句时提供语法检查https://github.com/andrewvc/elastic-hammer
Head
插件es
索引进行结构化查询https://github.com/mobz/elasticsearch-head
查看所有插件:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-plugins.html