| {%- 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 %} |