You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取AWS CloudWatch实时指标用于Nagios监控?

获取AWS CloudWatch实时指标并集成到Nagios监控

一、替换历史查询为近实时指标拉取

你当前用的get-metric-statistics是针对历史时间段的批量查询,要获取接近实时的指标,改用get-metric-data更高效——它支持一次拉取多指标,且能精准获取最近1分钟粒度的数据(CloudWatch默认实时指标间隔)。

示例命令(替换your-cluster-id为你的ElastiCache集群ID):

aws cloudwatch get-metric-data \
    --metric-data-queries '[
        {
            "Id": "cpu",
            "MetricStat": {
                "Metric": {
                    "Namespace": "AWS/ElastiCache",
                    "MetricName": "CPUUtilization",
                    "Dimensions": [{"Name": "CacheClusterId", "Value": "your-cluster-id"}]
                },
                "Period": 60,
                "Stat": "Average"
            },
            "ReturnData": true
        },
        {
            "Id": "memory",
            "MetricStat": {
                "Metric": {
                    "Namespace": "AWS/ElastiCache",
                    "MetricName": "FreeableMemory",
                    "Dimensions": [{"Name": "CacheClusterId", "Value": "your-cluster-id"}]
                },
                "Period": 60,
                "Stat": "Average"
            },
            "ReturnData": true
        }
    ]' \
    --start-time $(date -u -d "5 minutes ago" +%Y-%m-%dT%H:%M:%SZ) \
    --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ)

注:CloudWatch用UTC时间,命令中通过date -u生成符合要求的时间格式,拉取最近5分钟内的最新数据点。

二、编写适配Nagios的监控脚本

Nagios要求插件输出固定格式的状态(OK/WARNING/CRITICAL/UNKNOWN),以下是封装好的shell脚本,集成指标拉取、阈值判断和状态输出:

#!/bin/bash

# 配置参数
CLUSTER_ID="your-cluster-id"
CPU_WARN=70       # CPU使用率警告阈值(%)
CPU_CRIT=90       # CPU使用率临界阈值(%)
MEMORY_WARN=1024  # 剩余内存警告阈值(MB)
MEMORY_CRIT=512   # 剩余内存临界阈值(MB)

# 拉取指标数据
METRIC_DATA=$(aws cloudwatch get-metric-data \
    --metric-data-queries '[
        {"Id": "cpu", "MetricStat": {"Metric": {"Namespace": "AWS/ElastiCache", "MetricName": "CPUUtilization", "Dimensions": [{"Name": "CacheClusterId", "Value": "'$CLUSTER_ID'"}]}, "Period": 60, "Stat": "Average"}, "ReturnData": true},
        {"Id": "memory", "MetricStat": {"Metric": {"Namespace": "AWS/ElastiCache", "MetricName": "FreeableMemory", "Dimensions": [{"Name": "CacheClusterId", "Value": "'$CLUSTER_ID'"}]}, "Period": 60, "Stat": "Average"}, "ReturnData": true}
    ]' \
    --start-time $(date -u -d "5 minutes ago" +%Y-%m-%dT%H:%M:%SZ) \
    --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
    --output json)

# 解析指标值(取最新数据点)
CPU_VALUE=$(echo $METRIC_DATA | jq -r '.MetricDataResults[] | select(.Id=="cpu") | .Values[-1]')
MEMORY_VALUE=$(echo $METRIC_DATA | jq -r '.MetricDataResults[] | select(.Id=="memory") | .Values[-1] / 1024 / 1024')

# 处理指标拉取失败的情况
if [[ -z "$CPU_VALUE" || -z "$MEMORY_VALUE" ]]; then
    echo "UNKNOWN - Failed to retrieve ElastiCache metrics"
    exit 3
fi

# 判断告警状态
STATUS="OK"
EXIT_CODE=0
MESSAGE="CPU Utilization: $(printf "%.1f" $CPU_VALUE)%, Freeable Memory: $(printf "%.1f" $MEMORY_VALUE)MB"

if (( $(echo "$CPU_VALUE >= $CPU_CRIT" | bc -l) )) || (( $(echo "$MEMORY_VALUE <= $MEMORY_CRIT" | bc -l) )); then
    STATUS="CRITICAL"
    EXIT_CODE=2
elif (( $(echo "$CPU_VALUE >= $CPU_WARN" | bc -l) )) || (( $(echo "$MEMORY_VALUE <= $MEMORY_WARN" | bc -l) )); then
    STATUS="WARNING"
    EXIT_CODE=1
fi

echo "${STATUS} - ${MESSAGE}"
exit $EXIT_CODE

脚本依赖说明

  • 安装jq用于JSON解析:sudo apt install jq(Debian/Ubuntu)或sudo yum install jq(RHEL/CentOS)
  • 安装bc用于浮点数值比较:sudo apt install bc或sudo yum install bc
  • 给Nagios运行用户配置IAM权限:允许cloudwatch:GetMetricData操作,可限制到指定的ElastiCache集群维度

三、Nagios集成配置

  1. 将脚本放到Nagios插件目录(如/usr/lib/nagios/plugins/),赋予执行权限:
    chmod +x /usr/lib/nagios/plugins/check_elasticache_metrics.sh
    
  2. 在commands.cfg中添加命令定义:
    define command {
        command_name    check_elasticache_metrics
        command_line    $USER1$/check_elasticache_metrics.sh
    }
    
  3. 在services.cfg中添加监控服务:
    define service {
        host_name               your-monitored-host
        service_description     ElastiCache CPU/Memory
        check_command           check_elasticache_metrics
        max_check_attempts      3
        check_interval          5
        retry_interval          1
        check_period            24x7
        notification_interval   60
        notification_period     24x7
    }
    

四、优化建议

  • 将脚本参数化:把集群ID、阈值做成命令行参数,让脚本支持多集群监控
  • 配置IAM最小权限:给Nagios用户的IAM角色仅授权cloudwatch:GetMetricData,并通过资源策略限制到特定ElastiCache集群
  • 验证指标粒度:确认你的ElastiCache实例启用了1分钟粒度指标(默认开启,部分旧实例可能为5分钟)

内容的提问来源于stack exchange,提问作者Ajay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:11:27