python 脚本监控 docker 容器

python 脚本监控 docker 容器

思路

1.python 脚本脚本定时访问docker 容器的接口.
2.接口出现超时或者异常,判定接口异常.
3.异常的接口调用 docker 命令重启.
4.同时记录请求的日志,方便的grafana 图表中展示当前容器的运行状态.

代码


#-*- encoding:utf-8 -*-

from datetime import datetime, timedelta
import requests
import json
import time
import traceback
import logging
import sys   #reload()之前必须要引入模块
import subprocess

reload(sys)
sys.setdefaultencoding('utf-8')

#日志配置
logging.basicConfig(format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
                    level=logging.DEBUG,
                    filename='xxxxxx.log',
                    filemode='a')

def parse_date(data):
    return datetime.strptime(data, "%Y-%m-%d %H:%M:%S")

# 发送巡检结果到监控应用
def insertLog(jsonStr):
    response = requests.post('http:// xxxx/abcdef/', data=jsonStr)
    logging.info('请求参数='+jsonStr+',返回值'+response.content)


while True:
    #dict_data 存放 docker 容器请求地址和对应容器的 docker 容器 id
    dict_data = {
                 "http://xxxxx/abc/11/33333.json": "5678",
                 "http://xxxxx/abc/11/33333.json": "5566777"
                 }
    for url, dockerId in dict_data.items():
        # print url,dockerId

        try:
            start = time.time()
            response3 = requests.get(url, timeout=(30, 30))
            end_time = time.time()
            timeCost = (end_time - start) * 1000
            logging.info('url=' + url + ',耗时:' + str(timeCost))
            params = {}
            params['num'] = timeCost
            params['ip'] = "监控 docker 容器的 ip 地址"
            params['type'] = 7
            params['desc'] = "心跳"
            paramsAll = {}
            paramsAll['aaaa'] = params
            datastr = json.dumps(paramsAll)
            insertLog(datastr)
        except Exception as e:
            logging.error(traceback.format_exc())
            params = {}
            params['num'] = -1000
            params['app_ip'] = "监控 docker 容器的 ip 地址"
            params['type'] = 7
            params['desc'] = "心跳"
            paramsAll = {}
            paramsAll['aaaa'] = params
            datastr = json.dumps(paramsAll)
            insertLog(datastr)
            #重启docker容器
            # 执行 docker restart abcdes 命令
            process = subprocess.Popen("docker restart " + dockerId, shell=True, stdout=subprocess.PIPE)
            # 获取命令执行的输出和错误
            out, err = process.communicate()

            # 输出命令执行结果
            logging.info(out)
            logging.info(err)

        time.sleep(30)

    time.sleep(60)

在这里插入图片描述
-1000 的节点,是接口请求异常的节点,异常后,会重启 docker 容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值