Openstack AODH(Alarm)


목차

1. 사전 준비 사항

  • 1.1. Nova Instance를 생성

  • 1.2. Jmeter 설정 및 HTTP_REQUEST 설정

2. Metric 정보 확인

  • 2.1. CPU Metric에 대한 이해

  • 2.2. Metric 수집 정보 확인

3. 알람 설정

  • 3.1 CPU 알람 설정

  • 3.2 Memory 알람 설정

  • 3.3 알람 설정 확인

4. Jmeter를 활용한 부하 및 Alarm Test

  • 4.1 Jmeter를 활용한 부하

  • 4.2 Alarm 결과 확인

4. Jmeter를 활용한 부하 및 Alarm Test

5. Alarm에 대한 종료

6. AODH 추후 고려할 점


AODH

AODH 사용자에게 제공되는 모니터링 서비스이다. 모니터링 이용하여 Heat와 같은 Orchestration 서비스에서 인스턴스 그룹의 Auto-Scaling이 가능하며 사용자에게 클라우드 리소스에 대한 알람을 보낼 수 있다.

아키텍처는 다음과 같다.

aodh_1

데이터는 Ceilometer에 의해 수집되며 Gnocchi라고 하는 시계열 데이터베이스로 전송이 되게 된다.
Gnocchi는 측정된 데이터를 시계열 데이터베이스에 맞는 포맷으로 최적화하여 저장하고, Aodh는 알람 서비스로 gnocchi의 데이터를 이용하여 알람을 보낼 수 있게 된다.


1. 사전 준비 사항

1.1. Nova Instance를 생성

서버는 2Core 4Memory를 가진 서버로 생성하였다.

ops server list
# > output
+--------------------------------------+------+--------+------------------------------------------+-----------------------+--------------+
| ID                                   | Name | Status | Networks                                 | Image                 | Flavor       |
+--------------------------------------+------+--------+------------------------------------------+-----------------------+--------------+
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d | Test | ACTIVE | prv_net_1=10.10.10.10, 192.168.10.100    | CentOS7.9-cloud-image | a2.win.small |
+--------------------------------------+------+--------+------------------------------------------+-----------------------+--------------+

해당 서버에는 Tomcat WAS를 띄운다.


1.2. Jmeter 설정 및 HTTP_REQUEST 설정

Jmeter설치를 진행한다.

# install jmeter
brew install jmeter

# open jmeter
open /usr/local/bin/jmeter

Jmeter를 열어 적당히 해당 서버로 Http_request를 설정한다.



2. Metric 정보 확인

metric은 특정 리소스에 항목들을에 대하여 archive-policy를 적용하여 만들게 된다.
아래와 같이 인스턴스 항목에는 vcpu, cpu, memory, memory.usage 등등이 존재하는 것을 확인 할 수 있다.

https://docs.openstack.org/ceilometer/train/admin/telemetry-measurements.html

ops metric list
# > oputput
+--------------------------------------+---------------------+---------------------------------+---------+--------------------------------------+
| id                                   | archive_policy/name | name                            | unit    | resource_id                          |
+--------------------------------------+---------------------+---------------------------------+---------+--------------------------------------+
| 3060ab53-faa5-4566-93f1-e1f1d866775c | ceilometer-low      | perf.cpu.cycles                 |         | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| 3b3e2cd7-276d-4c96-91aa-80c78a07219a | ceilometer-low      | disk.ephemeral.size             | GB      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| 543f2639-905b-4f2c-91bf-dea93f864077 | ceilometer-low      | vcpus                           | vcpu    | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| 5fc7b51c-0a74-4c85-81cc-b2504ff28b6a | ceilometer-low      | memory                          | MB      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| 90ae5e59-476e-4d6a-984e-313bd413c342 | ceilometer-low      | memory.usage                    | MB      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| a8309902-bc63-4e00-90b5-7e31cca0e942 | ceilometer-low-rate | cpu                             | ns      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| b5c57456-e508-4d54-8c0c-8ae3604e7d7a | ceilometer-low      | disk.root.size                  | GB      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| b9e2c5b9-e2ec-4669-82b1-c9a6a356a141 | ceilometer-low      | compute.instance.booting.time   | sec     | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| efb70784-e295-4837-9d16-69c4910b5221 | ceilometer-low      | perf.cache.misses               |         | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
+--------------------------------------+---------------------+---------------------------------+---------+--------------------------------------+


