Elasticsearch一些常用操作和一些基礎概念


1、查看集群健康狀態

[root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/health?v
epoch      timestamp cluster      status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1552784149 00:55:49  ELK-chaofeng green           3         3     44  22    0    0        0             0                  -                100.0%

2、查看集群節點

[root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/nodes?v
ip          heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.16.0.52           13          22   0    0.00    0.06     0.12 mdi       -      elk02
172.16.0.51           13          97   0    0.00    0.01     0.05 mdi       *      elk01
172.16.0.53           12          97   0    0.00    0.01     0.05 mdi       -      elk03

3、查看master節點狀態

[root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/master?v
id                     host        ip          node
8Z8Oi4ipRCmaAjKESa2-FA 172.16.0.51 172.16.0.51 elk01

4、查看ES集群安裝了什么插件

[root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/plugins?v
name component version

沒有任何插件此時

5、查看集群索引

[root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/indices?v
health status index                    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   logstash-apacheerrorlogs kBCaAVGcQfahh730CXsFyw   5   1        111            0      264kb          132kb
green  open   .newkibana_1             aFFVpEqeTbSxQyJ48Djwyw   1   1          9            0    113.8kb         56.9kb
green  open   .kibana_1                nmZWm-d5TGy6ZqMgvslPEQ   1   1          3            0       24kb           12kb
green  open   logstash-apachelogs      VIzul30TTpWltpIrgrPwEA   5   1         77            0    765.9kb        382.9kb
green  open   sys                      58eN-9CRRqGt8i-B5Ar-qQ   5   1          0            0      2.5kb          1.2kb
green  open   logstash-apachehahalogs  uSmB7bPmR5WbqIscyduvIA   5   1       5767            0      9.2mb          4.6mb

6、自定義顯示節點狀態。

先獲取幫助

[root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/nodes?help
id                           | id,nodeId                      | unique node id                                                                                                   
pid                          | p                              | process id                                                                                                       
ip                           | i                              | ip address                                                                                                       
port                         | po                             | bound transport port                                                                                             
http_address                 | http                           | bound http address                                                                                               
version                      | v                              | es version             

有非常多,想獲取哪個就可以獲取哪個。比如如下所示:

[root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/nodes?h=name,ip,port,jdk
elk02 172.16.0.52 9300 1.8.0_201
elk01 172.16.0.51 9300 1.8.0_201
elk03 172.16.0.53 9300 1.8.0_201

7、顯示當前節點的ES信息

[root@ELK-chaofeng01 ~]#curl http://172.16.0.51:9200
{
  "name" : "elk01",
  "cluster_name" : "ELK-chaofeng",
  "cluster_uuid" : "5VIF1_SdQdGbRekuR9q4-A",
  "version" : {
    "number" : "6.5.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "9434bed",
    "build_date" : "2018-11-29T23:58:20.891072Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

看到“you knoe , foe search ” 這表示當前ES安裝成功。

8、安裝插件,最著名的插件是HEAD插件。

查看我之前的博客,有講如何安裝HEAD插件的:https://www.cnblogs.com/FengGeBlog/p/10471710.html

9、添加索引和內容

第一行的“-H Content-Type:application/json” 要帶上去,這是6.x與5.x下的區別,否則不能創建索引成功。

 10、查找我們剛剛創建的索引

[root@ELK-chaofeng01 ~]#curl -XGET '172.16.0.51:9200/student/_search?pretty'
{
  "took" : 184,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "student",
        "_type" : "major",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "Chao feng",
          "age" : 24,
          "course" : "English"
        }
      }
    ]
  }
}

 

在索引的后面添加“_search”來查看指定索引的內容,默認是列出當前所有下的所有內容

11、查找指定索引下的指定內容,比如搜索“English”

[root@ELK-chaofeng01 ~]#curl -XGET '172.16.0.51:9200/student/_search?q="English"&pretty'
{
  "took" : 12,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "student",
        "_type" : "major",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "Chao feng",
          "age" : 24,
          "course" : "English"
        }
      }
    ]
  }
}

ES內部會自動進行大小寫轉換,默認是不區分大小寫的。

11.1)HEAD插件上傳

12)對某個索引的某個類型做搜索

