首页 > 系统相关 >linux环境下监控docker进程运行情况,使用钉钉群机器人报警异常服务

linux环境下监控docker进程运行情况,使用钉钉群机器人报警异常服务

时间:2023-08-15 11:59:23浏览次数:37  
标签:容器 服务 ps format 机器人 linux docker 运行

背景:在linux环境下,很多服务我们都使用docker来跑,很是方便,容器服务独立,配置独立,数据独立等等,但是有个问题,就是如果某个服务异常了,暂停了,停止了,一直重启中,我们要怎么及时的知道是哪个服务,并进行处理,保证业务正常运行。

本文主要介绍使用docker服务自带的一些命令来实现一个基本的监控,并通过钉钉群机器人发送消息。

命令1

docker ps //列出所有正在运行中的服务,注意,暂停,停止等状态的服务是不会被列出的

 命令2

docker ps -a //会列出当前服务器中所有的容器,无论状态是什么

 命令3

docker ps -f //使用过滤器来过滤输出,此处我们以STATUS字段为例,它可能有的值如下:
-created(已创建)
-restarting(重启中)
-running(运行中)
-removing(迁移中)
-paused(暂停)
-exited(停止)
-dead(死亡)

 步骤:

1、列出所有运行中的服务

2、停止redis1服务

3、暂停redis2服务

4、查看停止状态的服务

5、查看暂停状态的服务

但是这样显示出来的信息有点多,不够简洁,如果我只想显示我启动服务的时候的自定义名称呢,可以不

命令4

docker ps -f status=exited --format {{.Names}} //先过滤一遍状态,然后再格式化Names字段,还有其他字段也支持格式化的:
 .ID 容器的ID
 .Image 镜像的ID
 .Command 容器启动的命令
 .CreatedAt 创建容器的时间点
 .RunngingFor 从容器创建到现在过去的时间
 .Ports 暴露的端口
 .Status 容器的状态
 .Size 容器硬盘的大小
 .Names 容器的名称
 .Label 指定label的值
 .Mounts 挂载到这个容器的数据卷名称

 看,只显示了名称了是不是,这里说一下哈,字段名的大小写问题

结论1:-f 后面的参数,大小写都可以
结论2:--format大括号里面的参数,必须按规定来

命令5

docker info //查看整个docker服务运行的情况,配置等信息,篇幅问题,只截图了一大部分哈

 重点说一下划线的地方,这里把容器总数量,运行中的,暂停中的,停止中的都统计出来了

 我们对比一下,运行中的3个,暂停中的1个,停止的1个,完美匹配。

命令6

docker info --format '{{.Containers}}' //从info内容中提取Containers的值

1、统计全部

2、统计运行中的

3、停止redis1

4、暂停redi2

5、统计运行中的

6、统计暂停的

7、统计停止的

通过以上的一些命令的组合应用,就可以做一个基本的docker服务运行监控,我贴出我的思路,欢迎指正哈!

  #!/bin/bash

  #名称:docker容器服务运行的进程监控
  #原理:如果所有容器服务数量 > 正在运行中的服务数量,则表示有服务异常,可能是暂停了,停止了,退出了,重启中,发消息到钉钉群
  #运行:使用crond任务自定义时间自动运行
  #日期:2023-08-15

#所有容器服务数量
docker_ps_a=$(docker info --format '{{.Containers}}')
#echo $docker_ps_a

#运行中的容器服务数量
docker_runing=$(docker info --format '{{.ContainersRunning}}')
#echo $docker_runing

if [ $docker_ps_a -gt $docker_runing ]; then
  #已停止的
  docker_stop=$(docker ps -f status=exited --format {{.Names}})

  #已暂停的
  docker_paused=$(docker ps -f status=paused --format {{.Names}})

  #重启中的
  docker_restarting=$(docker ps -f status=restarting --format {{.Names}})

  #通知时间
  notice_time=`date +"%Y-%m-%d %H:%M:%S"`

  #把所有异常的服务合并起来
  docker_abnormal=$notice_time"\r\n====已停止服务====\r\n"$docker_stop"\r\n====已暂停服务====\r\n"$docker_paused"\r\n====重启中服务====\r\n"$docker_restarting
  
  #发送钉钉群机器人推送消息
  curl 'https://oapi.dingtalk.com/robot/send?access_token=ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"at": {"isAtAll":true},"msgtype": "text","text": {"content":"【docmonitor通知】\r\n\r\n'"${docker_abnormal}"'"}}'
else
  echo 'docker容器所有服务,一切正常'
fi
#!/bin/bash

#名称:docker容器服务运行的进程监控
#原理:如果检测到有自动重复重启中的服务,则表示有服务异常,发消息到钉钉群
#运行:使用crond任务自定义时间自动运行
#日期:2023-08-15