2.1 CPU Metric에 대한 이해

현재 openstack 특정 버전 이 후 부터 측정되는 metric 중에 cpu_util의 값이 존재하지 않으므로 cpu 메트릭을 이용하여 cpu_util을 계산해야 한다.
cpu메트릭은 cpu사용량을 nanosecond 단위로 측정한 것이므로 아래와 같이 계산한다.
1(ns) = 0.000000001(sec)
cpu_util(%) = cpu(ns) / 1000000000 / granularity(sec) / cpu_core(vpcu) * 100

# metric list
ops metric list
+--------------------------------------+---------------------+---------------------------------+---------+--------------------------------------+
| id                                   | archive_policy/name | name                            | unit    | resource_id                          |
+--------------------------------------+---------------------+---------------------------------+---------+--------------------------------------+
| 3060ab53-faa5-4566-93f1-e1f1d866775c | ceilometer-low      | perf.cpu.cycles                 |         | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| 3b3e2cd7-276d-4c96-91aa-80c78a07219a | ceilometer-low      | disk.ephemeral.size             | GB      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| 543f2639-905b-4f2c-91bf-dea93f864077 | ceilometer-low      | vcpus                           | vcpu    | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| 5fc7b51c-0a74-4c85-81cc-b2504ff28b6a | ceilometer-low      | memory                          | MB      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| 90ae5e59-476e-4d6a-984e-313bd413c342 | ceilometer-low      | memory.usage                    | MB      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| a8309902-bc63-4e00-90b5-7e31cca0e942 | ceilometer-low-rate | cpu                             | ns      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| b5c57456-e508-4d54-8c0c-8ae3604e7d7a | ceilometer-low      | disk.root.size                  | GB      | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| b9e2c5b9-e2ec-4669-82b1-c9a6a356a141 | ceilometer-low      | compute.instance.booting.time   | sec     | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
| efb70784-e295-4837-9d16-69c4910b5221 | ceilometer-low      | perf.cache.misses               |         | 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d |
+--------------------------------------+---------------------+---------------------------------+---------+--------------------------------------+


2.2. Metric 수집 정보 확인

메모리 사용량(memory.usage)에 대한 메트릭이 있는 것을 확인 하였으니 항목에 대한 측정치를 확인 하려면 아래와 같이 확인 할 수 있다.
‘ceilometer-low’라는 archive-policy에 의하여 5분 주기로 수집이 되고 있으며 timestamp, granularity, value 값을 가지고 있다.

# metric about memory.usage
ops metric measures show 90ae5e59-476e-4d6a-984e-313bd413c342 --start 2022-02-09T17:35:00+09:00
+---------------------------+-------------+-------+
| timestamp                 | granularity | value |
+---------------------------+-------------+-------+
| 2022-02-09T17:35:00+09:00 |       300.0 | 324.0 |
| 2022-02-09T17:40:00+09:00 |       300.0 | 324.0 |
| 2022-02-09T17:45:00+09:00 |       300.0 | 324.0 |
| 2022-02-09T17:50:00+09:00 |       300.0 | 324.0 |
| 2022-02-09T17:55:00+09:00 |       300.0 | 324.0 |
+---------------------------+-------------+-------+

# metric about cpu nanosecond
openstack metric measures show --resource-id 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --aggregation rate:mean cpu --start 2022-02-11T05:00:00+00:00
openstack metric aggregates '(metric cpu rate:mean)' id=1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --start 2022-02-11T05:00:00+00:00

# metric about cpu second
openstack metric aggregates '(/ (aggregate rate:mean (metric cpu mean)) 1000000000)' id=1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --start 2022-02-10T05:00:00+00:00

