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

news2024/11/17 16:21:15
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1838932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

llama-factory微调工具使用入门

一、定义 环境配置案例: https://zhuanlan.zhihu.com/p/695287607chatglm3 案例多卡训练deepspeedllama factory 案例Qwen1.5报错 二、实现 环境配置 git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python3.10 conda …

百元内平价蓝牙耳机推荐,四款高热度平价耳机推荐!

在追求高品质音乐体验的同时,我们也不得不考虑预算的限制,不过市面上有不少百元内平价蓝牙耳机,它们在保证音质和舒适度的同时,也兼顾了价格的亲民性,身蓝牙耳机测评的达人,经手过不少的百元蓝牙耳机&#…

CleanMyMac for Mac系统优化垃圾清理软件卸载 工具(小白轻松上手,简单易学)

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、启动台显示软件图标,表示安装成功 三、运行测试1、打开软件,配置2、授权,允许完全磁盘访问 安装完成&a…

.NET 分享一个强大的内网渗透工具集合|果断收藏

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

15天搭建ETF量化交易系统Day8—强化自动交易模块

搭建过程 每个交易者都应该形成一套自己的交易系统。 很多交易者也清楚知道,搭建自己交易系统的重要性。现实中,从0到1往往是最难跨越的一步。 授人鱼不如授人以渔,为了帮助大家跨出搭建量化系统的第一步,我…

硬盘分区无法访问:深度解析与解决之道

一、硬盘分区无法访问的现象描述 在日常使用电脑的过程中,有时会遇到硬盘分区无法访问的情况。这通常表现为双击分区时系统提示“无法访问”、“磁盘未格式化”或“需要格式化”等错误消息,导致分区内的文件无法读取或操作。这种情况可能会给用户带来极…

echarts dataZoom用按钮代替鼠标滚轮实现同样效果

2024.06.19今天我学习了echarts dataZoom如何用按钮来控制放大缩小的功能, 效果如下: 通过控制按钮来实现图表放大缩小数据的效果。 步骤如下: 一、写缩放按钮,以及图表数据。 二、设置初始位置的变量,我这边是七个…

【前端项目笔记】3 用户管理

用户管理相关功能实现 涉及表单、对话框、Ajax数据请求 基本页面 用户列表开发 在router.js中导入Users.vue 解决用户列表小问题 选中(激活)子菜单后刷新不显示高亮 给二级菜单绑定单击事件,点击链接时把对应的地址保存到sessionSto…

WPS相同字体但是部分文字样式不一样解决办法

如下图,在使用wps编辑文档的时候发现有些电脑的文字字体很奇怪,但是把鼠标移到这个文字的位置,发现它和其他正常文字的字体是一样的,都是仿宋_GB2312 正常电脑的文字如下图所示 打开C:\Windows找到Fonts这个文件夹 把仿宋_GB2312这…

【免费API推荐】:解锁无限创意,让您的应用更具竞争力(8)

热门高效的免费实用类API是当今开发者们追逐的宝藏。这些API提供了各种热门功能和服务,能够帮助开发者轻松地为应用程序增添实用性和吸引力。无论是人脸识别、自然语言处理、机器学习还是图像处理,这些热门高效的免费API提供了强大的功能和高效的性能&am…

格雷母线技术革新:推动斗轮堆取料机进入精准操作时代

随着工业4.0时代的到来,智能化、自动化已成为工业发展的必然趋势。特别是在港口、电力、冶金等行业中,散料装卸机械的智能化水平直接关系到整个生产流程的效率与安全。斗轮堆取料机作为这些行业中的关键设备,其操作方式的革新显得尤为重要。 …

Apple Watch开发入门知识,还是很有必要的

随着现在 Apple 生态圈的发展,越来越多的 App 会把自己的简化版从 iOS 迁移至 WatchOS(支付宝、微信、手Q、头条、QQ音乐、网易云音乐等等,都有Watch版App)。官方开发文档:Setting up a watchOS project | Apple Devel…

NPDP含金量、考试内容、报考要求、适合人群?

01.NPDP核心价值解读 NPDP认证的核心价值在于整合产品开发管理的理论与实践,包含新产品开发策略、研发流程管理、市场研究、销规划、团队管理、项目管理等等,理论体系和知识内容穿插在产品发展的全过程。 对于职场打工人来说,拥有NPDP证书证…

csrf+xss组合拳

csrfxss组合拳 一、环境搭建 靶场cms文章管理系统 二、流程开始 这是系统前端 系统管理后台 而我们要打到后台管理员的cookie,结合前端存储型的xss完全可以实现,那后端怎么被打到cookie呢,我们来从这里添加用户开始分析数据包来说明 看看…

【CT】LeetCode手撕—手撕快排

目录 题目1-思路-快排1-1 快排的核心思想快速排序算法步骤优美的调整区间 1-2 ⭐快排的实现 2- 实现⭐912. 排序数组——题解思路 3- ACM 实现 题目 原题连接:912. 排序数组 1-思路-快排 1-1 快排的核心思想 选择一个基准 基准左侧的元素都小于该元素基准右侧的元…

乾坤微服务的使用

前言: 在这里整理下用乾坤来开发微服务的一些资料。 使用好处: 使用乾坤可以实现什么效果呢?众所周知,前端的框架五花八门,react/vue/angular等各领风骚,那么如果我们有需要把不同技术栈的项目整合起来&…

为何Proteus用户争相拥抱SmartEDA?揭秘背后的强大吸引力!

在电路设计与仿真领域,Proteus一度以其稳定性能和丰富功能赢得了众多用户的青睐。然而,近年来,越来越多的Proteus用户开始转向SmartEDA,这一新兴电路仿真软件正迅速崭露头角,成为行业内的翘楚。那么,究竟是…

MySQL数据库的列类型

数值 tinyint 十分小的数据 1个字节 smallint 较小的数据 2个字节 mediumint 中等大小的数据 3个字节 int 标准的整数 4个字节(常用) bigint …

ARM架构简明教程

目录 一、ARM架构 1、RISC指令集 2、ARM架构数据类型的约定 2.1 ARM-v7架构数据类型的约定 2.2 ARM-v8架构数据类型的约定 3、CPU内部寄存器 4、特殊寄存器 4.1 SP寄存器 4.2 LR寄存器 4.3 PC寄存器 二、汇编 1、汇编指令(常用) 2、C函数的…

屏蔽房是做什么用的?为什么需要定期检测?

屏蔽房对于不了解的人来说,可能光看名字不知道是做什么的,但是对于一些企业或者机构,却是再熟悉不过的了。和名字一样,屏蔽房是对空间内的信号以及一些外界环境条件进行隔绝,在一些有特殊要求的企业机构中,…