AWS Lambda записывает неверные результаты в метриках CloudWatch - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в 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)

1 Ответ

0 голосов
/ 12 октября 2018

Эти строки:

        STAT = 100
        write_metric(STAT, metric)

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

...