# metric about cpu utils --> cpu_used_time(sec)/cpu_data_period(second)
openstack metric aggregates '(* (/ (/ (aggregate rate:mean (metric cpu mean)) 300000000000) 2) 100)' id=1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --start 2022-02-11T06:40:00+00:00

현재 생성되어 있는 archive-policy는 아래와 같으며 definition항목, gnocchi에 내장된 aggregation_methods등에 의해 정의 된다.
ceilometer-low의 경우 데이터 포인트를 30일동안 8640개를 찍겠다는 의미이며 결국 5분 주기로 aggregation_methods인 측정을 수행한다는 의미로 이해하면 된다.

ops metric archive-policy list
# > output
+----------------------+-------------+-----------------------------------------------------------------------+---------------------------------+
| name                 | back_window | definition                                                            | aggregation_methods             |
+----------------------+-------------+-----------------------------------------------------------------------+---------------------------------+
| bool                 |        3600 | - points: 31536000, timespan: 365 days, 0:00:00, granularity: 0:00:01 | last                            |
| ceilometer-dashboard |           0 | - points: 72, timespan: 6:00:00, granularity: 0:05:00                 | rate:mean, mean                 |
| ceilometer-high      |           0 | - points: 3600, timespan: 1:00:00, granularity: 0:00:01               | mean                            |
|                      |             | - points: 1440, timespan: 1 day, 0:00:00, granularity: 0:01:00        |                                 |
|                      |             | - points: 8760, timespan: 365 days, 0:00:00, granularity: 1:00:00     |                                 |
| ceilometer-high-rate |           0 | - points: 3600, timespan: 1:00:00, granularity: 0:00:01               | rate:mean, mean                 |
|                      |             | - points: 1440, timespan: 1 day, 0:00:00, granularity: 0:01:00        |                                 |
|                      |             | - points: 8760, timespan: 365 days, 0:00:00, granularity: 1:00:00     |                                 |
| ceilometer-low       |           0 | - points: 8640, timespan: 30 days, 0:00:00, granularity: 0:05:00      | mean                            |
| ceilometer-low-rate  |           0 | - points: 8640, timespan: 30 days, 0:00:00, granularity: 0:05:00      | rate:mean, mean                 |
| high                 |           0 | - points: 3600, timespan: 1:00:00, granularity: 0:00:01               | std, count, min, max, sum, mean |
|                      |             | - points: 10080, timespan: 7 days, 0:00:00, granularity: 0:01:00      |                                 |
|                      |             | - points: 8760, timespan: 365 days, 0:00:00, granularity: 1:00:00     |                                 |
| low                  |           0 | - points: 8640, timespan: 30 days, 0:00:00, granularity: 0:05:00      | std, count, min, max, sum, mean |
| medium               |           0 | - points: 10080, timespan: 7 days, 0:00:00, granularity: 0:01:00      | std, count, min, max, sum, mean |
|                      |             | - points: 8760, timespan: 365 days, 0:00:00, granularity: 1:00:00     |                                 |
+----------------------+-------------+-----------------------------------------------------------------------+---------------------------------+



3. 알람 설정

Gnocchi를 활용하여 알람을 설정한다.

위 에서 방식에 따르면 threshold(ns) 계산식은 아래와 같다.
cpu_util(%) = cpu(ns) / 1000000000 / granularity(sec) / cpu_core(vpcu) * 100
cpu(ns) = cpu_util(%) * 1000000000 * granularity(sec) * cpu_core(vpcu) / 100
cpu(ns) = 70 * 1000000000 * 300 * 2 / 100 = 420000000000
cpu(ns) = 15 * 1000000000 * 300 * 2 / 100 = 90000000000

3.1 CPU 알람 설정

# CPU 사용량이 5분 간격으로 15% 이상 연속적으로 3번을 초과한 경우
# This creates an alarm that will fire when the average cpu utilization for an individual instance exceeds 15% for three consecutive 5 minute periods.
  openstack alarm create \
  --name cpu_usage_over_15 \
  --type gnocchi_resources_threshold \
  --description 'instance cpu' \
  --metric cpu \
  --threshold 90000000000 \
  --comparison-operator gt \
  --aggregation-method rate:mean \
  --granularity 300 \
  --evaluation-periods 3 \
  --resource-id 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d \
  --resource-type instance \
  --repeat-actions true \
  --alarm-action "https://user:{token}@{jenkins_url}/job/test-aodh-cpu15-alarm/build" 


