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" ] ; then
echo "日志目录 $logpath 已存在!"
else
mkdir $logpath
chmod 777 $logpath
echo " 目录创建成功"
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[@]}"; do
if [ "$container_name" != "nls-cloud-mongodb" ];then
#if [ "$container_name" != "suspicious_lewin" ];then
echo "容器名称:$container_name"
PIDS=$(docker stats $container_name --no-stream | awk 'NR==2{print $14}')
if [ $PIDS -eq 0 ];then
echo " 注意!===> $container_name 容器PIDS为0:$PIDS" >> "$LOG_FILE"
elif [ $PIDS -ne 0 ];then
echo " $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 ]
then
echo "MySQL容器PIDS为0:$PIDS" >> "$LOG_FILE"
elif [ $PIDS -ne 0 ]
then
echo "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" ] ; then
echo "日志目录 $logpath 已存在!"
else
mkdir $logpath
chmod 777 $logpath
echo " 目录创建成功"
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" ];then
echo "注意!存在没有运行的进程 ===> $CHILD_NAME " >> "$LOG_FILE"
else
echo "所有进程运行正常" >> "$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" ];then
echo "注意!存在没有运行的进程 ===> $CHILD_NAME " >> "$LOG_FILE"
else
echo "所有进程运行正常" >> "$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 ]
then
echo "node_grpc容器PIDS为0:$PIDS" >> "$LOG_FILE"
elif [ $PIDS -ne 0 ]
then
echo "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