ELK突然沒有數據提示No results match your search criteria的兩種可能的結果
ELK正常使用,突然某天Kibana沒有數據了。提示:No results match your search criteria。
1、首先進行系統管理-Kibana-索引模式-刷新字段列表嘗試,發現提示:[FORBIDDEN/12/index read-only / allow delete (api)] – read only elasticsearch indices
經過嘗試,執行一下代碼好使:
PUT _settings
{
"index": {
"blocks": {
"read_only_allow_delete": "false"
}
}
}
PUT your_index_name/_settings
{
"index": {
"blocks": {
"read_only_allow_delete": "false"
}
}
}
查詢發現,配置read_only_allow_delete: false只是關閉只讀模式而已。而導致只讀模式的原因則是因為磁盤空間不足導致的。查看Monitoring,發現空間還剩余5%。而ELK的洪水水位線,默認為95%,當使用率達到這個值,ES會將對應的索引設為只讀.這是最后一個保護措施.只讀狀態必須在有了足夠空間后人工解除.
所以,需要可通過后台的console,DELETE部分無用數據。
2、還有一種情況就是kibana創建index patterns的時候。你的kibana的index是模糊匹配多個es的index,但是多個es的index的字段類型不完全相同,這樣就會造成字段被賦予多個類型,然后kibana報錯了。
ElasticSearch根據磁盤分配Shard策略
ElasticSearch會根據當前Node的剩余空間決定是否再往這個Node分配Shard或者將這個Node的Shard遷移到其他Node
啟用
可以在elasticsearch.yml
中或使用cluster-update-settings
API配置下面的參數
cluster.routing.allocation.disk.threshold_enabled
是否啟動根據磁盤空間自動分配,默認為true
低水位線
cluster.routing.allocation.disk.watermark.low
磁盤使用的最低水位線,默認為85%,到了這個值,ES不會再分配新的Shard到這個Node.也可以設置為一個絕對空間大小,如500mb,表示允許的最小的剩余空間.這個值對新創建的索引的primary shard無效,特別要注意的是,這個值對從未分配過的Shard也無效.
高水位線
cluster.routing.allocation.disk.watermark.high
磁盤高水位線,默認為90%,當使用率超過這個值,ES會把這個node上的shard轉移到其他node.這個值也同樣可以設置為一個絕對值,表示最大允許的剩余空間,這個這對所有shard生效,這里有別於前一個配置.
洪水線
cluster.routing.allocation.disk.watermark.flood_stage
洪水水位線,默認為95%,當使用率達到這個值,ES會將對應的索引設為只讀.這是最后一個保護措施.只讀狀態必須在有了足夠空間后人工解除.
注意: 你可以混合使用百分比和絕對值水位線,但是不建議這么用,因為你經常無法判斷這些值是否產生沖突(比如,高水位線比洪水線還高).
退出只讀模式
PUT /twitter/_settings
{
"index.blocks.read_only_allow_delete": null
}
磁盤檢查周期
cluster.info.update.interval
ES檢查磁盤使用率的頻率,默認30s
一種特殊情況
cluster.routing.allocation.disk.include_relocations
默認為true,計算磁盤使用量時,是否把當前正在分配的shard所占用空間考慮在內,如果不考慮這部分空間,就會把這些空間計算在內,磁盤使用會被高估,顯而易見.
注意: 使用百分比時表示使用空間,而使用絕對值時表示剩余空間,看起來比較令人困惑,但是也沒有更好的辦法.
實例
更新低水位線到100GB剩余空間,高水位線設為50GB,洪水線設為10GB,1分鍾更新一次狀態.
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.disk.watermark.low": "100gb",
"cluster.routing.allocation.disk.watermark.high": "50gb",
"cluster.routing.allocation.disk.watermark.flood_stage": "10gb",
"cluster.info.update.interval": "1m"
}
}