3.2 Memory 알람 설정

# 메모리 사용량이 5분 간격으로 1024MB 이상 연속적으로 3번을 초과한 경우
# This creates an alarm that will fire when the average memory utilization for an individual instance exceeds 1024MB for three consecutive 5 minute periods.
openstack alarm create \
  --name memory_usage_over_1024 \
  --type gnocchi_resources_threshold \
  --description 'instance memory' \
  --metric memory.usage\
  --threshold 1024 \
  --comparison-operator gt \
  --aggregation-method mean \
  --granularity 300 \
  --evaluation-periods 3 \
  --resource-id 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d \
  --resource-type instance \
  --repeat-action true \
  --alarm-action "https://user:{token}@{jenkins_url}/job/test-aodh-memory1024-alarm/build"


3.3 알람 설정 확인

테스트 이전 사용량 및 알람을 확인
테스트 이전 메트릭은 현재 조건 값을 충족하지 않으므로 alarm-state는 ok상태이다.

# cpu check 
openstack metric aggregates '(* (/ (/ (aggregate rate:mean (metric cpu mean)) 300000000000) 2) 100)' id=1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --start 2022-02-11T06:40:00+00:00
+------------+---------------------------+-------------+---------------------+
| name       | timestamp                 | granularity |               value |
+------------+---------------------------+-------------+---------------------+
| aggregated | 2022-02-11T06:45:00+00:00 |       300.0 |               0.135 |
| aggregated | 2022-02-11T06:50:00+00:00 |       300.0 | 0.26666666666666666 |
| aggregated | 2022-02-11T06:55:00+00:00 |       300.0 |   2.651666666666667 |
| aggregated | 2022-02-11T07:00:00+00:00 |       300.0 |  0.9400000000000001 |
| aggregated | 2022-02-11T07:05:00+00:00 |       300.0 |               3.465 |
| aggregated | 2022-02-11T07:10:00+00:00 |       300.0 |   5.401666666666666 |
+------------+---------------------------+-------------+---------------------+

# memory check 
openstack metric aggregates '(metric memory.usage mean)' id=1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --start 2022-02-11T06:40:00+00:00
+--------------------------------------------------------+---------------------------+-------------+--------+
| name                                                   | timestamp                 | granularity |  value |
+--------------------------------------------------------+---------------------------+-------------+--------+
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T06:40:00+00:00 |       300.0 |  400.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T06:45:00+00:00 |       300.0 |  400.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T06:50:00+00:00 |       300.0 |  400.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T06:55:00+00:00 |       300.0 |  399.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:00:00+00:00 |       300.0 |  399.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:05:00+00:00 |       300.0 |  593.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:10:00+00:00 |       300.0 |  893.0 |
+--------------------------------------------------------+---------------------------+-------------+--------+


# alarm state check
ops alarm list
+--------------------------------------+-----------------------------+------------------------+-------------------+----------+---------+
| alarm_id                             | type                        | name                   | state             | severity | enabled |
+--------------------------------------+-----------------------------+------------------------+-------------------+----------+---------+
| 5ac83325-c1e4-42e7-8787-dd5261216e84 | gnocchi_resources_threshold | memory_usage_over_1024 | ok                | low      | True    |
| 6278561b-f369-4fc7-bba9-51870b7414ef | gnocchi_resources_threshold | cpu_usage_over_15      | ok                | low      | True    |
| 7ed5a6bc-8e33-4bd9-a2c9-1eb280001e55 | gnocchi_resources_threshold | cpu_hi_webhook_test    | insufficient data | low      | True    |
| f8ce29a5-2392-4bf6-a46b-1d13d39cc025 | gnocchi_resources_threshold | cpu_hi_webhook_test    | insufficient data | low      | True    |
| 8583d619-f8f0-49fe-b332-93493a82d0c8 | gnocchi_resources_threshold | cpu_hi_webhook         | insufficient data | low      | True    |
| a6d4dcfa-e534-4058-8547-548d1f645098 | gnocchi_resources_threshold | cpu_hi                 | insufficient data | low      | True    |
+--------------------------------------+-----------------------------+------------------------+-------------------+----------+---------+



