Autoscaling with Aodh: create alarm missing paramenter: resource_id,...

Bug #1801755 reported by Vu Nguyen Duy (CBR09)
10
This bug affects 2 people
Affects Status Importance Assigned to Milestone
senlin
New
Undecided
Unassigned

Bug Description

Hi all,
I've tried created aodh alarm to trigger senlin receiver "webhook", I followed official docs
https://docs.openstack.org/senlin/latest/scenarios/autoscaling_ceilometer.html
But when I created aodh alarm it throw error:
aodh --debug alarm create --name cpu_hi --type gnocchi_resources_threshold --description 'instance running hot' --metric cpu_util --threshold 20.0 --comparison-operator gt --aggregation-method mean --granularity 300 --evaluation-periods 1 --alarm-action $ALRM_URL01 --repeat-actions False --query metadata.user_metadata.cluster_id=$MYCLUSTER_ID
usage: aodh alarm create [-h] [-f {json,shell,table,value,yaml}] [-c COLUMN]
                         [--max-width <integer>] [--fit-width] [--print-empty]
                         [--noindent] [--prefix PREFIX] --name <NAME> -t
                         <TYPE> [--project-id <PROJECT_ID>]
                         [--user-id <USER_ID>] [--description <DESCRIPTION>]
                         [--state <STATE>] [--severity <SEVERITY>]
                         [--enabled {True|False}]
                         [--alarm-action <Webhook URL>]
                         [--ok-action <Webhook URL>]
                         [--insufficient-data-action <Webhook URL>]
                         [--time-constraint <Time Constraint>]
                         [--repeat-actions {True|False}] [--query <QUERY>]
                         [--comparison-operator <OPERATOR>]
                         [--evaluation-periods <EVAL_PERIODS>]
                         [--threshold <THRESHOLD>] [--event-type <EVENT_TYPE>]
                         [--granularity <GRANULARITY>]
                         [--aggregation-method <AGGR_METHOD>]
                         [--metric <METRIC>] [--resource-type <RESOURCE_TYPE>]
                         [--resource-id <RESOURCE_ID>]
                         [--composite-rule <COMPOSITE_RULE>]
aodh alarm create: error: gnocchi_resources_threshold requires --metric, --threshold, --resource-id, --resource-type and --aggregation-method

It's seem missing resource_type and resource_id?, I can make it work if I specify a resource_type and a resource_id of a instance in cluster, but I want it work on all instances of my cluster, so how can I do that?, what do "--query metadata.user_metadata.cluster_id=$MYCLUSTER_ID" mean?, how can I fix that?

Thanks

description: updated
description: updated
Revision history for this message
Vu Nguyen Duy (CBR09) (nguyenduyvu099) wrote :

@Duc Truong: is there any information about that?

Revision history for this message
Chiawei Xie (dommgifer) wrote :

I've tried to use this command:

aodh alarm create
--type gnocchi_aggregation_by_resources_threshold
--name cpu-high
--metric cpu_util
--threshold 70
--comparison-operator gt
--description 'instance running hot'
 --evaluation-periods 1
--aggregation-method mean
--alarm-action $ALRM_URL01
--granularity 60
--repeat-actions False
--query '{"=": {"metadata.user_metadata.cluster_id": "$MYCLUSTER_ID""}}'
--resource-type instance

But got error message:
Resource type instance has no metadata.user_metadata.cluster_id attribute (HTTP 400)

So, aodh created alarm type with gnocchi_aggregation_by_resources_threshold or gnocchi_resources_threshold
was not work.

Revision history for this message
Pavel (spa-87) wrote :

Hello, I didn't test the `cluster_id` metadata yet, but `server_group` works fine for me with rocky release.

In order to enable this field, you have to add metadata at a cluster profile:
metadata:
  metering.server_group: $YOURCLUSTER_ID

Now you should be able to query `server_group` field:
'{"=": {"server_group": "$YOURCLUSTER_ID"}}'

None additional configs are required. Gnocchi has `server_group` filed for `instance` resource-type by default.

Revision history for this message
Chiawei Xie (dommgifer) wrote :

If want to used clusetr_id,
here was my step:

1. Add gnocchi resource-type instance with cluster_id attributes(I used gnocchi API):
https://gnocchi.xyz/rest.html#id21

Body:
[
 {
    "op": "add",
    "path": "/attributes/cluster_id",
    "value": {
     "type": "string",
     "min_length": 0,
     "max_length": 255,
     "required": false
  }
 }
]

2. Modify ceilometer gnocchi_resources.yaml (ceilometer/publisher/data/gnocchi_resources.yaml)
https://github.com/openstack/ceilometer/blob/master/ceilometer/publisher/data/gnocchi_resources.yaml#L111

Under the server_group, add this line:
cluster_id: resource_metadata.user_metadata.cluster_id

3. Restart ceilometer service (Both controller and compute)

4. Modify aodh rest.py(aodh/notifier/rest.py)
https://github.com/openstack/aodh/blob/master/aodh/notifier/rest.py#L79

Under the headers['content-type'] , add this line:
headers['openstack-api-version'] = 'clustering 1.10'

5. Restart aodh service

6. create aodh alarm:

aodh alarm create \
--type gnocchi_aggregation_by_resources_threshold \
--name cpu-high \
--metric cpu_util \
--threshold 70 \
--comparison-operator gt \
--description 'instance running hot' \
 --evaluation-periods 1 \
--aggregation-method mean \
--alarm-action $ALRM_URL01 \
--granularity 60 \
--repeat-actions False \
--query '{"=": {"cluster_id": "$MYCLUSTER_ID""}}' \
--resource-type instance

Revision history for this message
Jobin (haibinji) wrote :

You also need to configure the following in /etc/ceilometer/ceilometer.conf and restart the ceilometer service

[DEFAULT]
reserved_metadata_keys = cluster_id

[compute]
instance_discovery_method = naive

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.