shell脚本监控docker容器和supervisor 运行情况

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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxw1844912514

你的打赏就是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值