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

news/2025/2/27 15:51:30/

将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/news/1575280.html

相关文章

libwebsockets交叉编译全流程

libwebsocket中的webscoket加密功能需要依赖于Openssl库因此需要提前准备好openssl开源库。 交叉编译openssl 下面演示源码方式交叉编译OpenSSL为动态库。 创建个Websocket文件夹&#xff0c;把后续的成果物均放在这个文件中&#xff0c;文件夹中创建子文件夹OpenSSL和libWeb…

大模型开发(三):全量微调项目——基于GPT2 搭建医疗问诊机器人

全量微调项目——基于GPT2 搭建医疗问诊机器人 0 前言1 全量微调及项目介绍1.1 全量微调简介1.2 项目介绍1.3 数据介绍1.4 GPT2模型与硬件配置 2 数据与模型准备2.1 数据准备2.2 模型准备2.3 数据预处理 3 数据集类及其导入器3.1 dataset.py3.2 dataloader.py 4 模型配置与推理…

【蓝桥杯】每天一题,理解逻辑(1/90)【Leetcode 移动零】

文章目录 题目解析讲解算法原理【双指针算法思路】(数组下标充当指针)如何划分和执行过程大致 代码详情 题目解析 题目链接&#xff1a;https://leetcode.cn/problems/move-zeroes/description/ 题目意思解析 把所有的零移动到数组的末尾保持非零元素的相对顺序 理解了这两层…

Oracle中补全时间的处理

在实际数据处理的过程中&#xff0c;存在日期不连续的问题&#xff0c;可能会导致数据传到前后端出现异常&#xff0c;为了避免这种问题&#xff0c;通常会从数据端进行日期不全的处理&#xff1a; 以下为补全年份的案例&#xff1a; with x as (select 开始年份 &#xff08;…

数字可调控开关电源设计(论文+源码)

1 设计要求 在本次数字可调控开关电源设计过程中&#xff0c;对关键参数设定如下&#xff1a; &#xff08;1&#xff09;输入电压&#xff1a;DC24-26V,输出电压&#xff1a;12-24&#xff08;可调&#xff09;&#xff1b; &#xff08;2&#xff09;输出电压误差&#xf…

开源机器学习框架

TensorFlow 是由谷歌开发的一个开源机器学习框架&#xff0c;用于构建和训练深度学习模型。它的核心概念是张量&#xff08;Tensor&#xff09;&#xff0c;即多维数组&#xff0c;用于表示数据。TensorFlow 中的计算以数据流图的形式表示&#xff0c;图中的节点表示各种数学操…

【蓝桥杯集训·每日一题2025】 AcWing 5437. 拐杖糖盛宴 python

5437. 拐杖糖盛宴 Week 2 2月25日 题目描述 农夫约翰的奶牛们非常爱吃甜食&#xff0c;尤其爱吃拐杖糖。 约翰一共有 N N N 头奶牛&#xff0c;编号 1 ∼ N 1 \sim N 1∼N&#xff0c;其中第 i i i 头奶牛的初始高度为 a i a_i ai​。 约翰给奶牛们准备了 M M M 根拐杖…

Linux | GRUB / bootloader 详解

注&#xff1a;本文为 “Linux | GRUB / bootloader” 相关文章合辑。 英文引文&#xff0c;机翻未校。 图片清晰度限于引文原状。 未整理去重。 What is Grub in Linux? What is it Used for? Linux 中的 Grub 是什么&#xff1f;它的用途是什么&#xff1f; Abhishek …