4. Jmeter를 활용한 부하 및 Alarm Test

4.1 Jmeter를 활용한 부하

대상 서버에는 임시로 was및 소스를 올려놨고 테스트를 진행했다.

aodh_3

부하 테스트를 시작한 시간은 16:12분이다.

예상하는 결과는 16:15분에 측정된 값, 16:20분에 측정된 값, 16:30분에 측정된 값이 설정한 알람의 조건보다 (CPU > 15%, MEMORY > 1024MB) 값이 모두 크다면 알람의 상태는 ok -> alarm 상태로 변경되며 jenkins build가 수행 되는 것이다.


4.2 Alarm 결과 확인

약 15분 후 결과 확인

# cpu check 
openstack metric aggregates '(* (/ (/ (aggregate rate:mean (metric cpu mean)) 300000000000) 2) 100)' id=1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --start 2022-02-11T06:40:00+00:00
+------------+---------------------------+-------------+---------------------+
| name       | timestamp                 | granularity |               value |
+------------+---------------------------+-------------+---------------------+
| aggregated | 2022-02-11T06:45:00+00:00 |       300.0 |               0.135 |
| aggregated | 2022-02-11T06:50:00+00:00 |       300.0 | 0.26666666666666666 |
| aggregated | 2022-02-11T06:55:00+00:00 |       300.0 |   2.651666666666667 |
| aggregated | 2022-02-11T07:00:00+00:00 |       300.0 |  0.9400000000000001 |
| aggregated | 2022-02-11T07:05:00+00:00 |       300.0 |               3.465 |
| aggregated | 2022-02-11T07:10:00+00:00 |       300.0 |   5.401666666666666 |
| aggregated | 2022-02-11T07:15:00+00:00 |       300.0 |              27.975 |
| aggregated | 2022-02-11T07:20:00+00:00 |       300.0 |   53.18666666666667 |
| aggregated | 2022-02-11T07:25:00+00:00 |       300.0 |   56.45166666666667 |
+------------+---------------------------+-------------+---------------------+

# memory check 
openstack metric aggregates '(metric memory.usage mean)' id=1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --start 2022-02-11T06:40:00+00:00
+--------------------------------------------------------+---------------------------+-------------+--------+
| name                                                   | timestamp                 | granularity |  value |
+--------------------------------------------------------+---------------------------+-------------+--------+
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T06:40:00+00:00 |       300.0 |  400.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T06:45:00+00:00 |       300.0 |  400.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T06:50:00+00:00 |       300.0 |  400.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T06:55:00+00:00 |       300.0 |  399.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:00:00+00:00 |       300.0 |  399.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:05:00+00:00 |       300.0 |  593.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:10:00+00:00 |       300.0 |  893.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:15:00+00:00 |       300.0 | 1207.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:20:00+00:00 |       300.0 | 1374.0 |
| 1c02a8a3-bd1a-41f6-91de-2b9555c35e6d/memory.usage/mean | 2022-02-11T07:25:00+00:00 |       300.0 | 1544.0 |
+--------------------------------------------------------+---------------------------+-------------+--------+

# alarm state check
ops alarm list
+--------------------------------------+-----------------------------+------------------------+-------------------+----------+---------+
| alarm_id                             | type                        | name                   | state             | severity | enabled |
+--------------------------------------+-----------------------------+------------------------+-------------------+----------+---------+
| 5ac83325-c1e4-42e7-8787-dd5261216e84 | gnocchi_resources_threshold | memory_usage_over_1024 | alarm             | low      | True    |
| 6278561b-f369-4fc7-bba9-51870b7414ef | gnocchi_resources_threshold | cpu_usage_over_15      | alarm             | low      | True    |
| 7ed5a6bc-8e33-4bd9-a2c9-1eb280001e55 | gnocchi_resources_threshold | cpu_hi_webhook_test    | insufficient data | low      | True    |
| f8ce29a5-2392-4bf6-a46b-1d13d39cc025 | gnocchi_resources_threshold | cpu_hi_webhook_test    | insufficient data | low      | True    |
| 8583d619-f8f0-49fe-b332-93493a82d0c8 | gnocchi_resources_threshold | cpu_hi_webhook         | insufficient data | low      | True    |
| a6d4dcfa-e534-4058-8547-548d1f645098 | gnocchi_resources_threshold | cpu_hi                 | insufficient data | low      | True    |
+--------------------------------------+-----------------------------+------------------------+-------------------+----------+---------+

