kibana索引及索引冷熱分離管理


kibana索引及索引冷熱分離管理

介紹

本篇文檔簡單介紹一下kibana的索引管理.主要包括:

  • 索引模板
  • 索引模式
  • 索引生命周期
  • 索引冷熱分離管理
  • 索引模板配置

索引模板

ES自帶一個默認的logstash-*的索引模板,es內部維護了template,template定義好了mapping,只要index的名稱被template匹配到,那么該index的mapping就按照template中定義的mapping自動創建。而且template中定義了index的shard分片數量、replica副本數量等等屬性。

所以我們每次新建一個索引的時候,不需要手動創建mapping映射,也不需要手動設置副本和分片數量.

在Kibana的圖形化界面中可以看到ES默認的索引模板

image-20200728094858891

點擊進入logstash索引模板,還能對模板進行編輯.比如設置以下重要2個參數:

refresh_interval —-索引刷新間隔,一般在5-10秒范圍內,周期可以設置長一點,有助於提高ES性能,減少不必要的刷新

number_of_shards—–索引分片數量,在ES7版本中默認為1,在以前的版本默認為5.一般情況下設置為等同於ES data節點的數量

number_of_replicas—-默認副本數量為1,如果有特殊需要,可以在下方設置.

image-20200728095100748

由於ES默認索引模板的存在,所以logstash在向ES傳輸數據的時候,索引最好是以logstash-開頭.例如:

1
2
3
4
5
6
output {
elasticsearch {
hosts => ["172.16.20.101:9200"]
index => "logstash-%{[fields][project]}-%{[fields][type]}-%{[fields][level]}-%{+YYYY.MM.dd}"
}
}

索引模式

當一個新建的索引傳輸到ES時,需要將這個索引關聯到剛才提到的索引模板中.比如下面的logstash-msf-mysql-slow-2020.02.28的索引

image-20200728095631533

在Kibana的索引模式界面中,創建一個索引模式

image-20200728100440229

由於每天創建一個索引,所以定義一個索引前綴,使用通配符匹配后面的日期

logstash-msf-mysql-slow-*

image-20200728100507970

默認使用日期來篩選字段

image-20200728100625572

創建完成后,字段已經自動映射

image-20200728100714384

此時在discovery界面就能看到該索引並且該索引下的數據了.


索引生命周期

Kibana的管理界面可以管理索引的生命周期,在下面的圖示中,創建一個新的生命周期策略

image-20200729091321456

可以管理索引的生命周期,例如,下面的截圖中配置超過2天的索引自動刪除

image-20200729092222991

保存策略,然后將該策略關聯到索引模板.

image-20200729092332714


索引冷熱分離管理

在<生產環境部署ELK+冷熱數據分離>筆記中提到,當前業務每天大概1.5T左右的日志,規划了20T的SSD磁盤,剛好可以保留7天的日志(副本數為1).開發人員需要將日志保留更久(例如一個月),以便有些故障未能及時發現,可能數周后才去追蹤日志,排查故障.

但是,將一個月的日志都存儲在SSD的磁盤中成本較高.在這種場景中,可以使用冷熱分離,將索引數據分開..例如,7天內的日志為熱數據,該日志查詢頻率非常高,可以作為熱數據,存儲在ES的熱節點,.7天后的日志查詢頻率就非常低,幾乎很少查詢,此時可以做為冷數據,存儲在ES的冷節點.

ES冷節點通常硬件資源較低,CPU和內存配置相對熱節點較低,磁盤通常采用機械磁盤,一方面冷節點無需太高配置,另一方面節省服務器成本費用

在<生產環境部署ELK+冷熱數據分離>筆記中的ES集群截圖中,可以看到每個ES的data節點都有hot或者cold屬性..該屬性定義了ES的冷熱節點角色

還是在上面的Kibana索引生命周期中配置冷熱分離.只需開啟冷階段配置即可.配置參考如下:

image-20200729102204264

接着在Kibana的dev tool工具中,給索引模板新增以下配置,將索引數據分配到hot節點ES服務器:

1
2
3
4
5
6
7
8
9
10
PUT _template/logstash
{
"index_patterns": "logstash-*",
"settings": {
"index.number_of_replicas": "1",
"index.number_of_shards": "7",
"index.refresh_interval": "10s",
"index.routing.allocation.require.box_type": "hot"
}
}

查看默認的logstash-*索引模板.可以看到設置已經生效

1
2
3
4
5
6
"routing": {
"allocation": {
"require": {
"box_type": "hot"
}
}

此后進來的索引數據,會自動存儲到hot節點的ES服務器上.cold服務器不存儲任何熱數據


PS: 為了測試冷熱數據是否正常工作,也可以手動將索引從Hot節點遷移到cold節點,以索引logstash-msf-fpm-error-2020.07.27為例,在Kibana的dev tool工具中執行下面的語句,

1
2
3
4
5
6
PUT /logstash-msf-fpm-error-2020.07.27/_settings 
{
"settings": {
"index.routing.allocation.require.box_type": "cold"
}
}

則該索引會增加下列屬性:

1
2
3
4
5
6
"routing": { - 
"allocation": { -
"require": { -
"box_type": "cold"
}
}

Kibana7版本的索引生命周期會自動遷移舊的索引數據到cold節點,所以無需手動或者寫腳本定時遷移

Kibana的索引生命周期生效后,舊的索引就會自動從hot節點遷移到cold節點:

image-20200729103131421

當配置了Kibana的索引生命周期后,logstash數據傳輸到ES時,只需要指定ES的Hot節點(或者master)節點即可,,cold節點(如果不是master)則無需寫入到output配置中


索引模板配置

總結下來,索引模板需要做如下配置:

1
2
3
4
5
6
7
8
9
10
11
PUT _template/logstash
{
"index_patterns": "logstash-*",
"settings": {
"index.number_of_replicas": "1", #副本數量
"index.number_of_shards": "7", #分片數量
"index.refresh_interval": "10s", #索引刷新間隔
"index.routing.allocation.require.box_type": "hot", #索引分配節點
"mapping.total_fields.limit":5000 #索引最大字段數量
}
}

索引設置效果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"index": {
"lifecycle": {
"name": "索引冷熱分離" #索引生命周期策略
},
"routing": {
"allocation": {
"require": {
"box_type": "hot"
}
}
},
"mapping": {
"total_fields": {
"limit": "5000"
}
},
"refresh_interval": "10s",
"number_of_shards": "7",
"number_of_replicas": "1"
}
}

另外,有時候索引找不到geoip.location字段.此時就需要在索引模板中手動映射字段

手動添加映射字段:

字段名: geoip.location
字段值: 地理坐標點

image-20200817153607943


免責聲明!

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



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