找回密码
 立即注册
首页 业界区 业界 linux环境下监控docker进程运行情况,使用钉钉群机器人 ...

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

后沛若 昨天 22:58
背景:在linux环境下,很多服务我们都使用docker来跑,很是方便,容器服务独立,配置独立,数据独立等等,但是有个问题,就是如果某个服务异常了,暂停了,停止了,一直重启中,我们要怎么及时的知道是哪个服务,并进行处理,保证业务正常运行。
本文主要介绍使用docker服务自带的一些命令来实现一个基本的监控,并通过钉钉群机器人发送消息。
命令1
  1. docker ps //列出所有正在运行中的服务,注意,暂停,停止等状态的服务是不会被列出的
复制代码
1.png

 命令2
  1. docker ps -a //会列出当前服务器中所有的容器,无论状态是什么
复制代码
2.png

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

 步骤:
1、列出所有运行中的服务
2、停止redis1服务
3、暂停redis2服务
4、查看停止状态的服务
5、查看暂停状态的服务
但是这样显示出来的信息有点多,不够简洁,如果我只想显示我启动服务的时候的自定义名称呢,可以不
命令4
  1. docker ps -f status=exited --format {{.Names}} //先过滤一遍状态,然后再格式化Names字段,还有其他字段也支持格式化的:
复制代码
 .ID 容器的ID
 .Image 镜像的ID
 .Command  容器启动的命令
 .CreatedAt 创建容器的时间点
 .RunngingFor 从容器创建到现在过去的时间
 .Ports 暴露的端口
 .Status 容器的状态
 .Size 容器硬盘的大小
 .Names 容器的名称
 .Label 指定label的值
 .Mounts 挂载到这个容器的数据卷名称
4.png

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

结论1:-f 后面的参数,大小写都可以
结论2:--format大括号里面的参数,必须按规定来
命令5
  1. docker info //查看整个docker服务运行的情况,配置等信息,篇幅问题,只截图了一大部分哈
复制代码
6.png

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

 我们对比一下,运行中的3个,暂停中的1个,停止的1个,完美匹配。
命令6
  1. docker info --format '{{.Containers}}' //从info内容中提取Containers的值
复制代码
8.png

1、统计全部
2、统计运行中的
3、停止redis1
4、暂停redi2
5、统计运行中的
6、统计暂停的
7、统计停止的
通过以上的一些命令的组合应用,就可以做一个基本的docker服务运行监控,我贴出我的思路,欢迎指正哈!
  #!/bin/bash
  #名称:docker容器服务运行的进程监控
  #原理:如果所有容器服务数量 > 正在运行中的服务数量,则表示有服务异常,可能是暂停了,停止了,退出了,重启中,发消息到钉钉群
  #运行:使用crond任务自定义时间自动运行
  #日期:2023-08-15
  1. #所有容器服务数量
  2. docker_ps_a=$(docker info --format '{{.Containers}}')
  3. #echo $docker_ps_a
  4. #运行中的容器服务数量
  5. docker_runing=$(docker info --format '{{.ContainersRunning}}')
  6. #echo $docker_runing
  7. if [ $docker_ps_a -gt $docker_runing ]; then
  8.   #已停止的
  9.   docker_stop=$(docker ps -f status=exited --format {{.Names}})
  10.   #已暂停的
  11.   docker_paused=$(docker ps -f status=paused --format {{.Names}})
  12.   #重启中的
  13.   docker_restarting=$(docker ps -f status=restarting --format {{.Names}})
  14.   #通知时间
  15.   notice_time=`date +"%Y-%m-%d %H:%M:%S"`
  16.   #把所有异常的服务合并起来
  17.   docker_abnormal=$notice_time"\r\n====已停止服务====\r\n"$docker_stop"\r\n====已暂停服务====\r\n"$docker_paused"\r\n====重启中服务====\r\n"$docker_restarting<br>  <br>  #发送钉钉群机器人推送消息<br>  curl 'https://oapi.dingtalk.com/robot/send?access_token=ACCESS_TOKEN' \<br>  -H 'Content-Type: application/json' \<br>  -d '{"at": {"isAtAll":true},"msgtype": "text","text": {"content":"【docmonitor通知】\r\n\r\n'"${docker_abnormal}"'"}}'<br>else<br>  echo 'docker容器所有服务,一切正常'<br>fi
复制代码
  1. #!/bin/bash
  2. #名称:docker容器服务运行的进程监控
  3. #原理:如果检测到有自动重复重启中的服务,则表示有服务异常,发消息到钉钉群
  4. #运行:使用crond任务自定义时间自动运行
  5. #日期:2023-08-15
  6. #检测重启中的服务
  7. docker_restarting=$(docker ps -f status=restarting --format {{.Names}})
  8. #检测到有重启中的服务
  9. if [ ! -z "$docker_restarting" ]; then
  10. #通知时间
  11. notice_time=`date +"%Y-%m-%d %H:%M:%S"`
  12. #把时间和异常的服务合并起来
  13. docker_abnormal=$notice_time"\r\n====重启中服务====\r\n"$docker_restarting
  14. #echo $docker_abnormal
  15. #发送推送消息
  16. token="xxx"
  17. curl 'https://oapi.dingtalk.com/robot/send?access_token='"${token}"'' \<br>-H 'Content-Type: application/json' \<br>-d '{"at": {"isAtAll":true},"msgtype": "text","text": {"content":"####docmonitor通知####\r\n\r\n'"${docker_abnormal}"'"}}'
  18. else
  19.     echo 'docker容器服务,没有正在重启中的服务'
  20. fi
复制代码
通知效果如下:

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册