1.ASR服务
需求:
在ASR服务器中
docker 以下操作中 忽略容器名字叫 nls-cloud-mongodb 的容器
在ASR服务器中
docker ps 查看正在运行的容器
docker stats -a --no-stream 可以监控容器所占资源 确认是否有pid且不等于0
docker inspect -f “{{.RestartCount}}” 容器名称 可以确认容器重启次数 容器名称由docker ps --format "{{.Names}}" 获取
#!/bin/bash#创建存储日志目录
logpath="log"
if [ -d "$logpath" ] ; thenecho "日志目录 $logpath 已存在!"
elsemkdir $logpathchmod 777 $logpathecho " 目录创建成功"
fi# 设置日志文件名,格式为 YYYY-MM-DD.log
LOG_FILE="./$logpath/asr_docker_info_$(date +'%Y-%m-%d').log"# 获取当前时间并格式化为年月日时分秒
CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')# 获取当前正在运行的 Docker 容器信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker ps 输出 ==========" >> "$LOG_FILE"
docker ps >> "$LOG_FILE"# 获取指定容器(这里以 mysql 为例)的 stats 信息,并检查是否有 PID 且不等于 0,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker stats 输出 ==========" >> "$LOG_FILE"
docker stats --no-stream | awk 'NR>1 && $14 != "0" {print}' >> "$LOG_FILE"#这个列表是以字符串的形式输出的,每个容器名称以换行符分隔#NAMES=$(docker ps -a --format "{{.Names}}")#echo -n "容器列表名称: $NAMES" >> "$LOG_FILE"#for con in "${NAMES[@]}";do# echo " 我是容器:$con"#done#换行符分割为数组
docker_names=$(docker ps -a --format '{{.Names}}')
names_array=(${docker_names//$'\n'/ })
length=${#names_array[@]}
echo "所有容器列表名称:【 ${names_array[@]} 】,所有容器个数为:$length" >> "$LOG_FILE"# 现在你可以遍历 names_array 数组了
for container_name in "${names_array[@]}"; doif [ "$container_name" != "nls-cloud-mongodb" ];then#if [ "$container_name" != "suspicious_lewin" ];thenecho "容器名称:$container_name"PIDS=$(docker stats $container_name --no-stream | awk 'NR==2{print $14}')if [ $PIDS -eq 0 ];thenecho " 注意!===> $container_name 容器PIDS为0:$PIDS" >> "$LOG_FILE"elif [ $PIDS -ne 0 ];thenecho " $container_name 容器PIDS:$PIDS" >> "$LOG_FILE"fi# 获取指定容器(这里以 mysql 为例)的重启次数,并将结果追加写入日志文件#echo "========== $CURRENT_DATETIME - Docker inspect 输出 ==========" >> "$LOG_FILE"echo -n " $container_name 容器重启次数:" >> "$LOG_FILE"docker inspect -f "{{.RestartCount}}" $container_name >> "$LOG_FILE"fi
done# 输出成功消息
echo "日志已写入日志文件: $LOG_FILE"
2. 监控MySQL容器运行情况记录到日志文件中,每天一个文件(简单版)
需求:
在 mysql服务器中
docker ps 查看正在运行的容器
docker stats mysql --no-stream 可以监控容器所占资源 确认是否有pid且不等于0
docker inspect -f “{{.RestartCount}}” mysql可以确认容器重启次数
#!/bin/bash# 设置日志文件名,格式为 YYYY-MM-DD.log
LOG_FILE="./log/mysql_docker_info_$(date +'%Y-%m-%d').log"# 获取当前时间并格式化为年月日时分秒
CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')# 获取当前正在运行的 Docker 容器信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker ps 输出 ==========" >> "$LOG_FILE"
docker ps >> "$LOG_FILE"# 获取指定容器(这里以 mysql 为例)的 stats 信息,并检查是否有 PID 且不等于 0,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker stats 输出 ==========" >> "$LOG_FILE"
docker stats mysql --no-stream | awk 'NR>1 && $14 != "0" {print}' >> "$LOG_FILE"PIDS=$(docker stats mysql --no-stream | awk 'NR==2{print $14}')
if [ $PIDS -eq 0 ]
thenecho "MySQL容器PIDS为0:$PIDS" >> "$LOG_FILE"
elif [ $PIDS -ne 0 ]
thenecho "MySQL容器PIDS:$PIDS" >> "$LOG_FILE"
fi# 获取指定容器(这里以 mysql 为例)的重启次数,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker inspect 输出 ==========" >> "$LOG_FILE"
echo -n "MySQL容器重启次数:" >> "$LOG_FILE"
docker inspect -f "{{.RestartCount}}" mysql >> "$LOG_FILE"# 输出成功消息
echo "日志已写入日志文件: $LOG_FILE"
3.客户端服务器
需求:
执行 supervisorctl 在STARTING那一列状态全部都是RUNNING
#!/bin/bash#创建存储日志目录
logpath="log"
if [ -d "$logpath" ] ; thenecho "日志目录 $logpath 已存在!"
elsemkdir $logpathchmod 777 $logpathecho " 目录创建成功"
fi# 设置日志文件名,格式为 YYYY-MM-DD.log
LOG_FILE="./$logpath/supervisorctl_client_info_$(date +'%Y-%m-%d').log"# 获取当前时间并格式化为年月日时分秒
CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')# 获取当前正在运行的信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - supervisorctl 状态 输出 ==========" >> "$LOG_FILE"supervisorctl status all >> "$LOG_FILE"# 执行 supervisorctl status 命令,并筛选出 STARTING 列不是 RUNNING 的行
CHECK_STATUS=$(supervisorctl status | awk '$2 != "RUNNING" {print $2}')
CHILD_NAME=$(supervisorctl status | awk '$2 != "RUNNING" {print $1}')
if [ "$CHECK_STATUS" != "RUNNING" ];thenecho "注意!存在没有运行的进程 ===> $CHILD_NAME " >> "$LOG_FILE"
elseecho "所有进程运行正常" >> "$LOG_FILE"
fi# 输出成功消息
echo "日志已写入日志文件: $LOG_FILE"
4.管理端服务器
需求:
执行 supervisorctl 在STARTING那一列状态全部都是RUNNING (待确认)
docker ps 查看正在运行的容器
docker stats node_grpc --no-stream 可以监控容器所占资源 确认是否有pid且不等于0
docker inspect -f “{{.RestartCount}}” node_grpc可以确认容器重启次数
#!/bin/bash# 设置日志文件名,格式为 YYYY-MM-DD.log
LOG_FILE="./log/node_grpc_docker_info_$(date +'%Y-%m-%d').log"# 获取当前时间并格式化为年月日时分秒
CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')# 获取当前正在运行的信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - supervisorctl 状态 输出 ==========" >> "$LOG_FILE"supervisorctl status all >> "$LOG_FILE"# 执行 supervisorctl status 命令,并筛选出 STARTING 列不是 RUNNING 的行
CHECK_STATUS=$(supervisorctl status | awk '$2 != "RUNNING" {print $2}')
CHILD_NAME=$(supervisorctl status | awk '$2 != "RUNNING" {print $1}')
if [ "$CHECK_STATUS" != "RUNNING" ];thenecho "注意!存在没有运行的进程 ===> $CHILD_NAME " >> "$LOG_FILE"
elseecho "所有进程运行正常" >> "$LOG_FILE"
fi# 获取当前正在运行的 Docker 容器信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker ps 输出 ==========" >> "$LOG_FILE"
docker ps >> "$LOG_FILE"# 获取指定容器(这里以 mysql 为例)的 stats 信息,并检查是否有 PID 且不等于 0,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker stats 输出 ==========" >> "$LOG_FILE"
docker stats node_grpc --no-stream | awk 'NR>1 && $14 != "0" {print}' >> "$LOG_FILE"PIDS=$(docker stats node_grpc --no-stream | awk 'NR==2{print $14}')
if [ $PIDS -eq 0 ]
thenecho "node_grpc容器PIDS为0:$PIDS" >> "$LOG_FILE"
elif [ $PIDS -ne 0 ]
thenecho "node_grpc容器PIDS:$PIDS" >> "$LOG_FILE"
fi# 获取指定容器(这里以 mysql 为例)的重启次数,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker inspect 输出 ==========" >> "$LOG_FILE"
echo -n "node_grpc容器重启次数:" >> "$LOG_FILE"
docker inspect -f "{{.RestartCount}}" node_grpc >> "$LOG_FILE"# 输出成功消息
echo "日志已写入日志文件: $LOG_FILE"
脚本下载地址:https://download.csdn.net/download/lxw1844912514/89455818