CloudWatch оповещает Pushbullet через SNS и AWS Lambda — Chrome World по-русски

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

Я уже написал статью о Pushbullet и его API, поэтому сначала проверьте это, если вы не знакомы с ним. Теперь я чувствую, что круг завершен, потому что я могу наконец показать вам реальный пример использования. Их push-уведомления на моем телефоне особенные, потому что я или мои сценарии отправляем их. Электронные письма могут быть потеряны, но, по крайней мере, на Android можно контролировать, как ведут себя различные виды уведомлений. Следовательно, я настроил толчки Pushbullet, чтобы иметь большее значение, чем другие.

Что еще? Я еще не нашел хорошую альтернативу. Единственное, я мог бы найти способ кажется слишком сложным для этой простой задачи. К сожалению, приложение AWS Console не отправляет мне уведомления.

CloudWatch Alarms

Хотя процесс настройки аварийных сигналов CloudWatch стоит отдельной статьи, вот соответствующая часть. Убедитесь, что тема SNS получит состояние «in Alarm», затем нажмите «Создать тему» :

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

Если вы нажмете « Добавить уведомление», вы можете создать дополнительные нажатия, например, когда сигнал тревоги вернется в состояние «ОК». Это может быть полезно для других метрик, которые могут разрешаться самостоятельно, таких как память и процессор.

AWS Lambda

Перейдите в Консоль управления Lambda (проверьте свой регион). В основе этого лежит функция Node.js, поэтому создайте ее следующим образом:

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

Настройки по умолчанию в порядке везде, кроме того, что стоит установить имя и этот код:

{
    "Records": [
        {
            "Sns": {
                "Subject": "Test Subject",
                "Message": "Test Message"
            }
        }
    ]
}

Вот функция Node.js, которую вы ждали:

exports.handler = (event, context, callback) => {
    var SNS = event.Records[0].Sns;
    var pushTitle = SNS.Subject;
    if (typeof SNS.Message === "string") {
        try {
            SNS.Message = JSON.parse(SNS.Message);
        } catch (e) {}
    }
    var pushBody = typeof SNS.Message.NewStateReason === "string" ?
        SNS.Message.NewStateReason :
        SNS.Message;
    var request = require('https').request({
            hostname: 'api.pushbullet.com',
            path: '/v2/pushes',
            method: 'POST',
            headers: {
                'Access-Token': 'o.THEpushbulletACCESStokenGOEShere',
                'Content-Type': 'application/json'
            }
        },
        (res) => {
            console.log('Pushbullet API contact status:', res.statusCode);
        }
    );
    request.on('error', (e) => {
        console.error('Pushbullet function connect error:', e);
    });
    request.write(
        JSON.stringify({
            title: pushTitle,
            body: pushBody,
            type: "note"
        })
    );
    request.end();
    console.log("From pushbullet function: " + pushTitle + "; " + pushBody);
};
  • Сохранить, затем тест, чтобы увидеть ваш первый толчок полета.
  • Получите свой токен доступа и замените его заполнителем.
  • Я использую вызов https.request.
  • В журналах вернуться к CloudWatch.
  • Функция работает с любым сообщением; он строго не ожидает конкретного сообщения ниже.

Ниже приведено содержание сигнала тревоги CloudWatch, поступающего от SNS. Вы можете видеть, что это наиболее значимое свойство (в данном примере это мало места на диске):event.Records[0].Sns.Message``NewStateReason

{
  "AlarmName": "Development: Disk Space",
  "AlarmDescription": "When free disk space drops below comfy levels.",
  "AWSAccountId": "123456789012",
  "NewStateValue": "ALARM",
  "NewStateReason": "Threshold Crossed: 1 out of the last 1 datapoints [2.9922180175781263 (29/06/19 16:05:00)] was less than the threshold (3.0) (minimum 1 datapoint for OK -> ALARM transition).",
  "StateChangeTime": "2019-06-29T16:10:01.997+0000",
  "Region": "EU (Frankfurt)",
  "OldStateValue": "OK",
  "Trigger": {
    "MetricName": "DiskSpaceAvailable",
    "Namespace": "System/Linux",
    "StatisticType": "Statistic",
    "Statistic": "AVERAGE",
    "Unit": null,
    "Dimensions": [
      {
        "value": "/",
        "name": "MountPath"
      },
      {
        "value": "i-1234567890abcdef0",
        "name": "InstanceId"
      },
      {
        "value": "/dev/nvme0n1p1",
        "name": "Filesystem"
      }
    ],
    "Period": 300,
    "EvaluationPeriods": 1,
    "ComparisonOperator": "LessThanThreshold",
    "Threshold": 3,
    "TreatMissingData": "- TreatMissingData: missing",
    "EvaluateLowSampleCountPercentile": ""
  }
}

Когда SNS подключится к этой функции, рисунок будет выглядеть так:

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

Простая служба уведомлений

Наконец, шаг, где соединение CloudWatch Alarms с Pushbullet собирается вместе! Думайте о SNS как о центральном узле, куда поступают программные сообщения от других служб. В то же время они выходят и при подписке на них по разным каналам. Простое использование – «получать электронную почту, когда что-то идет не так». Однако мы дополняем это push-уведомлением через функцию lambda. Перейдите в SNS -> Подписки (убедитесь, что ваш регион правилен) и нажмите « Создать подписку» . К счастью, поля помочь вам авто завершения, так что найти в теме ARN и конечную точку из списка не должно быть трудно.

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

тестирование

Одно дело, что лямбда-функция отправляет вам эти тестовые уведомления, но требуется дальнейшее тестирование.

  • Выберите строку, которую вы создали. Затем нажмите Опубликовать сообщение и заполните его произвольным содержимым. Вы должны получить электронное письмо и сообщение с тем, что вы ввели в качестве темы и сообщения. Если это работает, вы можете повторно использовать функцию Pushbullet для других тем SNS.
  • Временно понизьте пороговое значение в вашей тревоге, поэтому CloudWatch сам пингует SNS. Обратите внимание, что, возможно, он настроен на действия только тогда, когда проблема возникла некоторое время. Из-за этого толчок может показаться отложенным.

Сводка полной цепочки сигналов тревоги CloudWatch для цепи Pushbullet

  1. Экземпляр предоставляет данные об использовании памяти и диска EC2 для CloudWatch. Что-то идет плохо … ИЛИ возвращается к нормальной жизни !
  2. Сигнализации CloudWatch Триггеры и уведомляет темы SNS .
  3. SNS отправляет вам электронное письмо, а также запускает функцию AWS Lambda .
  4. Функция Node.js связывается с API Pushbullet и передает сообщение.
  5. Ваш телефон звонит в ответ на событие. Ура!

CloudWatch оповещает Pushbullet через SNS и AWS Lambda

CloudWatch оповещает Pushbullet через SNS и AWS Lambda