#检测重启中的服务
docker_restarting=$(docker ps -f status=restarting --format {{.Names}})

#检测到有重启中的服务
if [ ! -z "$docker_restarting" ]; then

#通知时间
notice_time=`date +"%Y-%m-%d %H:%M:%S"`

#把时间和异常的服务合并起来
docker_abnormal=$notice_time"\r\n====重启中服务====\r\n"$docker_restarting
#echo $docker_abnormal

#发送推送消息
token="xxx"
curl 'https://oapi.dingtalk.com/robot/send?access_token='"${token}"'' \
-H 'Content-Type: application/json' \
-d '{"at": {"isAtAll":true},"msgtype": "text","text": {"content":"####docmonitor通知####\r\n\r\n'"${docker_abnormal}"'"}}' else echo 'docker容器服务,没有正在重启中的服务' fi

通知效果如下:

 钉钉群机器人的配置,我这里就不做说明了,直接按钉钉文档走就可以了,自定义机器人接入:https://open.dingtalk.com/document/robots/custom-robot-access

标签:容器,服务,ps,format,机器人,linux,docker,运行
From: https://www.cnblogs.com/firstlady/p/17630944.html

相关文章

  • Linux系统之top命令的基本使用
    (Linux系统之top命令的基本使用)一、top命令介绍top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。二、检查本地环境1.检查操作系统版本检查本地操作系统版本[root@j......
  • Docker-compose容器服务异常重启脚本
    前言:有些企业可能并没有足够的能力或者没必要搭建(云上租用)一个K8S集群,会考虑使用Docker。公司今年有个项目,一部分服务就是使用原来的,改改配置就能用,然后再配合实际的场景再新上1、2个服务。在云上再租用一个K8S集群或者自己搭建一个K8S集群就显得尤为浪费。但是有几个都是之前的服......
  • CentOS Linux 7&8安全基线检查
    阿里云标准-CentOSLinux7/8安全基线检查检查项类别描述加固建议等级密码复杂度检查身份鉴别检查密码长度和密码是否使用多种字符类型编辑/etc/security/pwquality.conf,把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4......
  • docker-compose启动开发环境
    前言经常需要搭建自己的环境,做个笔记。-操作系统:DeepinV23-Docker版本:24.0.5Gitee地址:链接启动准备1.配置Docker国内加速(配置完成重启docker)文件:/etc/docker/daemon.json{"registry-mirrors":["https://hub-mirror.c.163.com"]}2.命令行创建网络net-devdock......
  • docker环境下部署nginx
    ......
  • 知识图谱(Knowledge Graph)- Neo4j 5.10.0 Docker 安装
    知识图谱(KnowledgeGraph)-Neo4j5.10.0Docker安装知识图谱(KnowledgeGraph)-Neo4j5.10.0CentOS安装https://neo4j.com/docs/operations-manual/5/docker/introduction/拉镜像[root@localhost~]#cat/etc/docker/daemon.json{"registry-mirrors":["http......
  • Linux常用命令
    Linux常用命令一、日期时间date[OPTION]...[+FORMAT]-u:printUTC+FORMAT:like+%Y-%m-%d-s:settimehwclock:显示硬件时间cal:查看日历uptime:查看系统运行时间二、输出&查看echo:显示输出的内容cat:显示文件内容more:向下翻页,查看文件内容;空格向下翻页......
  • () {}用法,Linux shell脚本编程时bad substitution解决办法
     首先,我们要理解badsubstitution的字面意思,它的字面意思是“替换错误”的意思。这种错误的原因呢,通常是我们编写脚本时“{}”和“()”错误使用导致的。比如应该用“()”时,我们用成了“{}”;应该用“()”时,用成了“{}”。 那么如何区分什么时候用什么类型的括号呢?${}中,大括号里......
  • linux安装禅道(CentOS)
    提示:禅道是用PHP开发的,只要安装一个MySQL,找一个能跑php的web应用服务器,把禅道源代码放到里面,然后按步骤安装就可以了。不一定要用XAMPP,XAMPP只是把PHP环境和mysql都集成了而已。如果你想下载其他的版本http://www.zentao.net/download.html第一种方式:下载禅道:(64位)http://dl.cn......
  • linux的grep功能介绍与使用
    环境centos7.9众所周知,在Linux操作系统中,"grep"命令是一种强大而常用的文本搜索工具。它用于在文件中查找特定的模式,并显示包含该模式的行。"grep"命令不仅可以搜索文件内容,还可以结合各种选项和正则表达式,提供丰富的搜索功能。本文档将介绍"grep"命令的基本用法和一些常用的选......