AWS Lambda записывает неверный результат в метриках CloudWatch

Я новичок в Devops и кодировании. Я работаю над созданием инструмента мониторинга (графана) с CloudWatch и Lambda.

У меня есть код, который не работает должным образом. Он пингует сервер. Если он возвращает 200, он нажимает 0 в метриках, а когда сайт не работает, он должен нажимать 1, но когда я упоминаю в метриках записи, чтобы написать 1, вместо того, чтобы писать 1, он пишет 100, и если я попытаюсь сделать что-нибудь другие значения - больше 100 - его публикация, но меньше 100 - просто публикация 100.

Вот код:

import boto3

import urllib2

def write_metric(value, metric):

    d = boto3.client('cloudwatch')
    d.put_metric_data(Namespace='WebsiteStatus',
                      MetricData=[
                          {
                      'MetricName':metric,
                      'Dimensions':[
                          {
                      'Name': 'Status',
                      'Value': 'WebsiteStatusCode',
                          },
                          ],
                      'Value': value,
    },
    ]
                      )

def check_site(url, metric):

    STAT = 1
    print("Checking %s " % url)
    request = urllib2.Request("https://" +url)

    try:
        response = urllib2.urlopen(request)
        response.close()
    except urllib2.URLError as e:
        if hasattr(e, 'code'):
            print ("[Error:] Connection to %s failed with code: " %url +str(e.code))
            STAT = 100
            write_metric(STAT, metric)
        if hasattr(e, 'reason'):
            print ("[Error:] Connection to %s failed with code: " % url +str(e.reason))
            STAT = 100
            write_metric(STAT, metric)
    except urllib2.HTTPError as e:
        if hasattr(e, 'code'):
            print ("[Error:] Connection to %s failed with code: " % url + str(e.code))
            STAT = 100
            write_metric(STAT, metric)
        if hasattr(e, 'reason'):
            print ("[Error:] Connection to %s failed with code: " % url + str(e.reason))
            STAT = 100
            write_metric(STAT, metric)
        print('HTTPError!!!')

    if STAT != 100:
        STAT = response.getcode()

    return STAT

def lambda_handler(event, context):


    websiteurls = [
        "website.com"
    ]
    metricname = 'SiteAvailability'

    for site in websiteurls:
        r = check_site(site,metricname)
        if r == 200:
            print("Site %s is up" %site)
            write_metric(0, metricname)
        else:
            print("[Error:] Site %s down" %site)
            write_metric(1, metricname)

comment
Почему бы вам не добавить оператор печати в write_metric (), чтобы быть уверенным, что вы точно знаете, какие показатели использует ваш код.   -  person jarmod    schedule 12.10.2018


Ответы (1)


Эти строки:

        STAT = 100
        write_metric(STAT, metric)

всегда будет отправлять 100 в качестве вашего значения.

person John Rotenstein    schedule 12.10.2018