예상한 바와 같이 측정된 값이 5분 간격으로 3번 연속적으로 조건 값을 넘기자 알람이 수행되었다.



5. Alarm에 대한 종료

알람은 repeat-action 값이 Default:true 이기 때문에 alarm-state값이 alarm -> ok 로 다 변경 되기 전까지 1분 간격으로 지속적으로 오게 된다.

알람의 상태변경은 마찬가지로 5분간격으로 3번 연속적으로 조건 값을 만족하지 못해야 한다.

다음 시간을 보면 테스트를 종료한 16:25분 이 후 부터 CPU 사용량은 줄어들게 되지만 JMeter Thread가 차례로 줄어들기 때문에 16시 30분에는 19.38%의 사용량이 측정되었고,
따라서 16시 35분, 16시 40분, 16시 45분 까지의 3개의 데이터를 확인 한 후, alarm-state는 alarm -> ok가 되었다.

openstack metric aggregates '(* (/ (/ (aggregate rate:mean (metric cpu mean)) 300000000000) 2) 100)' id=1c02a8a3-bd1a-41f6-91de-2b9555c35e6d --start 2022-02-11T06:40:00+00:00
+------------+---------------------------+-------------+---------------------+
| name       | timestamp                 | granularity |               value |
+------------+---------------------------+-------------+---------------------+
| aggregated | 2022-02-11T06:45:00+00:00 |       300.0 |               0.135 |
| aggregated | 2022-02-11T06:50:00+00:00 |       300.0 | 0.26666666666666666 |
| aggregated | 2022-02-11T06:55:00+00:00 |       300.0 |   2.651666666666667 |
| aggregated | 2022-02-11T07:00:00+00:00 |       300.0 |  0.9400000000000001 |
| aggregated | 2022-02-11T07:05:00+00:00 |       300.0 |               3.465 |
| aggregated | 2022-02-11T07:10:00+00:00 |       300.0 |   5.401666666666666 |
| aggregated | 2022-02-11T07:15:00+00:00 |       300.0 |              27.975 |
| aggregated | 2022-02-11T07:20:00+00:00 |       300.0 |   53.18666666666667 |
| aggregated | 2022-02-11T07:25:00+00:00 |       300.0 |   56.45166666666667 |
| aggregated | 2022-02-11T07:30:00+00:00 |       300.0 |  19.398333333333333 |
| aggregated | 2022-02-11T07:35:00+00:00 |       300.0 |  1.2016666666666667 |
| aggregated | 2022-02-11T07:40:00+00:00 |       300.0 |  1.5916666666666666 |
| aggregated | 2022-02-11T07:45:00+00:00 |       300.0 |  3.1466666666666665 |
| aggregated | 2022-02-11T07:50:00+00:00 |       300.0 |   5.738333333333333 |
+------------+---------------------------+-------------+---------------------+

실제로 Jenkins build 수행 이력을 확인 하면 아래와 같다.

aodh_5

16시 46분까지 알람을 보낸 이 후 알람이 종료 되었다.



6. AODH 추후 고려할 점

cpu, memory 를 수집하는 주기가 현재는 5분 주기 다보니 alarm을 받기 위해서는 evaluation-periods 값을 1로 설정한다고 할 지라도 최소 5분은 지나야 한다.
archive-policy를 1분 단위로 측정하도록 default 설정을 변경하는 것이 어떨지 고민해보면 좋을 것 같다.
수집주기가 1분이 된다면 사용자들이 알람설정을 하는데 있어서 조금 더 유연하게 설정할 수 있을 것이다.

