ElasticSearch突然采集不到日志問題解決分析
0-前言
組內(nèi)同學(xué)反饋,kibana上最新的k8s日志看不到了。由于我們是采用elk(elastic search+logstash+kibana)的方式下部署日志采集系統(tǒng),其中l(wèi)ogstash以Deamonset方式部署到k8s的每一個(gè)node節(jié)點(diǎn)上,先去查看logstash的pod日志,發(fā)現(xiàn):
"reason": "Validation Failed: 1: this action would add [2] shards, but this cluster currently has [999]/[1000] maximum normal shards open;"
可以看到,出錯(cuò)關(guān)鍵詞是:maximum normal shards open.
1-解決
查閱資料發(fā)現(xiàn),ES7版本以上,默認(rèn)的最大分片數(shù)是1000, 所以最直接的解決方案就是增大ES的maximum shards:
PUT /_cluster/settings
{
"transient": {
"cluster": {
"max_shards_per_node":10000 # 這里可以修改
}
}
}
經(jīng)過測(cè)試,kibana上可以重新展示最新的log信息。
2-延展
雖然現(xiàn)象問題解決了,但是本質(zhì)問題依舊存在。
思考幾個(gè)問題:
- shard能達(dá)到1000,那未來是不是會(huì)到達(dá)10000,導(dǎo)致出現(xiàn)同樣的問題?
- 為了避免這樣的問題再次出現(xiàn),那就要控制shard的數(shù)量,那么shard的數(shù)量和什么有關(guān)系?
- 如何控制shard的數(shù)量?
首先,回答第一個(gè)問題,先要搞清楚,什么是shard?
- 分片是 Elasticsearch 在集群中分發(fā)數(shù)據(jù)的關(guān)鍵。
- 把分片想象成數(shù)據(jù)的容器。文檔存儲(chǔ)在分片中,然后分片分配到集群中的節(jié)點(diǎn)上。當(dāng)集群擴(kuò)容或縮小,Elasticsearch 將會(huì)自動(dòng)在節(jié)點(diǎn)間遷移分片,以使集群保持平衡。
- 一個(gè)分片(shard)是一個(gè)最小級(jí)別“工作單元(worker unit)”,它只是保存了索引中所有數(shù)據(jù)的一部分。
- 這類似于 MySql 的分庫分表,只不過 Mysql 分庫分表需要借助第三方組件而 ES 內(nèi)部自身實(shí)現(xiàn)了此功能。
- 默認(rèn)情況下,一個(gè)索引被分配 5 個(gè)主分片
可以看到,分片的數(shù)量和索引的數(shù)量是成正比的,也就是說索引越多,分片越多;再結(jié)合我們ES的實(shí)際配置,索引命名方式:環(huán)境+日期,環(huán)境是固定的,但是日期是每天增加的,那么索引每天都會(huì)增加,也就是說分片的數(shù)量也會(huì)隨著時(shí)間推移,逐日增加,直到達(dá)到最大索引。
所以,針對(duì)第一個(gè)問題,即使最大分片數(shù)是10000,也會(huì)出現(xiàn)同樣的問題。
那么如何控制shard數(shù)量呢?
其實(shí)控制shard數(shù)量,就是控制索引的數(shù)量,控制索引的數(shù)量,就是控制保存的log的數(shù)量,而log的數(shù)量可以通過控制保存的日志有效期天數(shù)來決定。
那么,問題轉(zhuǎn)換為:ES如何只保存固定時(shí)間段內(nèi)的日志數(shù)據(jù)?
兩個(gè)方案:
- 通過API接口調(diào)用
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
# 這里根據(jù)默認(rèn)的時(shí)間來作為查詢的時(shí) 間字段,也可以是自定義的, now-7d保留7天的數(shù)據(jù)
- 通過ES官網(wǎng)工具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-后面的時(shí)間的格式
加入到crontab定時(shí)器即可。
以上就是ElasticSearch突然采集不到日志問題解決分析的詳細(xì)內(nèi)容,更多關(guān)于ElasticSearch采集不到日志的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java實(shí)現(xiàn)學(xué)生成績輸出到磁盤文件的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)將學(xué)生成績輸出到磁盤文件的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11
詳解spring boot實(shí)現(xiàn)多數(shù)據(jù)源代碼實(shí)戰(zhàn)
本篇文章主要介紹了詳解spring boot實(shí)現(xiàn)多數(shù)據(jù)源代碼實(shí)戰(zhàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
一次線上websocket返回400問題排查的實(shí)戰(zhàn)記錄
最近項(xiàng)目中有端對(duì)端通信場(chǎng)景,實(shí)時(shí)性要求較高,考慮后選用了websocket 這一通信協(xié)議,下面這篇文章主要給大家介紹了一次線上websocket返回400問題排查的實(shí)戰(zhàn)記錄,需要的朋友可以參考下2022-04-04
SpringCloud Gateway的路由,過濾器和限流解讀
這篇文章主要介紹了SpringCloud Gateway的路由,過濾器和限流解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
java?數(shù)組實(shí)現(xiàn)學(xué)生成績統(tǒng)計(jì)教程
這篇文章主要介紹了java?數(shù)組實(shí)現(xiàn)學(xué)生成績統(tǒng)計(jì)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java和c語言隨機(jī)數(shù)Random代碼詳細(xì)
這篇文章主要介紹Java和c語言得隨機(jī)數(shù)Random,隨機(jī)數(shù)的用處在生活中比較少見,但是用處并不少,比如一些小游戲的制作等等。下面我們就一起來學(xué)習(xí)這篇關(guān)于Java和c隨機(jī)數(shù)Random得文章吧2021-10-10
Spring Boot2中如何優(yōu)雅地個(gè)性化定制Jackson實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Spring Boot2中如何優(yōu)雅地個(gè)性化定制Jackson實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

