前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell 脚本监控k8s预警

shell 脚本监控k8s预警

作者头像
以谁为师
发布2023-11-15 08:49:14
3240
发布2023-11-15 08:49:14
举报

用于检查 Kubernetes 集群中各个命名空间中的 Pod 的 CPU 和内存使用情况,并根据设定的阈值进行告警通知。脚本会循环遍历指定的命名空间列表,获取每个命名空间中的所有 Pod 名称。然后,对于每个 Pod,脚本会获取其 CPU 和内存使用情况以及限制,并计算出使用率

代码语言:javascript
复制
0 */1 * * * cd  /srv/monitor/k8s_monitor_pod.sh 
shell 脚本监控k8s预警_Pod
shell 脚本监控k8s预警_Pod
代码语言:javascript
复制
#!/bin/bash

# 定义阈值
CPU_THRESHOLD=85
MEMORY_THRESHOLD=95

# 定义命名空间列表
NAMESPACES=("bos" "gts" "wallet")

# 循环遍历命名空间
for NAMESPACE in "${NAMESPACES[@]}"; do
    # 获取命名空间中的所有Pod名称
    POD_NAMES=$(/usr/local/bin/kubectl get pod -n $NAMESPACE | awk '{print $1}' | tail -n +2)

    # 循环遍历Pod名称
    for POD_NAME in $POD_NAMES; do
        # 获取Pod的CPU和内存使用情况
        CPU_STATS=$(/usr/local/bin/kubectl top pod -n $NAMESPACE | grep $POD_NAME | awk '{print $2}' | sed 's/m$//')
        MEM_STATS=$(/usr/local/bin/kubectl top pod -n $NAMESPACE | grep $POD_NAME | awk '{print $3}' | sed 's/Mi$//')

        # 获取Pod的CPU和内存限制
        CPU_LIMITS=$(/usr/local/bin/kubectl describe pod $POD_NAME -n $NAMESPACE | grep cpu | head -n 1 | awk '{print $2}')
        MEM_LIMITS=$(/usr/local/bin/kubectl describe pod $POD_NAME -n $NAMESPACE | grep memory | head -n 1 | awk '{print $2}')

        # 处理CPU限制
        if [[ "$CPU_LIMITS" != *"m"* ]]; then
            CPU_LIMITS_END=$(echo "$CPU_LIMITS * 1024" | bc)
        else
            CPU_LIMITS_END=$(echo "$CPU_LIMITS" | sed 's/m$//')
        fi

        # 处理内存限制
        if [[ "$MEM_LIMITS" != *"Mi"* ]]; then
            MEMORY_LIMITS_SECOND=$(echo "$MEM_LIMITS" | sed 's/Gi$//')
            MEMORY_LIMITS_END=$(echo "$MEMORY_LIMITS_SECOND * 1024" | bc)
        else
            MEMORY_LIMITS_END=$(echo "$MEM_LIMITS" | sed 's/Mi$//')
        fi

        # 计算CPU和内存使用率
        CPU_PERCENTAGE=$(echo "scale=2; $CPU_STATS / $CPU_LIMITS_END * 100" | bc -l)
        MEMORY_PERCENTAGE=$(echo "scale=2; $MEM_STATS / $MEMORY_LIMITS_END * 100" | bc -l)

        # 检查CPU使用率是否超过阈值
        if (($(echo "$CPU_PERCENTAGE > $CPU_THRESHOLD" | bc -l))); then
            echo -e "\e[31mPOD_NAME: $POD_NAME CPU_LIMITS: $CPU_LIMITS $CPU_PERCENTAGE MEM_LIMITS: $MEM_LIMITS $MEMORY_PERCENTAGE\e[0m"
            # 发送告警通知到Lark Webhook机器人
            curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"告警:'"$POD_NAME"'资源使用率过高,CPU使用率:'"$CPU_PERCENTAGE"'%"}}' https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxxxx
        else
            # 打印CPU_LIMITS和MEM_LIMITS的值
            echo POD_NAME: $POD_NAME "CPU_LIMITS: $CPU_LIMITS" $CPU_PERCENTAGE "MEM_LIMITS: $MEM_LIMITS" $MEMORY_PERCENTAGE
        fi

        # 检查内存使用率是否超过阈值
        if (($(echo "$MEMORY_PERCENTAGE > $MEMORY_THRESHOLD" | bc -l))); then
            echo -e "\e[31mPOD_NAME: $POD_NAME CPU_LIMITS: $CPU_LIMITS $CPU_PERCENTAGE MEM_LIMITS: $MEM_LIMITS $MEMORY_PERCENTAGE\e[0m"
            # 发送告警通知到Lark Webhook机器人
            curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"告警:'"$POD_NAME"'资源使用率过高,内存使用率:'"$MEMORY_PERCENTAGE"'%"}}' https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxxxx
        else
            # 打印CPU_LIMITS和MEM_LIMITS的值
            echo POD_NAME: $POD_NAME "CPU_LIMITS: $CPU_LIMITS" $CPU_PERCENTAGE "MEM_LIMITS: $MEM_LIMITS_FIRST" $MEMORY_PERCENTAGE
        fi
    done
done
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档