추가적으로 알람설정시 aggregation_method 부분에 cpu_util을 바로 사용할 수 있도록 설정하는 부분은 찾아봤지만 확인이 어려웠다.
따라서 추후 화면에서 아래와 같은 계산식을 통해 사용자에게 cpu_util 값을 입력 받고, cpu(ns)을 알람에 설정하는 것으로 해야 할 것으로 보인다.
cpu(ns) = cpu_util(%) * 1000000000 * granularity(sec) * cpu_core(vpcu) / 100



7. 참고

  • alarm-action에 들어가는 URL을 호출할 때, 넘어가는 body의 파라미터는 아래와 같다.

    aodh/aodh/notifier/rest.py

      # aodh > notifier > rest.py
      body = {'alarm_name': alarm_name, 'alarm_id': alarm_id,
              'severity': severity, 'previous': previous,
              'current': current, 'reason': reason,
              'reason_data': reason_data}
      headers['content-type'] = 'application/json'
      kwargs = {'data': json.dumps(body),
                'headers': headers}
    
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
      max_retries = self.conf.rest_notifier_max_retries
      session = requests.Session()
      session.mount(action.geturl(),
                    requests.adapters.HTTPAdapter(max_retries=max_retries))
      resp = session.post(action.geturl(), **kwargs)
      LOG.info('Notifying alarm <%(id)s> gets response: %(status_code)s '
                '%(reason)s.', {'id': alarm_id,
                                'status_code': resp.status_code,
                                'reason': resp.reason})
    

    Openstack은 오픈소스이므로 Github에 올려져 있는 소스를 참고하면 정보를 알 수 있다.


  • repeat-actions true인 경우 Interval 변경
    repeat-action 값이 true 인 경우, 1분마다 알람이 재 수신되며 evaluation_interval 값을 변경하면 반복 수신 주기를 변경할 수 있다.

    /etc/aodh/aodh.conf

      [DEFAULT]
      #evaluation_interval = 60
    

    참고소스는 아래와 같다.

    aodh/aodh/evaluator/__init__.py

      class AlarmEvaluationService(cotyledon.Service):
    
          PARTITIONING_GROUP_NAME = "alarm_evaluator"
          EVALUATOR_EXTENSIONS_NAMESPACE = "aodh.evaluator"
    
          def __init__(self, worker_id, conf):
              super(AlarmEvaluationService, self).__init__(worker_id)
              self.conf = conf
    
              ef = lambda: futures.ThreadPoolExecutor(max_workers=10)  # noqa: E731
              self.periodic = periodics.PeriodicWorker.create(
                  [], executor_factory=ef)
    
              self.evaluators = extension.ExtensionManager(
                  namespace=self.EVALUATOR_EXTENSIONS_NAMESPACE,
                  invoke_on_load=True,
                  invoke_args=(self.conf,)
              )
              
              ...... # 생략
    
              if self.evaluators:
                  @periodics.periodic(spacing=self.conf.evaluation_interval,
                                      run_immediately=not delay_start)
                  def evaluate_alarms():
                      self._evaluate_assigned_alarms()
    
              ...... # 생략
    

    소스 호출 순서는 아래와 같다.

    • __init__ -> evaluators -> _evaluate_assigned_alarms -> _evaluate_alarm -> _fire_alarm -> _refresh ->




Ref: https://docs.openstack.org/aodh/train/admin/telemetry-alarms.html
Ref: https://docs.openstack.org/python-openstackclient/ussuri/cli/plugin-commands/aodh.html
Ref: https://gnocchi.osci.io/rest.html#
Ref: https://docs.openstack.org/ceilometer/train/admin/telemetry-measurements.html
Ref: https://docs.infomaniak.cloud/user-guide/0200.AODH/
Ref: https://stackoverflow.com/questions/56216683/openstack-get-vm-cpu-util-with-stein-version
Ref: https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/16.0/html-single/auto_scaling_for_instances/index#example_auto_scaling_based_on_cpu_use

Tag: [ openstack  aodh  alarm  ]