elk

  • e Elasticsearch
  • l Logstash
  • k Kibana

Kibana

Kibana 6.4.0 不支持安装 sense 插件,因为内置有 devtools

sense 已经是2016年最后更新了。。,其实就是模拟发送 rest 请求

我看的文档是有多旧

es


Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。 Elasticsearch是一个实时的分布式搜索分析引擎。 它能从项目一开始就赋予你的数据以搜索、分析和探索的能力

学习:
《Elasticsearch 权威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

场景:

  • 无论你是需要全文搜索,还是结构化数据的实时统计
  • GitHub 使用 Elasticsearch 对1300亿行代码进行查询。

Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

测试 Elasticsearch 是否启动成功

curl ‘http://localhost:9200/?pretty’

Elasticsearch 是 面向文档 的,意味着它存储整个对象或 文档

在 Elasticsearch 中,我们对文档进行索引、检索、排序和过滤—而不是对行列数据。这是一种完全不同的思考数据的方式,也是 Elasticsearch 能支持复杂全文检索的原因。

使用 JSON 作为文档的序列化格式

Elasticsearch 客户端

基础概念

索引、搜索及聚合等基础概念

更多诸如 suggestions、geolocation、percolation、fuzzy 与 partial matching 等特性均被省略

复杂搜索

  1. curl -X GET "localhost:9200/megacorp/employee/_search?pretty" -H 'Content-Type: application/json' -d'
  2. {
  3. "query" : {
  4. "bool": {
  5. "must": {
  6. "match" : {
  7. "last_name" : "smith"
  8. }
  9. },
  10. "filter": {
  11. "range" : {
  12. "age" : { "gt" : 30 }
  13. }
  14. }
  15. }
  16. }
  17. }
  18. '

全文搜索

返回字段中有个score,代表相关性得分

  1. curl -X GET "localhost:9200/megacorp/employee/_search?pretty" -H 'Content-Type: application/json' -d'
  2. {
  3. "query" : {
  4. "match" : {
  5. "about" : "rock climbing"
  6. }
  7. }
  8. }

短语搜索
match 改为 match_phrase

高亮搜索

  1. GET /megacorp/employee/_search?pretty
  2. {
  3. "query" : {
  4. "match_phrase" : {
  5. "about" : "rock climbing"
  6. }
  7. },
  8. "highlight": {
  9. "fields" : {
  10. "about" : {}
  11. }
  12. }
  13. }

聚合分析

查询特定兴趣爱好员工的平均年龄

  1. curl -X GET "localhost:9200/megacorp/employee/_search?pretty" -H 'Content-Type: application/json' -d'
  2. {
  3. "aggs" : {
  4. "all_interests" : {
  5. "terms" : { "field" : "interests" },
  6. "aggs" : {
  7. "avg_age" : {
  8. "avg" : { "field" : "age" }
  9. }
  10. }
  11. }
  12. }
  13. }

nodejs 客户端

  1. const { Client } = require('@elastic/elasticsearch')
  2. const client = new Client({
  3. node: 'https://localhost:9200',
  4. auth: {
  5. apiKey: {
  6. id: 'foo',
  7. api_key: 'bar'
  8. }
  9. }
  10. })
  11. // promise API
  12. const result = await client.search({
  13. index: 'my-index',
  14. body: {
  15. query: {
  16. match: { hello: 'world' }
  17. }
  18. }
  19. })
  20. // callback API
  21. client.search({
  22. index: 'my-index',
  23. body: {
  24. query: {
  25. match: { hello: 'world' }
  26. }
  27. }
  28. }, (err, result) => {
  29. if (err) console.log(err)
  30. })

go 客户端

  1. package main
  2. import (
  3. "log"
  4. "github.com/elastic/go-elasticsearch/v7"
  5. )
  6. func main() {
  7. es, _ := elasticsearch.NewDefaultClient()
  8. log.Println(es.Info())
  9. }

java 客户端

  1. <dependency>
  2. <groupId>org.elasticsearch.client</groupId>
  3. <artifactId>elasticsearch-rest-client</artifactId>
  4. <version>7.12.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.elasticsearch.client</groupId>
  8. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  9. <version>7.12.1</version>
  10. </dependency>

filebeat

之前我们搭建的ELK日志收集系统,主要是用来收集SpringBoot应用的日志。其原理是应用通过Logstash插件,使用TCP向Logstash传输日志,从而存储到Elasticsearch中去。但是有很多中间件的日志都是直接存储在文件中的,比如Nginx、Elasticsearch和MySQL,此时我们就需要一个搬运工来把日志搬到Elasticsearch中去,Filebeat正是这样一个日志搬运工

efk

ELK日志收集系统大家都知道,但是还有一种日志收集系统EFK,肯定有很多朋友不知道!这里的F指的是Fluentd,它具有Logstash类似的日志收集功能,但是内存占用连Logstash的十分之一都不到

参考

https://mp.weixin.qq.com/s/8nUunL02Y5AfXTCscYg54w