Search code examples
openstackalarmceilometerrdo

Openstack RDO ceilometer alarm action can execute script?


Is there a possibility using the command --alarm-action 'log: //' to run any script or create a VM instances on OpenStack, for example: Can I do something like this

 $ ceilometer alarm-threshold-create --name cpu_high/\ --description 'instance running hot' --meter-name cpu_util  --threshold 70.0 --comparison-operator gt  --statistic avg   --period 600 --evaluation-periods 3   --alarm-action './script.sh'    --query resource_id=INSTANCE_ID

where --alarm-action './script.sh' launches script.sh


Solution

  • It's not possible for a Ceilometer action to run a script.

    The OpenStack APIs have generally been designed under the assumption that the person running the client commands (a) is running them remotely, rather than on the servers themselves, and (b) is not an administrator of the system. In particular (b) means that permitting you to run arbitrary scripts on a server would be a terrible security problem, because you would first need a way to get a script installed on the server and then there would need to be a way to prevent you from trying to run, say, /sbin/reboot.

    For this reason, the ceilometer action needs to be URL. You could set up a simple web server that would receive the signal from ceilometer and execute a script in response.

    If you deploy resources using Heat, you can set up autoscaling groups and have ceilometer alarms trigger an autoscaling action (creating new servers or removing servers, for example).