背景:在linux環(huán)境下,很多服務我們都使用docker來跑,很是方便,容器服務獨立,配置獨立,數(shù)據(jù)獨立等等,但是有個問題,就是如果某個服務異常了,暫停了,停止了,一直重啟中,我們要怎么及時的知道是哪個服務,并進行處理,保證業(yè)務正常運行。
本文主要介紹使用docker服務自帶的一些命令來實現(xiàn)一個基本的監(jiān)控,并通過釘釘群機器人發(fā)送消息。
命令1
docker ps //列出所有正在運行中的服務,注意,暫停,停止等狀態(tài)的服務是不會被列出的
?命令2
docker ps -a //會列出當前服務器中所有的容器,無論狀態(tài)是什么
?命令3
docker ps -f //使用過濾器來過濾輸出,此處我們以STATUS字段為例,它可能有的值如下:
-created(已創(chuàng)建)
-restarting(重啟中)
-running(運行中)
-removing(遷移中)
-paused(暫停)
-exited(停止)
-dead(死亡)
?步驟:
1、列出所有運行中的服務
2、停止redis1服務
3、暫停redis2服務
4、查看停止狀態(tài)的服務
5、查看暫停狀態(tài)的服務
但是這樣顯示出來的信息有點多,不夠簡潔,如果我只想顯示我啟動服務的時候的自定義名稱呢,可以不
命令4
docker ps -f status=exited --format {{.Names}} //先過濾一遍狀態(tài),然后再格式化Names字段,還有其他字段也支持格式化的:
?.Image 鏡像的ID
?.Command 容器啟動的命令
?.CreatedAt 創(chuàng)建容器的時間點
?.RunngingFor 從容器創(chuàng)建到現(xiàn)在過去的時間
?.Ports 暴露的端口
?.Status 容器的狀態(tài)
?.Size 容器硬盤的大小
?.Names 容器的名稱
?.Label 指定label的值
?.Mounts 掛載到這個容器的數(shù)據(jù)卷名稱
?看,只顯示了名稱了是不是,這里說一下哈,字段名的大小寫問題
結論1:-f 后面的參數(shù),大小寫都可以
結論2:--format大括號里面的參數(shù),必須按規(guī)定來
命令5
docker info //查看整個docker服務運行的情況,配置等信息,篇幅問題,只截圖了一大部分哈
?重點說一下劃線的地方,這里把容器總數(shù)量,運行中的,暫停中的,停止中的都統(tǒng)計出來了
?我們對比一下,運行中的3個,暫停中的1個,停止的1個,完美匹配。
命令6
docker info --format '{{.Containers}}' //從info內容中提取Containers的值
1、統(tǒng)計全部
2、統(tǒng)計運行中的
3、停止redis1
4、暫停redi2
5、統(tǒng)計運行中的
6、統(tǒng)計暫停的
7、統(tǒng)計停止的
通過以上的一些命令的組合應用,就可以做一個基本的docker服務運行監(jiān)控,我貼出我的思路,歡迎指正哈!
? #!/bin/bash
? #名稱:docker容器服務運行的進程監(jiān)控
? #原理:如果所有容器服務數(shù)量 > 正在運行中的服務數(shù)量,則表示有服務異常,可能是暫停了,停止了,退出了,重啟中,發(fā)消息到釘釘群
? #運行:使用crond任務自定義時間自動運行
? #日期:2023-08-15
#所有容器服務數(shù)量 docker_ps_a=$(docker info --format '{{.Containers}}') #echo $docker_ps_a #運行中的容器服務數(shù)量 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
#發(fā)送釘釘群機器人推送消息
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容器服務運行的進程監(jiān)控 #原理:如果檢測到有自動重復重啟中的服務,則表示有服務異常,發(fā)消息到釘釘群 #運行:使用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 #發(fā)送推送消息 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
通知效果如下:
文章來源:http://www.zghlxwxcb.cn/news/detail-648678.html
?釘釘群機器人的配置,我這里就不做說明了,直接按釘釘文檔走就可以了,自定義機器人接入:https://open.dingtalk.com/document/robots/custom-robot-access文章來源地址http://www.zghlxwxcb.cn/news/detail-648678.html
到了這里,關于linux環(huán)境下監(jiān)控docker進程運行情況,使用釘釘群機器人報警異常服務的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!