前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >监控阈值设置问题:监控阈值设置不当,导致误报或漏报

监控阈值设置问题:监控阈值设置不当,导致误报或漏报

原创
作者头像
是山河呀
发布2025-02-08 10:44:28
发布2025-02-08 10:44:28
11100
代码可运行
举报
文章被收录于专栏:linux运维linux运维
运行总次数:0
代码可运行
1. 明确阈值需求

在优化之前,需要明确以下需求:

  • 关键指标:例如 CPU 使用率、内存占用、磁盘空间、网络流量等。
  • 业务场景:不同场景下的合理阈值范围(如高峰期 vs 非高峰期)。
  • 误报容忍度:可接受的误报频率。
  • 漏报容忍度:可接受的漏报风险。
示例阈值需求清单:

指标

描述

CPU 使用率

高峰期 > 80% 触发告警,非高峰期 > 90%

内存占用

剩余 < 10% 触发告警

磁盘空间

剩余 < 20% 触发告警

网络流量

超过 1Gbps 触发告警


2. 设计合理的静态阈值

根据经验值和业务需求设置固定的阈值。

(1)Prometheus

使用 PromQL 编写静态阈值规则。

代码语言:javascript
代码运行次数:0
复制
# 示例:CPU 使用率超过 80% 触发告警 
groups:
- name: example
  rules:
  - alert: HighCpuUsage
    expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High CPU usage on {{ $labels.instance  }}"
      description: "CPU usage is above 80% for more than 5 minutes."
(2)Zabbix

在触发器中定义静态阈值。

代码语言:javascript
代码运行次数:0
复制
# 示例:磁盘空间不足触发告警 
Trigger: {Template OS Linux:vfs.fs.size[/,pfree].last()}<20 
Severity: Warning

3. 引入动态阈值

基于历史数据计算动态阈值,减少误报和漏报。

(1)Prometheus 动态阈值

使用 predict_linear 函数预测未来趋势。

代码语言:javascript
代码运行次数:0
复制
# 示例:预测未来 1 小时的磁盘使用情况
groups:
- name: example
  rules:
  - alert: DiskSpacePredictedLow
    expr: predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 3600) < 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "Disk space predicted to be low on {{ $labels.instance  }}"
      description: "Disk space is predicted to be exhausted within the next hour."
(2)Zabbix 动态阈值

通过脚本计算动态阈值并更新触发器。

代码语言:javascript
代码运行次数:0
复制
# 示例:计算过去 7 天的平均磁盘使用率
sar -d -f /var/log/sa/sa08 | awk '/Average:/ {sum += $5; count++} END {print sum/count}'

4. 分析历史数据

通过历史数据分析确定合理的阈值范围。

(1)ELK Stack

使用 Elasticsearch 查询历史数据,分析指标分布。

代码语言:javascript
代码运行次数:0
复制
# 示例:查询过去 7 天的 CPU 使用率分布
{
  "query": {
    "range": {
      "@timestamp": {
        "gte": "now-7d",
        "lte": "now"
      }
    }
  },
  "aggs": {
    "cpu_usage_stats": {
      "stats": {
        "field": "cpu_usage"
      }
    }
  }
}
(2)Python 脚本

编写脚本分析历史数据并生成阈值建议。

代码语言:javascript
代码运行次数:0
复制
#!/usr/bin/env python3 
 
import pandas as pd
 
# 加载历史数据
data = pd.read_csv('/path/to/cpu_usage.csv') 
 
# 计算统计信息
mean = data['cpu_usage'].mean()
std_dev = data['cpu_usage'].std()
 
# 设置阈值
threshold_high = mean + 2 * std_dev
threshold_low = mean - 2 * std_dev 
 
print(f"建议的高阈值:{threshold_high}")
print(f"建议的低阈值:{threshold_low}")

5. 测试和优化阈值

通过模拟故障场景测试阈值设置,并根据结果优化。

(1)模拟故障

使用工具(如 stress-ng)模拟高负载或资源耗尽,观察阈值是否合理。

代码语言:javascript
代码运行次数:0
复制
# 模拟高负载 
stress-ng --cpu 4 --timeout 60s
 
# 模拟磁盘空间不足
dd if=/dev/zero of=/mnt/testfile bs=1G count=10
(2)记录测试结果

将测试结果记录到日志中,便于后续分析。

代码语言:javascript
代码运行次数:0
复制
#!/bin/bash
 
# 测试阈值设置
test_threshold() {
    echo "开始测试阈值设置..."
    stress-ng --cpu 4 --timeout 60s
    if [ $? -eq 0 ]; then 
        echo "测试成功" >> /var/log/threshold_test.log 
    else
        echo "测试失败" >> /var/log/threshold_test.log 
    fi 
}
 
test_threshold 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 明确阈值需求
    • 示例阈值需求清单:
  • 2. 设计合理的静态阈值
    • (1)Prometheus
    • (2)Zabbix
  • 3. 引入动态阈值
    • (1)Prometheus 动态阈值
    • (2)Zabbix 动态阈值
  • 4. 分析历史数据
    • (1)ELK Stack
    • (2)Python 脚本
  • 5. 测试和优化阈值
    • (1)模拟故障
    • (2)记录测试结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档