Kubernetes集群状态检查与告警整合的自动化

embedded/2025/2/26 17:45:50/

将Kubernetes集群状态检查与告警整合的自动化方案,包含脚本实现、定时任务配置及异常通知机制:


1. 创建监控脚本

保存为 /opt/k8s-monitor/cluster-check.sh

#!/bin/bash# 基础配置
LOG_DIR="/var/log/k8s-monitor"
REPORT_FILE="${LOG_DIR}/report-$(date +%Y%m%d).log"
ALERT_FLAG=0  # 异常标记# 创建日志目录
mkdir -p ${LOG_DIR}# 定义告警函数(示例使用邮件,可替换为其他通知方式)
send_alert() {local message=$1echo "[CRITICAL] ${message}" >> ${REPORT_FILE}# 发送邮件示例(需提前配置mailx)echo "Kubernetes集群异常告警: ${message}" | mailx -s "K8S集群异常告警" ops-team@example.com# 可选:调用Webhook(如钉钉/企业微信)# curl -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"'"${message}"'"}}' https://oapi.dingtalk.com/robot/send?access_token=xxx
}# 检查节点状态
check_nodes() {echo "===== 节点状态检查 =====" >> ${REPORT_FILE}kubectl get nodes --no-headers | awk '{print $1,$2}' | while read -r node status; doif [ "$status" != "Ready" ]; thenALERT_FLAG=1send_alert "节点异常: ${node} 状态为 ${status}"echo "[ERROR] Node ${node} status: ${status}" >> ${REPORT_FILE}elseecho "[OK] Node ${node} status: ${status}" >> ${REPORT_FILE}fidone
}# 检查系统组件
check_system_pods() {echo "===== 系统Pod检查 =====" >> ${REPORT_FILE}kubectl get pods -n kube-system --no-headers | awk '{print $1,$3}' | while read -r pod status; doif [[ ! "$status" =~ ^(Running|Completed)$ ]]; thenALERT_FLAG=1send_alert "系统Pod异常: ${pod} 状态为 ${status}"echo "[ERROR] Pod ${pod} status: ${status}" >> ${REPORT_FILE}elseecho "[OK] Pod ${pod} status: ${status}" >> ${REPORT_FILE}fidone
}# 检查集群事件
check_events() {echo "===== 集群事件检查 =====" >> ${REPORT_FILE}kubectl get events --field-selector type=Warning --sort-by=.metadata.creationTimestamp --no-headers | head -n 20 | while read -r timestamp type reason object message; doif [[ -n "$type" ]]; thenALERT_FLAG=1send_alert "集群事件告警: ${reason} (对象: ${object})"echo "[WARNING] Event: ${timestamp} ${reason} ${object} ${message}" >> ${REPORT_FILE}fidone
}# 执行检查
{check_nodescheck_system_podscheck_events# 生成总结报告if [ $ALERT_FLAG -eq 0 ]; thenecho "===== 检查完成: 所有系统正常 =====" >> ${REPORT_FILE}elseecho "===== 检查完成: 发现异常问题 =====" >> ${REPORT_FILE}fi
} | tee -a ${REPORT_FILE}# 日志清理(保留7天)
find ${LOG_DIR} -name "*.log" -mtime +7 -exec rm -f {} \;

2. 设置执行权限

chmod +x /opt/k8s-monitor/cluster-check.sh

3. 配置定时任务

# 编辑crontab
sudo crontab -e# 添加以下内容(每天8:00执行,异常时立即告警)
0 8 * * * /opt/k8s-monitor/cluster-check.sh >/dev/null 2>&1# 查看定时任务
sudo crontab -l

4. 告警配置说明

邮件告警配置(示例使用mailx)
# 安装mailx
sudo yum install mailx -y# 编辑配置文件
sudo vim /etc/mail.rc# 添加以下内容(以QQ邮箱为例)
set from=your_email@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=your_email@qq.com
set smtp-auth-password=your_auth_code  # 需申请SMTP授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb
企业微信/钉钉告警

修改脚本中的send_alert函数,替换为实际的Webhook地址即可。


5. 日志监控增强(可选)

使用logrotate管理日志:

