blob: 1fc60ffd88bae1c31d722dd8be8e4d051b3b87f2 [file] [log] [blame]
{%- from "neutron/map.jinja" import server with context %}
{%- if server.get('backend', {}).engine is defined and server.backend.engine == "ml2" %}
{% set neutron_agents = ('l3', 'dhcp', 'metadata', 'openvswitch') %}
{%- else %}
{% set neutron_agents = () %}
{%- endif %}
{% set ovs_support = pillar.neutron.get('compute', {}).get('enabled', False) or pillar.neutron.get('gateway', {}).get('enabled', False) %}
log_collector:
decoder:
neutron:
engine: sandbox
module_file: /usr/share/lma_collector/decoders/openstack_log.lua
module_dir: /usr/share/lma_collector/common;/usr/share/heka/lua_modules
adjust_timezone: true
{%- if ovs_support %}
ovs:
engine: sandbox
module_file: /usr/share/lma_collector/decoders/ovs_log.lua
module_dir: /usr/share/lma_collector/common;/usr/share/heka/lua_modules
{%- endif %}
splitter:
neutron:
engine: token
delimiter: '\n'
input:
neutron_log:
engine: logstreamer
log_directory: "/var/log"
# Depending on the package version, the Neutron server logs are either at
# /var/log/neutron/neutron-server.log or /var/log/neutron/server.log and
# the following regexp will deal with both situations.
file_match: 'neutron/(neutron-)?(?P<Service>(dhcp-agent|l3-agent|metadata-agent|neutron-netns-cleanup|openvswitch-agent|neutron-lbaas-agent|server))\.log\.?(?P<Seq>\d*)$'
differentiator: ['neutron', '_', 'Service']
priority: ["^Seq"]
decoder: "neutron_decoder"
splitter: "neutron_splitter"
{%- if ovs_support %}
ovs_log:
engine: logstreamer
log_directory: "/var/log/openvswitch"
file_match: '(?P<Service>ovs\-vswitchd|ovsdb\-server|ovs\-ctl)\.log$'
differentiator: ['Service']
priority: ["^Seq"]
decoder: "ovs_decoder"
splitter: "TokenSplitter"
{%- endif %}
metric_collector:
trigger:
neutron_logs_error:
description: 'Too many errors have been detected in Neutron logs'
severity: warning
no_data_policy: okay
rules:
- metric: log_messages
field:
service: neutron
level: error
relational_operator: '>'
threshold: 0.1
window: 70
periods: 0
function: max
{%- if pillar.neutron.server is defined %}
neutron_api_local_endpoint:
description: 'Neutron API is locally down'
severity: down
rules:
- metric: openstack_check_local_api
field:
service: neutron-api
relational_operator: '=='
threshold: 0
window: 60
periods: 0
function: last
{%- endif %}
alarm:
{%- if pillar.neutron.server is defined %}
neutron_logs_control:
alerting: enabled
triggers:
- neutron_logs_error
dimension:
service: neutron-logs-control
neutron_api_endpoint:
alerting: enabled
triggers:
- neutron_api_local_endpoint
dimension:
service: neutron-api-endpoint
{%- else %}
neutron_logs_data:
alerting: enabled
triggers:
- neutron_logs_error
dimension:
service: neutron-logs-data
{%- endif %}
{%- if pillar.neutron.server is defined %}
remote_collector:
trigger:
neutron_api_check_failed:
description: 'Endpoint check for neutron-api is failed'
severity: down
rules:
- metric: openstack_check_api
field:
service: neutron-api
relational_operator: '=='
threshold: 0
window: 60
periods: 0
function: last
{%- for agent in neutron_agents %}
neutron_{{ agent }}_two_up:
description: 'Some Neutron {{ agent }} agents are down'
severity: warning
logical_operator: and
rules:
- metric: openstack_neutron_agents
field:
service: {{ agent }}
state: up
relational_operator: '>='
threshold: 2
window: 60
periods: 0
function: last
- metric: openstack_neutron_agents
field:
service: {{ agent }}
state: down
relational_operator: '>'
threshold: 0
window: 60
periods: 0
function: last
neutron_{{ agent }}_one_up:
description: 'Only one Neutron {{ agent }} agent is up'
severity: critical
logical_operator: and
rules:
- metric: openstack_neutron_agents
field:
service: {{ agent }}
state: up
relational_operator: '=='
threshold: 1
window: 60
periods: 0
function: last
- metric: openstack_neutron_agents_percent
field:
service: {{ agent }}
state: up
relational_operator: '<'
threshold: 100
window: 60
periods: 0
function: last
neutron_{{ agent }}_zero_up:
description: 'All Neutron {{ agent }} agents are down or disabled'
severity: down
rules:
- metric: openstack_neutron_agents
field:
service: {{ agent }}
state: up
relational_operator: '=='
threshold: 0
window: 60
periods: 0
function: last
{%- endfor %}
alarm:
neutron_api_check:
triggers:
- neutron_api_check_failed
dimension:
service: neutron-api-check
{%- for agent in neutron_agents %}
neutron_{{ agent }}:
alerting: enabled
triggers:
- neutron_{{ agent }}_zero_up
- neutron_{{ agent }}_one_up
- neutron_{{ agent }}_two_up
dimension:
service: neutron-{{ agent }}
{%- endfor %}
{%- endif %}
aggregator:
alarm_cluster:
{%- if pillar.neutron.server is defined %}
neutron_logs_control:
policy: status_of_members
alerting: enabled
group_by: hostname
match:
service: neutron-logs-control
members:
- neutron_logs_control
dimension:
service: neutron-control
nagios_host: 01-service-clusters
neutron_api_endpoint:
policy: availability_of_members
alerting: enabled
group_by: hostname
match:
service: neutron-api-endpoint
members:
- neutron_api_endpoint
dimension:
service: neutron-control
nagios_host: 01-service-clusters
neutron_api_check:
policy: highest_severity
alerting: enabled
match:
service: neutron-api-check
members:
- neutron_api_check
dimension:
service: neutron-control
nagios_host: 01-service-clusters
neutron_control:
policy: highest_severity
alerting: enabled_with_notification
match:
service: neutron-control
members:
- neutron_logs_control
- neutron_api_endpoint
- neutron_api_check
dimension:
cluster_name: neutron-control
nagios_host: 00-top-clusters
{%- for agent in neutron_agents %}
neutron_{{ agent }}:
policy: highest_severity
alerting: enabled
match:
service: neutron-{{ agent }}
members:
- neutron_{{ agent }}
dimension:
service: neutron-data
nagios_host: 01-service-clusters
{%- endfor %}
{%- if neutron_agents|length > 0 %}
neutron_data:
policy: highest_severity
alerting: enabled_with_notification
match:
service: neutron-data
members:
- neutron_logs_data
{%- for agent in neutron_agents %}
- neutron_{{ agent }}
{%- endfor %}
dimension:
cluster_name: neutron-data
nagios_host: 00-top-clusters
{%- endif %}
{%- else %}
neutron_logs_data:
policy: status_of_members
alerting: enabled
group_by: hostname
match:
service: neutron-logs-data
members:
- neutron_logs_data
dimension:
service: neutron-data
nagios_host: 01-service-clusters
{%- endif %}