[root@ELK-chaofeng01 ~]#curl -XGET '172.16.0.51:9200/student/major/_search?q="English"&pretty'
{
  "took" : 19,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "student",
        "_type" : "major",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "Chao feng",
          "age" : 24,
          "course" : "English"
        }
      }
    ]
  }
}

 13)案例:對某個索引查看統計的個數

我想統計一下es集群中的某個索引中的“notice”有多少個,我之前采集日志向ES集群發送過去了,當時的日志中的“notice”行數是:

此時我在ES集群中使用搜索技術查看

完全正確,搜索的非常好。上面的默認查找方式是“_all”。

 你也可以使用這種技術來切割,“loglevel:notice”,在前面加上冒號,表示對特定的類型進行匹配

要學會使用“q=Type:WORD”的方式來查詢。

 14)做簡單查詢

15)做復雜處理,注意寫的格式;復雜處理的標志就是“query_string”。

注意加引號。

 

分片定義:

集群(cluster): 由一個或多個節點組成, 並通過集群名稱與其他集群進行區分

節點(node): 單個ElasticSearch實例. 通常一個節點運行在一個隔離的容器或虛擬機中

索引(index): 在ES中, 索引是一組文檔的集合

分片(shard): 因為ES是個分布式的搜索引擎, 所以索引通常都會分解成不同部分, 而這些分布在不同節點的數據就是分片. ES自動管理和組織分片, 並在必要的時候對分片數據進行再平衡分配, 所以用戶基本上不用擔心分片的處理細節.

副本(replica): ES默認為一個索引創建5個主分片, 並分別為其創建一個副本分片. 也就是說每個索引都由5個主分片成本, 而每個主分片都相應的有一個copy.

對於分布式搜索引擎來說, 分片及副本的分配將是高可用及快速搜索響應的設計核心.主分片與副本都能處理查詢請求, 它們的唯一區別在於只有主分片才能處理索引請求.

在上圖示例中, 我們的ElasticSearch集群有兩個節點, 並使用了默認的分片配置. ES自動把這5個主分片分配到2個節點上, 而它們分別對應的副本則在完全不同的節點上. 對,就這是分布式的概念.

請記住, 索引的number_of_shards參數只對當前索引有效而不是對整個集群生效.對每個索引來講, 該參數定義了當前索引的主分片數(而不是集群中所有的主分片數).

關於副本

副本對搜索性能非常重要, 同時用戶也可在任何時候添加或刪除副本. 正如另篇文章所述, 額外的副本能給你帶來更大的容量, 更高的呑吐能力及更強的故障恢復能力.

謹慎分配你的分片

當在ElasticSearch集群中配置好你的索引后, 你要明白在集群運行中你無法調整分片設置. 既便以后你發現需要調整分片數量, 你也只能新建創建並對數據進行重新索引(reindex)(雖然reindex會比較耗時, 但至少能保證你不會停機).

主分片的配置與硬盤分區很類似, 在對一塊空的硬盤空間進行分區時, 會要求用戶先進行數據備份, 然后配置新的分區, 最后把數據寫到新的分區上.

2~3GB的靜態數據集

分配分片時主要考慮的你的數據集的增長趨勢.

我們也經常會看到一些不必要的過度分片場景. 從ES社區用戶對這個熱門主題(分片配置)的分享數據來看, 用戶可能認為過度分配是個絕對安全的策略(這里講的過度分配是指對特定數據集, 為每個索引分配了超出當前數據量(文檔數)所需要的分片數).

Elastic在早期確實鼓吹過這種做法, 然后很多用戶做的更為極端--例如分配1000個分片. 事實上, Elastic目前對此持有更謹慎的態度.

稍有富余是好的, 但過度分配分片卻是大錯特錯. 具體定義多少分片很難有定論, 取決於用戶的數據量和使用方式. 100個分片, 即便很少使用也可能是好的;而2個分片, 即便使用非常頻繁, 也可能是多余的.
要知道, 你分配的每個分片都是有額外的成本的:

每個分片本質上就是一個Lucene索引, 因此會消耗相應的文件句柄, 內存和CPU資源
每個搜索請求會調度到索引的每個分片中. 如果分片分散在不同的節點倒是問題不太. 但當分片開始競爭相同的硬件資源時, 性能便會逐步下降
ES使用詞頻統計來計算相關性. 當然這些統計也會分配到各個分片上. 如果在大量分片上只維護了很少的數據, 則將導致最終的文檔相關性較差

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM