mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-16 18:08:21 +00:00
113 lines
4.2 KiB
Rust
113 lines
4.2 KiB
Rust
// Copyright 2024 RustFS Team
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//! Self-heal rules.
|
|
|
|
use super::super::model::{Rule, Severity::*};
|
|
use super::{any, base, contains, prefix, strings};
|
|
|
|
pub(super) fn rules() -> Vec<Rule> {
|
|
vec![
|
|
Rule {
|
|
evidence_fields: strings(["bucket", "object"]),
|
|
anchors: strings(["has no data_dir, cannot heal object data"]),
|
|
..base(
|
|
"heal-no-datadir",
|
|
P0DataRisk,
|
|
"heal",
|
|
"元数据缺 data_dir,对象数据无法自愈",
|
|
contains("has no data_dir, cannot heal object data"),
|
|
"最新元数据缺 data_dir,对象数据无法自愈,存在数据不可恢复风险。",
|
|
"保留现场,收集对象 versionId 与 xl.meta 上报。",
|
|
)
|
|
},
|
|
Rule {
|
|
anchors: strings(["all drives had write errors, unable to heal"]),
|
|
..base(
|
|
"heal-all-writes-failed",
|
|
P0DataRisk,
|
|
"heal",
|
|
"heal 结果无法写入任何盘",
|
|
contains("all drives had write errors, unable to heal"),
|
|
"heal 结果无法写入任何盘(全盘故障/满盘)。",
|
|
"先解决容量/盘故障 finding,再重跑 heal。",
|
|
)
|
|
},
|
|
Rule {
|
|
anchors: strings(["heal rename incomplete"]),
|
|
..base(
|
|
"heal-rename-failed",
|
|
P1Unavailable,
|
|
"heal",
|
|
"heal 数据落位失败",
|
|
contains("heal rename incomplete"),
|
|
"heal 数据落位(rename)未在全部目标盘完成。",
|
|
"检查失败目标盘的写权限与空间,修复后重跑 heal。",
|
|
)
|
|
},
|
|
Rule {
|
|
anchors: strings(["failed to regenerate recoverable xl.meta"]),
|
|
..base(
|
|
"heal-xlmeta-regen-failed",
|
|
P1Unavailable,
|
|
"heal",
|
|
"可恢复 xl.meta 重建失败",
|
|
contains("failed to regenerate recoverable xl.meta"),
|
|
"可恢复 xl.meta 重建失败。",
|
|
"收集对象路径上报;检查该盘可写性。",
|
|
)
|
|
},
|
|
Rule {
|
|
anchors: strings(["create_bitrot_writer"]),
|
|
min_count: 3,
|
|
..base(
|
|
"heal-writer-create-failed",
|
|
P2Degraded,
|
|
"heal",
|
|
"heal 写入器创建失败",
|
|
contains("create_bitrot_writer"),
|
|
"heal 写入器创建失败并跳过部分盘。",
|
|
"检查对应盘状态。",
|
|
)
|
|
},
|
|
Rule {
|
|
anchors: strings(["orphan data-dir reclaim failed"]),
|
|
..base(
|
|
"heal-orphan-reclaim-failed",
|
|
P3ClientSide,
|
|
"heal",
|
|
"孤儿数据目录清理失败",
|
|
any([
|
|
contains("orphan data-dir reclaim failed"),
|
|
contains("Heal remote data-dir cleanup failed"),
|
|
]),
|
|
"孤儿数据目录清理失败(空间泄漏隐患,非紧急)。",
|
|
"观察容量;持续出现时排查对应盘。",
|
|
)
|
|
},
|
|
Rule {
|
|
anchors: strings(["Heal task execution failed"]),
|
|
..base(
|
|
"heal-task-failure",
|
|
P2Degraded,
|
|
"heal",
|
|
"heal 任务调度/执行失败",
|
|
any([prefix("Heal task timeout"), prefix("Heal task execution failed")]),
|
|
"heal 任务调度/执行层故障。",
|
|
"检查 heal 后台服务状态与资源压力。",
|
|
)
|
|
},
|
|
]
|
|
}
|