Hi, I use Aodh + Gnocchi for autoscaling. I also use Mistral + Zaqar for auto-healing. See the example below, hope it helps.
Main template: (...) mongocluster: type: OS::Heat::AutoScalingGroup properties: cooldown: 60 desired_capacity: 2 max_size: 3 min_size: 1 resource: type: ./mongocluster.yaml properties: network: { get_attr: [ voicis_network, be_om_net ] } flavor: { get_param: flavor } image: { get_param: image } key_name: { get_param: key_name } base_mgmt_security_group: { get_attr: [ security_groups, base_mgmt ] } mongodb_security_group: { get_attr: [ security_groups, mongodb ] } root_stack_id: {get_param: "OS::stack_id"} metadata: {"metering.server_group": {get_param: "OS::stack_id"}} mongodb_scaleup_policy: type: OS::Heat::ScalingPolicy properties: adjustment_type: change_in_capacity auto_scaling_group_id: {get_resource: mongocluster} cooldown: 60 scaling_adjustment: 1 mongodb_scaledown_policy: type: OS::Heat::ScalingPolicy properties: adjustment_type: change_in_capacity auto_scaling_group_id: {get_resource: mongocluster} cooldown: 60 scaling_adjustment: -1 cpu_alarm_high: type: OS::Aodh::GnocchiAggregationByResourcesAlarm properties: description: Scale-up if the average CPU > 95% for 1 minute metric: cpu_util aggregation_method: mean granularity: 300 evaluation_periods: 1 threshold: 80 resource_type: instance comparison_operator: gt alarm_actions: - str_replace: template: trust+url params: url: {get_attr: [mongodb_scaleup_policy, signal_url]} query: str_replace: template: '{"=": {"server_group": "stack_id"}}' params: stack_id: {get_param: "OS::stack_id"} cpu_alarm_low: type: OS::Aodh::GnocchiAggregationByResourcesAlarm properties: metric: cpu_util aggregation_method: mean granularity: 300 evaluation_periods: 1 threshold: 5 resource_type: instance comparison_operator: lt alarm_actions: - str_replace: template: trust+url params: url: {get_attr: [mongodb_scaledown_policy, signal_url]} query: str_replace: template: '{"=": {"server_group": "stack_id"}}' params: stack_id: {get_param: "OS::stack_id"} outputs: mongo_stack_id: description: UUID of the cluster nested stack value: {get_resource: mongocluster} scale_up_url: description: > This URL is the webhook to scale up the autoscaling group. You can invoke the scale-up operation by doing an HTTP POST to this URL; no body nor extra headers are needed. value: {get_attr: [mongodb_scaleup_policy, alarm_url]} scale_dn_url: description: > This URL is the webhook to scale down the autoscaling group. You can invoke the scale-down operation by doing an HTTP POST to this URL; no body nor extra headers are needed. value: {get_attr: [mongodb_scaledown_policy, alarm_url]} ceilometer_query: value: str_replace: template: > ceilometer statistics -m cpu_util -q metadata.user_metadata.stack=stackval -p 60 -a avg params: stackval: { get_param: "OS::stack_id" } description: > This is a Ceilometer query for statistics on the cpu_util meter Samples about OS::Nova::Server instances in this stack. The -q parameter selects Samples according to the subject's metadata. When a VM's metadata includes an item of the form metering.X=Y, the corresponding Ceilometer resource has a metadata item of the form user_metadata.X=Y and samples about resources so tagged can be queried with a Ceilometer query term of the form metadata.user_metadata.X=Y. In this case the nested stacks give their VMs metadata that is passed as a nested stack parameter, and this stack passes a metadata of the form metering.stack=Y, where Y is this stack's ID. mongocluster.yaml heat_template_version: ocata description: > MongoDB cluster node metadata: type: json root_stack_id: type: string default: "" conditions: is_standalone: {equals: [{get_param: root_stack_id}, ""]} resources: mongodbserver: type: OS::Nova::Server properties: name: { str_replace: { params: { random_string: { get_resource: random_str }, __zone__: { get_param: zone } }, template: mongodb-random_string.__zone__ } } image: { get_param: image } flavor: { get_param: flavor } metadata: {get_param: metadata} key_name: { get_param: key_name } networks: - port: { get_resource: om_port } user_data_format: SOFTWARE_CONFIG user_data: { get_resource: server_clu_init } alarm_queue: type: OS::Zaqar::Queue error_event_alarm: type: OS::Aodh::EventAlarm properties: event_type: compute.instance.update query: - field: traits.instance_id value: {get_resource: mongodbserver} op: eq - field: traits.state value: error op: eq alarm_queues: - {get_resource: alarm_queue} deleted_event_alarm: type: OS::Aodh::EventAlarm properties: event_type: compute.instance.delete.start query: - field: traits.instance_id value: {get_resource: mongodbserver} op: eq alarm_queues: - {get_resource: alarm_queue} alarm_cache_wait: type: OS::Heat::TestResource properties: action_wait_secs: create: 60 update: 60 value: list_join: - '' - - {get_attr: [error_event_alarm, show]} - {get_attr: [deleted_event_alarm, show]} alarm_subscription: type: OS::Zaqar::MistralTrigger properties: queue_name: {get_resource: alarm_queue} workflow_id: {get_resource: autoheal} input: stack_id: {get_param: "OS::stack_id"} root_stack_id: if: - is_standalone - {get_param: "OS::stack_id"} - {get_param: "root_stack_id"} autoheal: type: OS::Mistral::Workflow properties: description: > Mark a server as unhealthy and commence a stack update to replace it. input: stack_id: root_stack_id: type: direct tasks: - name: resources_mark_unhealthy action: list_join: - ' ' - - heat.resources_mark_unhealthy - stack_id=<% $.stack_id %> - resource_name=<% env().notification.body.reason_data.event.traits.where($[0] = 'instance_id').select($[2]).first() %> - mark_unhealthy=true - resource_status_reason='Marked by alarm' on_success: - stacks_update - name: stacks_update action: heat.stacks_update stack_id=<% $.root_stack_id %> existing=true outputs: private_mgmt_ip: description: IP address in private management network value: { get_attr: [ be_om_port, fixed_ips, 0, ip_address ] } internal_ip: description: IP address in private rt network value: { get_attr: [ be_rt_port, fixed_ips, 0, ip_address ] } OS::stack_id: description: The server UUID value: {get_resource: mongodbserver} condition: {not: is_standalone} Best Regards On Wed, Aug 16, 2017 at 1:44 PM, Krzysztof Świątek < krzysztof.swia...@corp.ovh.com> wrote: > Hi, > > i have a question about alarms in openstack. > > I want autoscaling with heat, and I'm looking for metric/alarm project > which I can use with heat. > I found that I can use Monasca or Ceilometer (with Aodh). > My question is: > Is any of you using heat (autoscaling) in production? > If yes what are you using (Monasca, Ceilometer, other) for metric and > alarms, and why? > > -- > Pozdrawiam, > Krzysztof Świątek > > _______________________________________________ > OpenStack-operators mailing list > OpenStack-operators@lists.openstack.org > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators >
_______________________________________________ OpenStack-operators mailing list OpenStack-operators@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators