Как параметризовать идентификатор экземпляра в шаблоне AWS CloudWatch? - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь настроить панель мониторинга с метриками CPUUtilization. У нас есть 12 экземпляров, и каждую неделю мы выключаем эти экземпляры, и наша панель инструментов Cloudwatch становится устаревшей без этих базовых экземпляров. В следующий раз, когда мы раскручиваем новый набор серверов, мы должны вручную перейти на панель инструментов и отредактировать ее с помощью новых идентификаторов экземпляров. Это ручной процесс, и мы должны его автоматизировать. Я прикрепил базовый шаблон, который мы используем для текущей панели.

{
"widgets": [
    {
        "type": "metric",
        "x": 0,
        "y": 0,
        "width": 9,
        "height": 9,
        "properties": {
            "view": "timeSeries",
            "stacked": false,
            "metrics": [
                [ "AWS/EC2", "CPUUtilization", "InstanceId", "i-0894e335e6ad2e561", { "period": 60 } ],
                [ "...", "i-01fde0cee726e7896", { "period": 60 } ],
                [ "...", "i-096e96499aa827924", { "period": 60 } ],
                [ "...", "i-0e550d881bcbf41c5", { "period": 60 } ],
                [ "...", "i-041a59616f061a373", { "period": 60 } ],
                [ "...", "i-06a6237975ec0f274", { "period": 60 } ],
                [ "...", "i-052f844dd071eab25", { "period": 60 } ],
                [ "...", "i-02dfa8d807c1f5477", { "period": 60 } ],
                [ "...", "i-0cda118fc6e375093", { "period": 60 } ],
                [ "...", "i-02ef6dfd642f2ffd4", { "period": 60 } ],
                [ "...", "i-0e0e9c12d672a48a7", { "period": 60 } ],
                [ "...", "i-0eb432b4098c4e9d8", { "period": 60 } ]
            ],
            "region": "ap-southeast-2",
            "period": 300,
            "title": "TEST CPU Utilization",

        }
    }

]

Есть идеи, как ее решить?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете запустить событие cloudwatch на новых запущенных экземплярах

enter image description here

Вы определяете лямбда-функцию как цель, и в ней вы можете сделать вызов API PutDashboard :

client.put_dashboard(DashboardName='string', DashboardBody='string')

Событие cloudwatch сообщит вам, какой идентификатор экземпляра был запущен, и вы можете использовать его в упомянутом вызове API.

Вы также можете прослушать событие завершения и автоматически удалить экземпляр с приборной панели.

Наконец, убедитесь, что ваш код работает именно для тех экземпляров, для которых вы намеревались. Я предлагаю вам использовать тег для этого.

0 голосов
/ 25 июня 2018

Я бы сделал это, сгенерировав рассматриваемую CloudFormation, в частности, используя язык шаблонов и скрипт bash для начальной загрузки шаблонов.

Шаблоны в Python

Создание шаблонов в Java

Создание шаблонов в Javascript

В зависимости от синтаксиса выбранного вами языка шаблонов, я ожидаю, что ваш шаблонФайл будет выглядеть примерно так:

...more cloudformation...
{
"widgets": [
    {
        "type": "metric",
        "x": 0,
        "y": 0,
        "width": 9,
        "height": 9,
        "properties": {
            "view": "timeSeries",
            "stacked": false,
            "metrics": [
                <% for instance in instances { %>
                    [ "AWS/EC2", "CPUUtilization", "InstanceId", "<% instance.id %>", { "period": 60 } ],
                <% } %> 
            ],
            "region": "ap-southeast-2",
            "period": 300,
            "title": "TEST CPU Utilization",
        }
    }

]
}
... more cloudformation...

Как только вы определите шаблонный процесс, вам нужно будет найти идентификаторы вашего экземпляра, чтобы они могли быть переданы в шаблонный процесс в качестве входных данных.Для этого я рекомендую использовать теги EC2 для предоставления идентификаторов тегам вашим экземплярам и использовать интерфейс командной строки AWS для запроса таких экземпляров.

aws ec2 describe-instances --filters "Name=tag:[tagName],Values=[tagValue]"

Эта команда должна выполняться из того же скрипта, который упомянут выше, с выводомподается в шаблонизатор.

Обратите внимание, что [tagName] и [tagValue] должны быть заменены вашими собственными tagName и tagValue, которые вы предоставили своим экземплярам, ​​как упомянуто выше.

...