Kibana是一個針對Elasticsearch的開源分析及可視化平臺,使用Kibana能夠查詢、查看並與存儲在ES索引的數據進行交互操做,使用Kibana能執行高級的數據分析,並能以圖表、表格和地圖的形式查看數據。html
下載:
注意Kibana版本須要和Elasticsearch一致。linux
cd /opt/ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.12.1-linux-x86_64.tar.gz
解壓:json
tar -zxvf kibana-7.12.1-linux-x86_64.tar.gz
修改/opt/kibana-7.12.1-linux-x86_64/config/kibana.yml:瀏覽器
server.port: 5601 server.host: "10.0.2.15" elasticsearch.hosts: ["http://localhost:9200"]
server.port:kibana端口,默認爲5601。
elasticsearch.hosts:Elasticsearch服務地址,默認爲http://localhost:9200。
server.host:要容許遠程用戶鏈接到Kibana,須要將該參數設置爲一個非環回地址。app
經過ifconfig命令查看該地址:elasticsearch
1.首先啓動Elasticsearch。ide
2.啓動Kibana,使用root用戶和非root用戶啓動Kibana有點區別。ui
使用root用戶啓動:code
kibana默認不容許使用root用戶啓動,使用root用戶啓動須要啓動時指定--allow-root。server
/opt/kibana-7.12.1-linux-x86_64/bin/kibana --allow-root
使用非root用戶啓動:
如使用es用戶啓動,首先保證kibana目錄擁有者爲es用戶,不然須要設置kibana目錄擁有者爲es用戶。
chown -R es:es kibana-7.12.1-linux-x86_64
而後在切換到es用戶啓動
/opt/kibana-7.12.1-linux-x86_64/bin/kibana
Kibana啓動成功後,瀏覽器訪問http://localhost:5601/顯示以下界面則表示啓動成功:
成功啓動Kibana後,可使用Kibana的Dev Tools進行Elasticsearch的REST API調用:
如查詢Elasticsearch中的索引信息:
後續REST API的調用都將採用這種方式。
接下來以user索引爲例,簡單介紹下索引的基本操做。
請求:
PUT /user
響應:
{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "user" }
acknowledged:響應結果。
shards_acknowledged:分片結果。
index:索引名稱。
必須小寫。
不能包含\、/、*、?、"、<、>、|、空格符、,、#、:。
不能以-、_、+開頭。
不能爲.或..。
不能超過255字節(注意是字節不是字符)。
建立具備指定分片數和複製分片數的索引:
PUT /user { "settings": { "index": { "number_of_shards": 3, "number_of_replicas": 2 } } }
顯示的指定字段的數據類型:
PUT /user { "mappings": { "properties": { "age": { "type": "integer" }, "email": { "type": "keyword" }, "name": { "type": "text" } } } }
數據類型能夠參考官網:Field data types
請求:
GET /user
響應:
{ "user" : { "aliases" : { }, "mappings" : { }, "settings" : { "index" : { "routing" : { "allocation" : { "include" : { "_tier_preference" : "data_content" } } }, "number_of_shards" : "1", "provided_name" : "user", "creation_date" : "1622601754789", "number_of_replicas" : "1", "uuid" : "iz1nYZOlTSC94Ijry5YiPg", "version" : { "created" : "7120199" } } } } }
user:索引名稱。
aliases:別名。
mappings:映射。
settings:設置。
creation_date:建立時間。
number_of_shards:主分片數量。
number_of_replicas:副分片數量。
uuid:索引惟一標識。
version:版本。
provided_name:索引名稱。
請求:
DELETE /user
響應:
{ "acknowledged" : true }
更多索引操做能夠參考官網:Index APIs
請求:
POST /user/_doc/ { "age":18, "email":"asd.qq.com", "name":"buhe" }
響應:
{ "_index" : "user", "_type" : "_doc", "_id" : "Q2i2y3kB7sfcwRgV3OlC", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
_index:索引名稱。
_type:文檔類型。
_id:文檔的惟一標識。若是沒有指定則默認隨機生成。
_version:文檔版本,每次更新文檔時增長。
result:索引操做的結果(created/updated)。
_shards:提供有關索引操做的複製過程的信息。
_shards.total:表示索引操做應該在多少個分片副本(主分片和複製分片)上執行。
_shards.successful:表示索引操做成功的分片副本數。索引操做成功時,successful至少爲1。
_shards.failed:表示索引操做失敗的分片副本數。
_seq_no:分配給文檔以進行索引操做的序列號。序列號用於確保文檔的舊版本不會覆蓋新版本。
_primary_term:爲索引操做分配給文檔的主要術語。
請求:
GET /user/_doc/Q2i2y3kB7sfcwRgV3OlC
響應:
{ "_index" : "user", "_type" : "_doc", "_id" : "Q2i2y3kB7sfcwRgV3OlC", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "age" : 18, "email" : "asd.qq.com", "name" : "buhe" } }
_source爲JSON格式的文檔數據。
請求:
POST user/_update/Q2i2y3kB7sfcwRgV3OlC { "doc":{ "age" : 38 } }
響應:
{ "_index" : "user", "_type" : "_doc", "_id" : "Q2i2y3kB7sfcwRgV3OlC", "_version" : 5, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 28, "_primary_term" : 1 }
請求:
DELETE /user/_doc/Q2i2y3kB7sfcwRgV3OlC
響應:
{ "_index" : "user", "_type" : "_doc", "_id" : "Q2i2y3kB7sfcwRgV3OlC", "_version" : 6, "result" : "deleted", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 29, "_primary_term" : 1 }
可使用Bulk API來完成文檔的批量操做,Bulk API的每個命令佔用兩行,每行都應該以\r\n結束。
第一行爲元數據,第二行爲有效載體,例如批量建立文檔以下:
POST /user/_bulk {"create":{"_id":6}} {"age":18,"email":"asd.qq.com","name":"buhe1"} {"create":{"_id":7}} {"age":18,"email":"asd.qq.com","name":"buhe2"} {"create":{"_id":8}} {"age":18,"email":"asd.qq.com","name":"buhe3"} {"create":{"_id":9}} {"age":18,"email":"asd.qq.com","name":"buhe4"} {"create":{"_id":10}} {"age":18,"email":"asd.qq.com","name":"buhe5"}
Bulk API不是原子操做,對應每一個命令都會有一個執行結果,即便某個命令執行失敗也不會影響其餘命令的執行。響應:
{ "took" : 14, "errors" : false, "items" : [ { "create" : { "_index" : "user", "_type" : "_doc", "_id" : "6", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 37, "_primary_term" : 2, "status" : 201 } }, 其餘省略...... } ] }