ElasticSearch突然采集不到日志問題解決分析
0-前言
組內同學反饋,kibana上最新的k8s日志看不到了。由于我們是采用elk(elastic search+logstash+kibana)的方式下部署日志采集系統,其中l(wèi)ogstash以Deamonset方式部署到k8s的每一個node節(jié)點上,先去查看logstash的pod日志,發(fā)現:
"reason": "Validation Failed: 1: this action would add [2] shards, but this cluster currently has [999]/[1000] maximum normal shards open;"
可以看到,出錯關鍵詞是:maximum normal shards open.
1-解決
查閱資料發(fā)現,ES7版本以上,默認的最大分片數是1000, 所以最直接的解決方案就是增大ES的maximum shards:
PUT /_cluster/settings
{
"transient": {
"cluster": {
"max_shards_per_node":10000 # 這里可以修改
}
}
}
經過測試,kibana上可以重新展示最新的log信息。
2-延展
雖然現象問題解決了,但是本質問題依舊存在。
思考幾個問題:
- shard能達到1000,那未來是不是會到達10000,導致出現同樣的問題?
- 為了避免這樣的問題再次出現,那就要控制shard的數量,那么shard的數量和什么有關系?
- 如何控制shard的數量?
首先,回答第一個問題,先要搞清楚,什么是shard?
- 分片是 Elasticsearch 在集群中分發(fā)數據的關鍵。
- 把分片想象成數據的容器。文檔存儲在分片中,然后分片分配到集群中的節(jié)點上。當集群擴容或縮小,Elasticsearch 將會自動在節(jié)點間遷移分片,以使集群保持平衡。
- 一個分片(shard)是一個最小級別“工作單元(worker unit)”,它只是保存了索引中所有數據的一部分。
- 這類似于 MySql 的分庫分表,只不過 Mysql 分庫分表需要借助第三方組件而 ES 內部自身實現了此功能。
- 默認情況下,一個索引被分配 5 個主分片
可以看到,分片的數量和索引的數量是成正比的,也就是說索引越多,分片越多;再結合我們ES的實際配置,索引命名方式:環(huán)境+日期,環(huán)境是固定的,但是日期是每天增加的,那么索引每天都會增加,也就是說分片的數量也會隨著時間推移,逐日增加,直到達到最大索引。
所以,針對第一個問題,即使最大分片數是10000,也會出現同樣的問題。
那么如何控制shard數量呢?
其實控制shard數量,就是控制索引的數量,控制索引的數量,就是控制保存的log的數量,而log的數量可以通過控制保存的日志有效期天數來決定。
那么,問題轉換為:ES如何只保存固定時間段內的日志數據?
兩個方案:
- 通過API接口調用
curl -H "Content-Type: application/json" -X POST -d '{"query":{"range":{"@timestamp":{"lt":"now-7d","format":"epoch_millis"}}}}' http://localhost:9200/*/_delete_by_query?conflicts=proceed
# 這里根據默認的時間來作為查詢的時 間字段,也可以是自定義的, now-7d保留7天的數據
- 通過ES官網工具curator
編寫action.yml
actions:
1:
action: delete_indices
description: "delete index expire date"
options:
ignore_empty_list: True
timeout_override:
disable_action: False
filters:
- filtertype: age
source: name
direction: older
unit: days # 可選days,weeks,months
unit_count: 60 #保留最近60天
timestring: '%Y.%m.%d' #這里是跟在索引logstash-后面的時間的格式
加入到crontab定時器即可。
以上就是ElasticSearch突然采集不到日志問題解決分析的詳細內容,更多關于ElasticSearch采集不到日志的資料請關注腳本之家其它相關文章!
相關文章
一次線上websocket返回400問題排查的實戰(zhàn)記錄
最近項目中有端對端通信場景,實時性要求較高,考慮后選用了websocket 這一通信協議,下面這篇文章主要給大家介紹了一次線上websocket返回400問題排查的實戰(zhàn)記錄,需要的朋友可以參考下2022-04-04
SpringCloud Gateway的路由,過濾器和限流解讀
這篇文章主要介紹了SpringCloud Gateway的路由,過濾器和限流解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Spring Boot2中如何優(yōu)雅地個性化定制Jackson實現示例
這篇文章主要為大家介紹了Spring Boot2中如何優(yōu)雅地個性化定制Jackson實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05

