| {%- from "haproxy/map.jinja" import proxy with context %} |
| {%- if proxy.enabled and proxy.listen is defined and proxy.listen|length > 0 %} |
| |
| metric_collector: |
| trigger: |
| haproxy_check: |
| description: 'HAProxy cannot be checked' |
| severity: down |
| rules: |
| - metric: haproxy_check |
| relational_operator: '==' |
| threshold: 0 |
| window: 60 |
| periods: 0 |
| function: last |
| {%- for listen_name, listen in proxy.listen.iteritems() if listen.get('check', True) %} |
| haproxy_{{ listen_name }}_backends_all_down: |
| description: 'All API backends are down for {{ listen_name }}' |
| severity: down |
| rules: |
| - metric: haproxy_backend_servers |
| field: |
| backend: {{ listen_name }} |
| state: up |
| relational_operator: '==' |
| threshold: 0 |
| window: 60 |
| periods: 0 |
| function: last |
| haproxy_{{ listen_name }}_backends_majority_down: |
| description: 'Less than 50% of backends are up for {{ listen_name }}' |
| severity: critical |
| rules: |
| - metric: haproxy_backend_servers_percent |
| field: |
| backend: {{ listen_name }} |
| state: up |
| relational_operator: '<=' |
| threshold: 50 |
| window: 60 |
| periods: 0 |
| function: last |
| haproxy_{{ listen_name }}_backends_one_down: |
| description: 'At least one API backend is down for {{ listen_name }}' |
| severity: warning |
| rules: |
| - metric: haproxy_backend_servers |
| field: |
| backend: {{ listen_name }} |
| state: down |
| relational_operator: '>' |
| threshold: 0 |
| window: 60 |
| periods: 0 |
| function: last |
| {%- if listen.get('type', None) == 'openstack-service' %} |
| haproxy_{{ listen_name }}_http_errors: |
| description: 'Too many 5xx HTTP errors have been detected on {{ listen_name }}' |
| severity: warning |
| rules: |
| - metric: haproxy_backend_response_5xx |
| field: |
| backend: {{ listen_name }} |
| relational_operator: '>' |
| threshold: 0 |
| window: 60 |
| periods: 1 |
| function: diff |
| {%- endif %} |
| {%- endfor %} |
| alarm: |
| haproxy_check: |
| alerting: enabled |
| triggers: |
| - haproxy_check |
| dimension: |
| service: haproxy |
| {%- for listen_name, listen in proxy.listen.iteritems() if listen.get('check', True) %} |
| haproxy_{{ listen_name }}_backends: |
| alerting: enabled |
| triggers: |
| - haproxy_{{ listen_name }}_backends_all_down |
| - haproxy_{{ listen_name }}_backends_majority_down |
| - haproxy_{{ listen_name }}_backends_one_down |
| dimension: |
| backend: {{ listen_name }} |
| {%- if listen.get('type', None) == 'openstack-service' %} |
| {{ listen_name }}_http_errors: |
| triggers: |
| - haproxy_{{ listen_name }}_http_errors |
| dimension: |
| backend: {{ listen_name }} |
| {%- endif %} |
| {%- endfor %} |
| aggregator: |
| alarm_cluster: |
| haproxy_check: |
| policy: majority_of_members |
| alerting: enabled_with_notification |
| match: |
| service: haproxy |
| group_by: hostname |
| members: |
| - haproxy_check |
| dimension: |
| cluster_name: haproxy-openstack |
| nagios_host: 00-top-clusters |
| {%- for listen_name, listen in proxy.listen.iteritems() if listen.get('check', True) %} |
| haproxy_{{ listen_name }}: |
| policy: highest_severity |
| alerting: enabled |
| match: |
| backend: {{ listen_name }} |
| members: |
| - haproxy_{{ listen_name }}_backends |
| {%- if listen.get('type', None) == 'openstack-service' %} |
| - haproxy_{{ listen_name }}_http_errors |
| {%- endif %} |
| dimension: |
| service: {{ listen.service_name|default(listen_name) }} |
| nagios_host: 01-service-clusters |
| {%- endfor %} |
| |
| {%- endif %} |