提交 5ea953f9 authored 作者: 陈泽健's avatar 陈泽健

feat(monitoring): 添加容器信息检测功能

- 新增 collect_container_info 函数用于采集运行中和未运行的容器信息
- 添加对 docker 命令的检查,若未安装则记录相应信息
- 实现运行中容器信息的获取和格式化输出
- 实现未运行容器(包括 Exited、Paused 等状态)的检测和展示
- 在 Markdown 报告中添加容器信息检测结果的表格展示
- 更新需求文档状态标记为已实现
上级 edea6d65
......@@ -364,6 +364,50 @@ monitor_mysql_once() {
fi
}
#################### 3.5 容器信息检测 ####################
# 运行中容器信息
CONTAINER_RUNNING_LIST=""
# 未运行(包含退出、异常等状态)容器信息
CONTAINER_EXITED_LIST=""
collect_container_info() {
# 如果 docker 不存在或不可用,直接记录信息后返回
if ! command -v docker >/dev/null 2>&1; then
log INFO "[容器检测] 本机未安装 docker 命令,跳过容器信息检测"
CONTAINER_RUNNING_LIST="本机未检测到 docker 命令,无法获取容器信息。"
CONTAINER_EXITED_LIST="本机未检测到 docker 命令,无法获取容器信息。"
return
fi
# 运行中容器
local running
running="$(docker ps --format '{{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.CreatedAt}}' 2>/dev/null || true)"
if [[ -z "${running//[[:space:]]/}" ]]; then
CONTAINER_RUNNING_LIST="当前无运行中的容器。"
else
CONTAINER_RUNNING_LIST="$running"
fi
# 未运行容器(包含 Exited、Created 等非 Up 状态)
local exited
exited="$(docker ps -a --filter 'status=exited' --format '{{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.CreatedAt}}' 2>/dev/null || true)"
if [[ -z "${exited//[[:space:]]/}" ]]; then
# 如果没有 exited,再补充其它非 running 状态(防止所有都 paused/created 等)
local not_running
not_running="$(docker ps -a --format '{{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.CreatedAt}}' | grep -v 'Up ' || true)"
if [[ -z "${not_running//[[:space:]]/}" ]]; then
CONTAINER_EXITED_LIST="当前无未运行的容器(没有 Exited/非 Up 状态的容器)。"
else
CONTAINER_EXITED_LIST="$not_running"
fi
else
CONTAINER_EXITED_LIST="$exited"
fi
log INFO "[容器检测] 已采集容器信息:running=$(echo \"$CONTAINER_RUNNING_LIST\" | wc -l) 行,exited=$(echo \"$CONTAINER_EXITED_LIST\" | wc -l) 行"
}
#################### 5. 报告输出(md) ####################
write_md_report() {
mkdir -p "$REPORT_DIR" 2>/dev/null || true
......@@ -447,6 +491,36 @@ write_md_report() {
echo "- 最近暴涨判定状态:**${MYSQL_LAST_BURST_STATUS}**"
echo "- 暴涨详情:${MYSQL_LAST_BURST_DESC}"
echo
echo "## 四、容器信息检测"
echo
echo "### 4.1 运行中的容器"
echo
if [[ -z "${CONTAINER_RUNNING_LIST//[[:space:]]/}" ]]; then
echo "- 未采集到运行中的容器信息。"
else
echo "| 容器ID | 名称 | 镜像 | 状态 | 创建时间 |"
echo "| ------ | ---- | ---- | ---- | -------- |"
# CONTAINER_RUNNING_LIST 每行格式:ID \t NAME \t IMAGE \t STATUS \t CREATED_AT
echo "$CONTAINER_RUNNING_LIST" | while IFS=$'\t' read -r cid cname cimg cstatus ctime; do
# 防止空行
[[ -z "${cid}${cname}${cimg}${cstatus}${ctime}" ]] && continue
echo "| ${cid} | ${cname} | ${cimg} | ${cstatus} | ${ctime} |"
done
fi
echo
echo "### 4.2 未运行的容器(Exited/其它非 Up 状态)"
echo
if [[ -z "${CONTAINER_EXITED_LIST//[[:space:]]/}" ]]; then
echo "- 未采集到未运行的容器信息。"
else
echo "| 容器ID | 名称 | 镜像 | 状态 | 创建时间 |"
echo "| ------ | ---- | ---- | ---- | -------- |"
echo "$CONTAINER_EXITED_LIST" | while IFS=$'\t' read -r cid cname cimg cstatus ctime; do
[[ -z "${cid}${cname}${cimg}${cstatus}${ctime}" ]] && continue
echo "| ${cid} | ${cname} | ${cimg} | ${cstatus} | ${ctime} |"
done
fi
echo
echo "> 说明:本报告由 \`AutomatedServiceMonitoring.sh\` 自动生成,仅反映本次执行时刻的监测结果(当前版本未启用 ERROR 上下文分析)。"
echo
} > "$report_file"
......@@ -482,6 +556,10 @@ main_run_once() {
monitor_mem_once
monitor_mysql_once
# 新增:容器信息检测
collect_container_info
write_md_report
log INFO "[结束] 本次监测已完成,报告已生成。"
......
......@@ -58,13 +58,13 @@
先检查mysql容器名称,然后通过进入mysql容器内部进行查询,mysql账号为root,密码为dNrprU&2S
3.4、emqx连接数(未实现):
根据平台类型持续监测EMQX连接数量峰值、平均值,以及是否存在暴涨情况,或是判断一直没断开的异常连接。
3.5、容器信息检测(实现):
3.5、容器信息检测(✅ 已实现):
针对当前服务器上存在的运行和未运行的容器进行查询检测,分别记录运行的容器信息和未运行的容器信息。
##### 4、监测日志审计(✅ 已实现):
需要丰富日志体系,日志需要用中文打印
##### 5、监测报告输出(实现):
##### 5、监测报告输出(✅ 已实现):
将本次监测的所有检测项信息输出成md文件报告,内容排版需要优美。
##### 5、对接邮件发送:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论