# 创建logrotate配置
sudo tee /etc/logrotate.d/k8s-monitor <<EOF
/var/log/k8s-monitor/*.log {dailyrotate 30missingokcompressdelaycompressnotifemptycreate 0644 root root
}
EOF

检查项说明

检查维度判断标准告警阈值
节点状态状态非Ready发现即告警
系统组件Pod状态非Running/Completed连续2次异常
集群事件Warning级别事件最近10条含Warning

验证测试

# 手动触发脚本
/opt/k8s-monitor/cluster-check.sh# 查看最新日志
tail -f /var/log/k8s-monitor/report-$(date +%Y%m%d).log# 模拟节点故障(测试用)
kubectl cordon <node-name>

该方案可实现以下功能:

  1. 自动巡检:每天定时检查核心指标
  2. 智能告警:发现异常立即触发通知
  3. 日志追溯:保留历史检查记录
  4. 灵活扩展:可添加更多检查项(如存储容量、API健康检查)

http://www.ppmy.cn/embedded/167323.html

相关文章

游戏引擎学习第120天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上次回顾&#xff1a;周期计数代码 我们正在进行一个项目的代码优化工作&#xff0c;目标是提高性能。当前正在优化某个特定的代码片段&#xff0c;已经将其执行周期减少到48个周期。为了实现这一目标&#xff0c;我们设计了一个…

C++对象模型之C++额外成本

1.介绍 C与C最大的区别&#xff0c;无疑在于面向对象&#xff0c;面向对象编程给C带来了强大的特性和灵活性。但同时也带来了一定的运行时和编译时的开销。下面介绍C对象模型的额外成本及其来源。 2.C的额外成本 &#xff08;1&#xff09;虚函数和动态多态的成本 虚函数表&am…

ESP32移植Openharmony外设篇(8)MQ-3酒精检测传感器

MQ-3酒精检测 模块简介 应用场景 MQ3是MQ传感器系列中最常用的传感器之一。它是金属氧化物半导体&#xff08;MOS&#xff09;类型的传感器。金属氧化物传感器也被称为化学电阻在暴露于醇&#xff0c;因为感测基于所述感测材料的电阻的变化。因此&#xff0c;通过将其放置在…

v4l2子系统学习(五)subdev和media子系统

文章目录 1、声明2、subdev和media子系统2.1、subdev的引入2.2、media子系统的引入2.3、subdev概览和数据结构2.3.1、实例2.3.2、数据结构 2.4、media子系统概览和数据结构2.4.1、拓扑结构2.4.2、数据结构2.4.3、media子系统和subdev的关系 2.5、subdev的注册和使用2.5.1、内核…

Docker Engine stopped

参考【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录-CSDN博客 关键的处理办法&#xff1a;需要wsl --update更新一下&#xff0c;然后卸载docker&#xff0c;重新安装后重启系统恢复正常 重启系统后看到running状态

选择排序:简单高效的选择

大家好&#xff0c;今天我们来聊聊选择排序&#xff08;Selection Sort&#xff09;算法。这是一个非常简单的排序算法&#xff0c;适合用来学习排序的基本思路和操作。选择排序在许多排序算法中以其直观和易于实现的特点著称&#xff0c;虽然它的效率不如其他高效算法&#xf…

【Kafka】Windows下安装Kafka(图文记录详细步骤)

【Kafka】Windows下安装Kafka Kafka简介一、Kafka安装前提安装Kafka之前&#xff0c;需要安装JDK、Zookeeper、Scala。1.1、JDK安装&#xff08;version&#xff1a;1.8&#xff09;1.1.1、JDK官网下载1.1.2、JDK网盘下载1.1.3、JDK安装 1.2、Zookeeper安装1.2.1、Zookeeper官网…

计算机考研之数据结构:斐波那契数列专题(1)

不论是在算法还是在编程语言的教材中&#xff0c;都可能会以斐波那契数列为例&#xff0c;或说明其算法上的特点——主要是递归&#xff0c;或说明如何运用某种编程语言编写相应函数。 本文是一篇关于“斐波那契数列”的专题文章&#xff0c;目的是让学习《数据结构》这门课程…