From 10e4b9ac860151a02ec4deb2810347bb66679710 Mon Sep 17 00:00:00 2001 From: Stone Date: Thu, 29 Oct 2020 11:46:58 -0400 Subject: [PATCH] Fault Management guide Removed OSX and MS Visual Code metadata files and directories. Change-Id: I4e6024767cc072fcb3fc8d88f0724f02819cebc8 Signed-off-by: Stone --- .../_includes/data-networks-overview.rest | 1 + .../openstack-alarm-messages-xxxs.rest | 36 ++ .../openstack-customer-log-messages-xxxs | 13 + .../openstack-customer-log-messages-xxxs.rest | 15 + .../troubleshooting-log-collection.rest | 1 + .../_includes/x00-series-alarm-messages.rest | 33 ++ .../fault/100-series-alarm-messages.rst | 336 ++++++++++++ .../fault/200-series-alarm-messages.rst | 402 +++++++++++++++ ...ries-maintenance-customer-log-messages.rst | 120 +++++ .../fault/300-series-alarm-messages.rst | 53 ++ .../fault/400-series-alarm-messages.rst | 69 +++ .../400-series-customer-log-messages.rst | 81 +++ .../fault/500-series-alarm-messages.rst | 49 ++ .../fault/750-series-alarm-messages.rst | 118 +++++ .../fault/800-series-alarm-messages.rst | 152 ++++++ .../fault/900-series-alarm-messages.rst | 260 ++++++++++ ...es-orchestration-customer-log-messages.rst | 168 ++++++ ...an-snmp-community-string-using-the-cli.rst | 111 ++++ .../fault/cli-commands-and-paged-output.rst | 61 +++ .../configuring-snmp-trap-destinations.rst | 89 ++++ .../fault/deleting-an-alarm-using-the-cli.rst | 34 ++ doc/source/fault/enabling-snmp-support.rst | 26 + .../fault/events-suppression-overview.rst | 33 ++ .../fault/fault-management-overview.rst | 69 +++ doc/source/fault/figures/nlc1463584178366.png | Bin 0 -> 18665 bytes doc/source/fault/figures/psa1567524091300.png | Bin 0 -> 84703 bytes doc/source/fault/figures/uty1463514747661.png | Bin 0 -> 36997 bytes doc/source/fault/figures/xyj1558447807645.png | Bin 0 -> 3789 bytes doc/source/fault/index.rs1 | 71 +++ doc/source/fault/index.rst | 161 ++++++ .../fault/openstack-alarm-messages-300s.rst | 135 +++++ .../fault/openstack-alarm-messages-400s.rst | 55 ++ .../fault/openstack-alarm-messages-700s.rst | 275 ++++++++++ .../fault/openstack-alarm-messages-800s.rst | 98 ++++ ...mer-log-messages-270s-virtual-machines.rst | 38 ++ ...ck-customer-log-messages-401s-services.rst | 45 ++ ...mer-log-messages-700s-virtual-machines.rst | 480 ++++++++++++++++++ .../openstack-fault-management-overview.rst | 19 + .../setting-snmp-identifying-information.rst | 30 ++ doc/source/fault/snmp-event-table.rst | 44 ++ doc/source/fault/snmp-overview.rst | 136 +++++ .../suppressing-an-alarm-using-the-cli.rst | 47 ++ .../suppressing-and-unsuppressing-events.rst | 37 ++ doc/source/fault/the-global-alarm-banner.rst | 25 + doc/source/fault/traps.rst | 63 +++ .../fault/troubleshooting-log-collection.rst | 99 ++++ .../unsuppressing-an-alarm-using-the-cli.rst | 41 ++ .../viewing-active-alarms-using-horizon.rst | 47 ++ .../viewing-active-alarms-using-the-cli.rst | 192 +++++++ .../viewing-alarm-details-using-the-cli.rst | 56 ++ ...iewing-suppressed-alarms-using-the-cli.rst | 49 ++ .../viewing-the-event-log-using-horizon.rst | 55 ++ .../viewing-the-event-log-using-the-cli.rst | 183 +++++++ doc/source/index.rst | 24 +- 54 files changed, 4825 insertions(+), 10 deletions(-) create mode 100644 doc/source/_includes/data-networks-overview.rest create mode 100644 doc/source/_includes/openstack-alarm-messages-xxxs.rest create mode 100644 doc/source/_includes/openstack-customer-log-messages-xxxs create mode 100644 doc/source/_includes/openstack-customer-log-messages-xxxs.rest create mode 100644 doc/source/_includes/troubleshooting-log-collection.rest create mode 100644 doc/source/_includes/x00-series-alarm-messages.rest create mode 100644 doc/source/fault/100-series-alarm-messages.rst create mode 100644 doc/source/fault/200-series-alarm-messages.rst create mode 100644 doc/source/fault/200-series-maintenance-customer-log-messages.rst create mode 100644 doc/source/fault/300-series-alarm-messages.rst create mode 100644 doc/source/fault/400-series-alarm-messages.rst create mode 100644 doc/source/fault/400-series-customer-log-messages.rst create mode 100644 doc/source/fault/500-series-alarm-messages.rst create mode 100644 doc/source/fault/750-series-alarm-messages.rst create mode 100644 doc/source/fault/800-series-alarm-messages.rst create mode 100644 doc/source/fault/900-series-alarm-messages.rst create mode 100644 doc/source/fault/900-series-orchestration-customer-log-messages.rst create mode 100644 doc/source/fault/adding-an-snmp-community-string-using-the-cli.rst create mode 100644 doc/source/fault/cli-commands-and-paged-output.rst create mode 100644 doc/source/fault/configuring-snmp-trap-destinations.rst create mode 100644 doc/source/fault/deleting-an-alarm-using-the-cli.rst create mode 100644 doc/source/fault/enabling-snmp-support.rst create mode 100644 doc/source/fault/events-suppression-overview.rst create mode 100644 doc/source/fault/fault-management-overview.rst create mode 100644 doc/source/fault/figures/nlc1463584178366.png create mode 100644 doc/source/fault/figures/psa1567524091300.png create mode 100644 doc/source/fault/figures/uty1463514747661.png create mode 100644 doc/source/fault/figures/xyj1558447807645.png create mode 100644 doc/source/fault/index.rs1 create mode 100644 doc/source/fault/index.rst create mode 100644 doc/source/fault/openstack-alarm-messages-300s.rst create mode 100644 doc/source/fault/openstack-alarm-messages-400s.rst create mode 100644 doc/source/fault/openstack-alarm-messages-700s.rst create mode 100644 doc/source/fault/openstack-alarm-messages-800s.rst create mode 100644 doc/source/fault/openstack-customer-log-messages-270s-virtual-machines.rst create mode 100644 doc/source/fault/openstack-customer-log-messages-401s-services.rst create mode 100644 doc/source/fault/openstack-customer-log-messages-700s-virtual-machines.rst create mode 100644 doc/source/fault/openstack-fault-management-overview.rst create mode 100644 doc/source/fault/setting-snmp-identifying-information.rst create mode 100644 doc/source/fault/snmp-event-table.rst create mode 100644 doc/source/fault/snmp-overview.rst create mode 100644 doc/source/fault/suppressing-an-alarm-using-the-cli.rst create mode 100644 doc/source/fault/suppressing-and-unsuppressing-events.rst create mode 100644 doc/source/fault/the-global-alarm-banner.rst create mode 100644 doc/source/fault/traps.rst create mode 100644 doc/source/fault/troubleshooting-log-collection.rst create mode 100644 doc/source/fault/unsuppressing-an-alarm-using-the-cli.rst create mode 100644 doc/source/fault/viewing-active-alarms-using-horizon.rst create mode 100644 doc/source/fault/viewing-active-alarms-using-the-cli.rst create mode 100644 doc/source/fault/viewing-alarm-details-using-the-cli.rst create mode 100644 doc/source/fault/viewing-suppressed-alarms-using-the-cli.rst create mode 100644 doc/source/fault/viewing-the-event-log-using-horizon.rst create mode 100644 doc/source/fault/viewing-the-event-log-using-the-cli.rst diff --git a/doc/source/_includes/data-networks-overview.rest b/doc/source/_includes/data-networks-overview.rest new file mode 100644 index 000000000..0c828b361 --- /dev/null +++ b/doc/source/_includes/data-networks-overview.rest @@ -0,0 +1 @@ +.. This file must exist to satisfy build requirements. \ No newline at end of file diff --git a/doc/source/_includes/openstack-alarm-messages-xxxs.rest b/doc/source/_includes/openstack-alarm-messages-xxxs.rest new file mode 100644 index 000000000..82e640ffc --- /dev/null +++ b/doc/source/_includes/openstack-alarm-messages-xxxs.rest @@ -0,0 +1,36 @@ +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the overall +health of the system. + +For more information, see :ref:`Overview `. + +In the following tables, the severity of the alarms is represented by one or +more letters, as follows: + +.. _alarm-messages-300s-ul-jsd-jkg-vp: + +- C: Critical + +- M: Major + +- m: Minor + +- W: Warning + +A slash-separated list of letters is used when the alarm can be triggered with +one of several severity levels. + +An asterisk \(\*\) indicates the management-affecting severity, if any. A +management-affecting alarm is one that cannot be ignored at the indicated +severity level or higher by using relaxed alarm rules during an orchestrated +patch or upgrade operation. + + +Differences exist between the terminology emitted by some alarms and that +used in the CLI, GUI, and elsewhere in the documentations: + +- References to provider networks in alarms refer to data networks. + +- References to data networks in alarms refer to physical networks. + +- References to tenant networks in alarms refer to project networks. \ No newline at end of file diff --git a/doc/source/_includes/openstack-customer-log-messages-xxxs b/doc/source/_includes/openstack-customer-log-messages-xxxs new file mode 100644 index 000000000..cdf117757 --- /dev/null +++ b/doc/source/_includes/openstack-customer-log-messages-xxxs @@ -0,0 +1,13 @@ +The Customer Logs include events that do not require immediate user action. + +The following types of events are included in the Customer Logs. The severity of the events is represented in the table by one or more letters, as follows: + +- C: Critical + +- M: Major + +- m: Minor + +- W: Warning + +- NA: Not applicable \ No newline at end of file diff --git a/doc/source/_includes/openstack-customer-log-messages-xxxs.rest b/doc/source/_includes/openstack-customer-log-messages-xxxs.rest new file mode 100644 index 000000000..dd1cd9cb7 --- /dev/null +++ b/doc/source/_includes/openstack-customer-log-messages-xxxs.rest @@ -0,0 +1,15 @@ +The Customer Logs include events that do not require immediate user action. + +The following types of events are included in the Customer Logs. The severity of the events is represented in the table by one or more letters, as follows: + +.. _customer-log-messages-401s-services-ul-jsd-jkg-vp: + +- C: Critical + +- M: Major + +- m: Minor + +- W: Warning + +- NA: Not applicable \ No newline at end of file diff --git a/doc/source/_includes/troubleshooting-log-collection.rest b/doc/source/_includes/troubleshooting-log-collection.rest new file mode 100644 index 000000000..0c828b361 --- /dev/null +++ b/doc/source/_includes/troubleshooting-log-collection.rest @@ -0,0 +1 @@ +.. This file must exist to satisfy build requirements. \ No newline at end of file diff --git a/doc/source/_includes/x00-series-alarm-messages.rest b/doc/source/_includes/x00-series-alarm-messages.rest new file mode 100644 index 000000000..c8a9374df --- /dev/null +++ b/doc/source/_includes/x00-series-alarm-messages.rest @@ -0,0 +1,33 @@ + +.. rsg1586183719424 +.. _alarm-messages-overview: + +Alarm messages are numerically coded by the type of alarm. + +For more information, see +:ref:`Fault Management Overview `. + +In the alarm description tables, the severity of the alarms is represented by +one or more letters, as follows: + +.. _alarm-messages-overview-ul-jsd-jkg-vp: + +- C: Critical + +- M: Major + +- m: Minor + +- W: Warning + +A slash-separated list of letters is used when the alarm can be triggered with +one of several severity levels. + +An asterisk \(\*\) indicates the management-affecting severity, if any. A +management-affecting alarm is one that cannot be ignored at the indicated +severity level or higher by using relaxed alarm rules during an orchestrated +patch or upgrade operation. + +.. note:: + **Degrade Affecting Severity: Critical** indicates a node will be + degraded if the alarm reaches a Critical level. \ No newline at end of file diff --git a/doc/source/fault/100-series-alarm-messages.rst b/doc/source/fault/100-series-alarm-messages.rst new file mode 100644 index 000000000..596d2bdd9 --- /dev/null +++ b/doc/source/fault/100-series-alarm-messages.rst @@ -0,0 +1,336 @@ + +.. jsy1579701868527 +.. _100-series-alarm-messages: + +========================= +100 Series Alarm Messages +========================= + +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the overall +health of the system. + +.. include:: ../_includes/x00-series-alarm-messages.rest + +.. _100-series-alarm-messages-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.101** + - Platform CPU threshold exceeded; threshold x%, actual y%. + CRITICAL @ 95% + + MAJOR @ 90% + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - Critical + * - Severity: + - C/M\* + * - Proposed Repair Action + - Monitor and if condition persists, contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.103** + - Memory threshold exceeded; threshold x%, actual y% . + + CRITICAL @ 90% + + MAJOR @ 80% + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - Critical + * - Severity: + - C/M + * - Proposed Repair Action + - Monitor and if condition persists, contact next level of support; may + require additional memory on Host. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.104** + - File System threshold exceeded; threshold x%, actual y% + + CRITICAL @ 90% + + MAJOR @ 80% + * - Entity Instance + - host=.filesystem= + * - Degrade Affecting Severity: + - Critical + * - Severity: + - C\*/M + * - Proposed Repair Action + - Monitor and if condition persists, consider adding additional physical + volumes to the volume group. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.105** + - filesystem is not added on both controllers and/or does not + have the same size: . + * - Entity Instance + - fs\_name= + * - Degrade Affecting Severity: + - None + * - Severity: + - C/M\* + * - Proposed Repair Action + - Add image-conversion filesystem on both controllers. + + Consult the System Administration Manual for more details. + + If problem persists, contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.106** + - 'OAM' Port failed. + * - Entity Instance + - host=.port= + * - Degrade Affecting Severity: + - Major + * - Severity: + - M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.107** + - 'OAM' Interface degraded. + + or + + 'OAM' Interface failed. + * - Entity Instance + - host=.interface= + * - Degrade Affecting Severity: + - Major + * - Severity: + - C or M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.108** + - 'MGMT' Port failed. + * - Entity Instance + - host=.port= + * - Degrade Affecting Severity: + - Major + * - Severity: + - M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.109** + - 'OAM' Interface degraded. + + or + + 'OAM' Interface failed. + * - Entity Instance + - host=.interface= + * - Degrade Affecting Severity: + - Major + * - Severity: + - C or M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.110** + - 'CLUSTER-HOST' Port failed. + * - Entity Instance + - host=.port= + * - Degrade Affecting Severity: + - Major + * - Severity: + - C or M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.111** + - 'CLUSTER-HOST' Interface degraded. + + OR + + 'CLUSTER-HOST' Interface failed. + * - Entity Instance + - host=.interface= + * - Degrade Affecting Severity: + - Major + * - Severity: + - C or M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.112** + - 'DATA-VRS' Port down. + * - Entity Instance + - host=.port= + * - Degrade Affecting Severity: + - Major + * - Severity: + - M + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.113** + - 'DATA-VRS' Interface degraded. + + or + + 'DATA-VRS' Interface down. + * - Entity Instance + - host=.interface= + * - Degrade Affecting Severity: + - Major + * - Severity: + - C or M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.114** + - NTP configuration does not contain any valid or reachable NTP servers. + The alarm is raised regardless of NTP enabled/disabled status. + + NTP address is not a valid or a reachable NTP server. + + Connectivity to external PTP Clock Synchronization is lost. + * - Entity Instance + - host=.ntp + + host=.ntp= + * - Degrade Affecting Severity: + - None + * - Severity: + - M or m + * - Proposed Repair Action + - Monitor and if condition persists, contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.118** + - Controller cannot establish connection with remote logging server. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - m + * - Proposed Repair Action + - Ensure Remote Log Server IP is reachable from Controller through OAM + interface; otherwise contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 100.119** + - Major: PTP configuration or out-of-tolerance time-stamping conditions. + + Minor: PTP out-of-tolerance time-stamping condition. + * - Entity Instance + - host=.ptp OR host=.ptp=no-lock + + OR + + host=.ptp=.unsupported=hardware-timestamping + + OR + + host=.ptp=.unsupported=software-timestamping + + OR + + host=.ptp=.unsupported=legacy-timestamping + + OR + + host=.ptp=out-of-tolerance + * - Degrade Affecting Severity: + - None + * - Severity: + - M or m + * - Proposed Repair Action + - Monitor and, if condition persists, contact next level of support. \ No newline at end of file diff --git a/doc/source/fault/200-series-alarm-messages.rst b/doc/source/fault/200-series-alarm-messages.rst new file mode 100644 index 000000000..a49c3691e --- /dev/null +++ b/doc/source/fault/200-series-alarm-messages.rst @@ -0,0 +1,402 @@ + +.. uof1579701912856 +.. _200-series-alarm-messages: + +========================= +200 Series Alarm Messages +========================= + +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the overall +health of the system. + +.. include:: ../_includes/x00-series-alarm-messages.rest + +.. _200-series-alarm-messages-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.001** + - was administratively locked to take it out-of-service. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - W\* + * - Proposed Repair Action + - Administratively unlock Host to bring it back in-service. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.004** + - experienced a service-affecting failure. + + Host is being auto recovered by Reboot. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - C\* + * - Proposed Repair Action + - If auto-recovery is consistently unable to recover host to the + unlocked-enabled state contact next level of support or lock and replace + failing host. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.005** + - Degrade: + + is experiencing an intermittent 'Management Network' + communication failures that have exceeded its lower alarming threshold. + + Failure: + + is experiencing a persistent Critical 'Management Network' + communication failure. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* (Degrade) or C\* (Failure) + * - Proposed Repair Action + - Check 'Management Network' connectivity and support for multicast + messaging. If problem consistently occurs after that and Host is reset, + then contact next level of support or lock and replace failing host. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.006** + - Main Process Monitor Daemon Failure \(Major\) + + 'Process Monitor' \(pmond\) process is not running or + functioning properly. The system is trying to recover this process. + + Monitored Process Failure \(Critical/Major/Minor\) + + Critical: Critical '' process has failed and + could not be auto-recovered gracefully. Auto-recovery progression by + host reboot is required and in progress. + + Major: is degraded due to the failure of its '' + process. Auto recovery of this Major process is in progress. + + Minor: + + '' process has failed. Auto recovery of this + Minor process is in progress. + + '' process has failed. Manual recovery is required. + + tp4l/phc2sys process failure. Manual recovery is required. + * - Entity Instance + - host=.process= + * - Degrade Affecting Severity: + - Major + * - Severity: + - C/M/m\* + * - Proposed Repair Action + - If this alarm does not automatically clear after some time and continues + to be asserted after Host is locked and unlocked then contact next level + of support for root cause analysis and recovery. + + If problem consistently occurs after Host is locked and unlocked then + contact next level of support for root cause analysis and recovery. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.007** + - Critical: \(with host degrade\): + + Host is degraded due to a 'Critical' out-of-tolerance reading from the + '' sensor + + Major: \(with host degrade\) + + Host is degraded due to a 'Major' out-of-tolerance reading from the + '' sensor + + Minor: + + Host is reporting a 'Minor' out-of-tolerance reading from the + '' sensor + * - Entity Instance + - host=.sensor= + * - Degrade Affecting Severity: + - Critical + * - Severity: + - C/M/m + * - Proposed Repair Action + - If problem consistently occurs after Host is power cycled and or reset, + contact next level of support or lock and replace failing host. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.009** + - Degrade: + + is experiencing an intermittent 'Cluster-host Network' + communication failures that have exceeded its lower alarming threshold. + + Failure: + + is experiencing a persistent Critical 'Cluster-host Network' + communication failure. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* (Degrade) or C\* (Critical) + * - Proposed Repair Action + - Check 'Cluster-host Network' connectivity and support for multicast + messaging. If problem consistently occurs after that and Host is reset, + then contact next level of support or lock and replace failing host. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.010** + - access to board management module has failed. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - W + * - Proposed Repair Action + - Check Host's board management configuration and connectivity. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.011** + - experienced a configuration failure during initialization. + Host is being re-configured by Reboot. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - C\* + * - Proposed Repair Action + - If auto-recovery is consistently unable to recover host to the + unlocked-enabled state contact next level of support or lock and + replace failing host. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.012** + - controller function has in-service failure while compute + services remain healthy. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - Major + * - Severity: + - C\* + * - Proposed Repair Action + - Lock and then Unlock host to recover. Avoid using 'Force Lock' action + as that will impact compute services running on this host. If lock action + fails then contact next level of support to investigate and recover. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.013** + - compute service of the only available controller is not + operational. Auto-recovery is disabled. Degrading host instead. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - Major + * - Severity: + - M\* + * - Proposed Repair Action + - Enable second controller and Switch Activity \(Swact\) over to it as + soon as possible. Then Lock and Unlock host to recover its local compute + service. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.014** + - The Hardware Monitor was unable to load, configure and monitor one + or more hardware sensors. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - m + * - Proposed Repair Action + - Check Board Management Controller provisioning. Try reprovisioning the + BMC. If problem persists try power cycling the host and then the entire + server including the BMC power. If problem persists then contact next + level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 200.015** + - Unable to read one or more sensor groups from this host's board + management controller. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M + * - Proposed Repair Action + - Check board management connectivity and try rebooting the board + management controller. If problem persists contact next level of + support or lock and replace failing host. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 210.001** + - System Backup in progress. + * - Entity Instance + - host=controller + * - Degrade Affecting Severity: + - None + * - Severity: + - m\* + * - Proposed Repair Action + - No action required. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 250.001** + - Configuration is out-of-date. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Administratively lock and unlock to update config. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 250.003** + - Kubernetes certificates rotation failed on host . + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M/w + * - Proposed Repair Action + - Rotate kubernetes certificates manually. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 270.001** + - Host compute services failure\[, reason = \] + * - Entity Instance + - host=.services=compute + * - Degrade Affecting Severity: + - None + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for host services recovery to complete; if problem persists contact + next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 280.001** + - is offline. + * - Entity Instance + - subcloud= + * - Degrade Affecting Severity: + - None + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for subcloud to become online; if problem persists contact next + level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 280.001** + - sync status is out-of-sync. + * - Entity Instance + - \[subcloud=.resource= \| \| + \| \] + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - If problem persists contact next level of support. \ No newline at end of file diff --git a/doc/source/fault/200-series-maintenance-customer-log-messages.rst b/doc/source/fault/200-series-maintenance-customer-log-messages.rst new file mode 100644 index 000000000..c0e3dfee4 --- /dev/null +++ b/doc/source/fault/200-series-maintenance-customer-log-messages.rst @@ -0,0 +1,120 @@ + +.. lzz1579291773073 +.. _200-series-maintenance-customer-log-messages: + +============================================ +200 Series Maintenance Customer Log Messages +============================================ + +The Customer Logs include events that do not require immediate user action. + +The following types of events are included in the Customer Logs. The severity +of the events is represented in the table by one or more letters, as follows: + +.. _200-series-maintenance-customer-log-messages-ul-jsd-jkg-vp: + +- C: Critical + +- M: Major + +- m: Minor + +- W: Warning + +- NA: Not applicable + +.. _200-series-maintenance-customer-log-messages-table-zgf-jvw-v5: + + +.. table:: Table 1. Customer Log Messages + :widths: auto + + +-----------------+------------------------------------------------------------------+----------+ + | Log ID | Description | Severity | + + +------------------------------------------------------------------+----------+ + | | Entity Instance ID | | + +=================+==================================================================+==========+ + | 200.020 | has been 'discovered' on the network | NA | + | | | | + | | host=.event=discovered | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.020 | has been 'added' to the system | NA | + | | | | + | | host=.event=add | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.020 | has 'entered' multi-node failure avoidance | NA | + | | | | + | | host=.event=mnfa\_enter | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.020 | has 'exited' multi-node failure avoidance | NA | + | | | | + | | host=.event=mnfa\_exit | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | board management controller has been 'provisioned' | NA | + | | | | + | | host=.command=provision | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | board management controller has been 're-provisioned' | NA | + | | | | + | | host=.command=reprovision | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | board management controller has been 'de-provisioned' | NA | + | | | | + | | host=.command=deprovision | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'unlock' request | NA | + | | | | + | | host=.command=unlock | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'reboot' request | NA | + | | | | + | | host=.command=reboot | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'reset' request | NA | + | | | | + | | host=.command=reset | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'power-off' request | NA | + | | | | + | | host=.command=power-off | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'power-on' request | NA | + | | | | + | | host=.command=power-on | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'reinstall' request | NA | + | | | | + | | host=.command=reinstall | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'force-lock' request | NA | + | | | | + | | host=.command=force-lock | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'delete' request | NA | + | | | | + | | host=.command=delete | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.021 | manual 'controller switchover' request | NA | + | | | | + | | host=.command=swact | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.022 | is now 'disabled' | NA | + | | | | + | | host=.state=disabled | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.022 | is now 'enabled' | NA | + | | | | + | | host=.state=enabled | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.022 | is now 'online' | NA | + | | | | + | | host=.status=online | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.022 | is now 'offline' | NA | + | | | | + | | host=.status=offline | | + +-----------------+------------------------------------------------------------------+----------+ + | 200.022 | is 'disabled-failed' to the system | NA | + | | | | + | | host=.status=failed | | + +-----------------+------------------------------------------------------------------+----------+ \ No newline at end of file diff --git a/doc/source/fault/300-series-alarm-messages.rst b/doc/source/fault/300-series-alarm-messages.rst new file mode 100644 index 000000000..8229f628f --- /dev/null +++ b/doc/source/fault/300-series-alarm-messages.rst @@ -0,0 +1,53 @@ + +.. zwe1579701930425 +.. _300-series-alarm-messages: + +========================= +300 Series Alarm Messages +========================= + +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the +overall health of the system. + +.. include:: ../_includes/x00-series-alarm-messages.rest + +.. _300-series-alarm-messages-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.001** + - 'Data' Port failed. + * - Entity Instance + - host=.port= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.002** + - 'Data' Interface degraded. + + or + + 'Data' Interface failed. + * - Entity Instance + - host=.interface= + * - Degrade Affecting Severity: + - Critical + * - Severity: + - C/M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. \ No newline at end of file diff --git a/doc/source/fault/400-series-alarm-messages.rst b/doc/source/fault/400-series-alarm-messages.rst new file mode 100644 index 000000000..42533121f --- /dev/null +++ b/doc/source/fault/400-series-alarm-messages.rst @@ -0,0 +1,69 @@ + +.. ots1579702138430 +.. _400-series-alarm-messages: + +========================= +400 Series Alarm Messages +========================= + +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the overall +health of the system. + +.. include:: ../_includes/x00-series-alarm-messages.rest + +.. _400-series-alarm-messages-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 400.003** + - License key is not installed; a valid license key is required for + operation. + + or + + License key has expired or is invalid; a valid license key is required + for operation. + + or + + Evaluation license key will expire on ; there are days + remaining in this evaluation. + + or + + Evaluation license key will expire on ; there is only 1 day + remaining in this evaluation. + * - Entity Instance: + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - C\* + * - Proposed Repair Action + - Contact next level of support to obtain a new license key. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 400.003** + - Communication failure detected with peer over port . + + or + + Communication failure detected with peer over port + within the last 30 seconds. + * - Entity Instance: + - host=.network= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent + equipment. \ No newline at end of file diff --git a/doc/source/fault/400-series-customer-log-messages.rst b/doc/source/fault/400-series-customer-log-messages.rst new file mode 100644 index 000000000..3af6539d8 --- /dev/null +++ b/doc/source/fault/400-series-customer-log-messages.rst @@ -0,0 +1,81 @@ + +.. pgb1579292662158 +.. _400-series-customer-log-messages: + +================================ +400 Series Customer Log Messages +================================ + +The Customer Logs include events that do not require immediate user action. + +The following types of events are included in the Customer Logs. The severity +of the events is represented in the table by one or more letters, as follows: + +.. _400-series-customer-log-messages-ul-jsd-jkg-vp: + +- C: Critical + +- M: Major + +- m: Minor + +- W: Warning + +- NA: Not applicable + +.. _400-series-customer-log-messages-table-zgf-jvw-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 400.003** + - License key has expired or is invalid + + or + + Evaluation license key will expire on + + or + + License key is valid + * - Entity Instance + - host= + * - Severity: + - C + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 400.005** + - Communication failure detected with peer over port on host + + + or + + Communication failure detected with peer over port on host + within the last seconds + + or + + Communication established with peer over port on host + * - Entity Instance + - host=.network= + * - Severity: + - C + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 400.007** + - Swact or swact-force + * - Entity Instance + - host= + * - Severity: + - C \ No newline at end of file diff --git a/doc/source/fault/500-series-alarm-messages.rst b/doc/source/fault/500-series-alarm-messages.rst new file mode 100644 index 000000000..d4424bf6c --- /dev/null +++ b/doc/source/fault/500-series-alarm-messages.rst @@ -0,0 +1,49 @@ + +.. xpx1579702157578 +.. _500-series-alarm-messages: + +========================= +500 Series Alarm Messages +========================= + +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the overall +health of the system. + +.. include:: ../_includes/x00-series-alarm-messages.rest + +.. _500-series-alarm-messages-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 500.100** + - TPM initialization failed on host. + * - Entity Instance + - tenant= + * - Degrade Affecting Severity: + - None + * - Severity: + - M + * - Proposed Repair Action + - Reinstall HTTPS certificate; if problem persists contact next level of + support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 500.101** + - Developer patch certificate enabled. + * - Entity Instance + - host=controller + * - Degrade Affecting Severity: + - None + * - Severity: + - M + * - Proposed Repair Action + - Reinstall system to disable developer certificate and remove untrusted + patches. \ No newline at end of file diff --git a/doc/source/fault/750-series-alarm-messages.rst b/doc/source/fault/750-series-alarm-messages.rst new file mode 100644 index 000000000..d54adba79 --- /dev/null +++ b/doc/source/fault/750-series-alarm-messages.rst @@ -0,0 +1,118 @@ + +.. cta1579702173704 +.. _750-series-alarm-messages: + +========================= +750 Series Alarm Messages +========================= + +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the overall +health of the system. + +.. include:: ../_includes/x00-series-alarm-messages.rest + +.. _750-series-alarm-messages-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 750.001** + - Application upload failure. + * - Entity Instance + - k8s\_application= + * - Degrade Affecting Severity: + - None + * - Severity: + - W + * - Proposed Repair Action + - Check the system inventory log for the cause. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 750.002** + - Application apply failure. + * - Entity Instance + - k8s\_application= + * - Degrade Affecting Severity: + - None + * - Severity: + - M + * - Proposed Repair Action + - Retry applying the application. If the issue persists, please check the + system inventory log for cause. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 750.003** + - Application remove failure. + * - Entity Instance + - k8s\_application= + * - Degrade Affecting Severity: + - None + * - Severity: + - M + * - Proposed Repair Action + - Retry removing the application. If the issue persists, please the check + system inventory log for cause. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 750.004** + - Application apply in progress. + * - Entity Instance + - k8s\_application= + * - Degrade Affecting Severity: + - None + * - Severity: + - W + * - Proposed Repair Action + - No action is required. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 750.005** + - Application update in progress. + * - Entity Instance + - k8s\_application= + * - Degrade Affecting Severity: + - None + * - Severity: + - W + * - Proposed Repair Action + - No action is required. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 750.006** + - Automatic application re-apply is pending. + * - Entity Instance + - k8s\_application= + * - Degrade Affecting Severity: + - None + * - Severity: + - W + * - Proposed Repair Action + - Ensure all hosts are either locked or unlocked. When the system is + stable the application will automatically be reapplied. \ No newline at end of file diff --git a/doc/source/fault/800-series-alarm-messages.rst b/doc/source/fault/800-series-alarm-messages.rst new file mode 100644 index 000000000..f134c0924 --- /dev/null +++ b/doc/source/fault/800-series-alarm-messages.rst @@ -0,0 +1,152 @@ + +.. rww1579702317136 +.. _800-series-alarm-messages: + +========================= +800 Series Alarm Messages +========================= + +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the overall +health of the system. + +.. include:: ../_includes/x00-series-alarm-messages.rest + +.. _800-series-alarm-messages-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.001** + - Storage Alarm Condition: + + 1 mons down, quorum 1,2 controller-1,storage-0 + * - Entity Instance + - cluster= + * - Degrade Affecting Severity: + - None + * - Severity: + - C/M\* + * - Proposed Repair Action + - If problem persists, contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.003** + - Storage Alarm Condition: Quota/Space mismatch for the tier. + The sum of Ceph pool quotas does not match the tier size. + * - Entity Instance + - cluster=.tier= + * - Degrade Affecting Severity: + - None + * - Severity: + - m + * - Proposed Repair Action + - Update ceph storage pool quotas to use all available tier space. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.010** + - Potential data loss. No available OSDs in storage replication group. + * - Entity Instance + - cluster=.peergroup= + * - Degrade Affecting Severity: + - None + * - Severity: + - C\* + * - Proposed Repair Action + - Ensure storage hosts from replication group are unlocked and available. + Check if OSDs of each storage host are up and running. If problem + persists contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.011** + - Loss of replication in peergroup. + * - Entity Instance + - cluster=.peergroup= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Ensure storage hosts from replication group are unlocked and available. + Check if OSDs of each storage host are up and running. If problem + persists contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.102** + - Storage Alarm Condition: + + PV configuration on . + Reason: . + * - Entity Instance + - pv= + * - Degrade Affecting Severity: + - None + * - Severity: + - C/M\* + * - Proposed Repair Action + - Remove failed PV and associated Storage Device then recreate them. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.103** + - Storage Alarm Condition: + + \[ Metadata usage for LVM thin pool / exceeded + threshold and automatic extension failed + + Metadata usage for LVM thin pool / exceeded + threshold \]; threshold x%, actual y%. + * - Entity Instance + - .lvmthinpool=/ + * - Degrade Affecting Severity: + - None + * - Severity: + - C\* + * - Proposed Repair Action + - Increase Storage Space Allotment for Cinder on the 'lvm' backend. + Consult the user documentation for more details. If problem persists, + contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.104** + - Storage Alarm Condition: + + configuration failed to apply on host: . + * - Degrade Affecting Severity: + - None + * - Severity: + - C\* + * - Proposed Repair Action + - Update backend setting to reapply configuration. Consult the user + documentation for more details. If problem persists, contact next level + of support. \ No newline at end of file diff --git a/doc/source/fault/900-series-alarm-messages.rst b/doc/source/fault/900-series-alarm-messages.rst new file mode 100644 index 000000000..c7d5641c8 --- /dev/null +++ b/doc/source/fault/900-series-alarm-messages.rst @@ -0,0 +1,260 @@ + +.. pti1579702342696 +.. _900-series-alarm-messages: + +========================= +900 Series Alarm Messages +========================= + +The system inventory and maintenance service reports system changes with +different degrees of severity. Use the reported alarms to monitor the overall +health of the system. + +.. include:: ../_includes/x00-series-alarm-messages.rest + +.. _900-series-alarm-messages-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.001** + - Patching operation in progress. + * - Entity Instance + - host=controller + * - Degrade Affecting Severity: + - None + * - Severity: + - m\* + * - Proposed Repair Action + - Complete reboots of affected hosts. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.002** + - Obsolete patch in system. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - W\* + * - Proposed Repair Action + - Remove and delete obsolete patches. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.003** + - Patch host install failure. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Undo patching operation. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.004** + - Host version mismatch. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Reinstall host to update applied load. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.005** + - System Upgrade in progress. + * - Entity Instance + - host=controller + * - Degrade Affecting Severity: + - None + * - Severity: + - m\* + * - Proposed Repair Action + - No action required. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.101** + - Software update auto-apply in progress. + * - Entity Instance + - sw-update + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Wait for software update auto-apply to complete; if problem persists + contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.102** + - Software update auto-apply aborting. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Wait for software update auto-apply abort to complete; if problem + persists contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.103** + - Software update auto-apply failed. + * - Entity Instance + - host= + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Attempt to apply software updates manually; if problem persists contact + next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.201** + - Software upgrade auto-apply in progress. + * - Entity Instance + - orchestration=sw-upgrade + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Wait for software upgrade auto-apply to complete; if problem persists + contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.202** + - Software upgrade auto-apply aborting + * - Entity Instance + - orchestration=sw-upgrade + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Wait for software upgrade auto-apply abort to complete; if problem + persists contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.203** + - Software update auto-apply failed. + * - Entity Instance + - orchestration=sw-upgrade + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Attempt to apply software upgrade manually; if problem persists contact + next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.301** + - Firmware Update auto-apply in progress. + * - Entity Instance + - orchestration=fw-upgrade + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Wait for firmware update auto-apply to complete; if problem persists + contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.302** + - Firmware Update auto-apply aborting. + * - Entity Instance + - orchestration=fw-upgrade + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Wait for firmware update auto-apply abort to complete; if problem + persists contact next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 900.303** + - Firmware Update auto-apply failed. + * - Entity Instance + - orchestration=fw-upgrade + * - Degrade Affecting Severity: + - None + * - Severity: + - M\* + * - Proposed Repair Action + - Attempt to apply firmware update manually; if problem persists + contact next level of support. \ No newline at end of file diff --git a/doc/source/fault/900-series-orchestration-customer-log-messages.rst b/doc/source/fault/900-series-orchestration-customer-log-messages.rst new file mode 100644 index 000000000..99c7ddc8c --- /dev/null +++ b/doc/source/fault/900-series-orchestration-customer-log-messages.rst @@ -0,0 +1,168 @@ + +.. bdq1579700719122 +.. _900-series-orchestration-customer-log-messages: + +============================================== +900 Series Orchestration Customer Log Messages +============================================== + +The Customer Logs include events that do not require immediate user action. + +The following types of events are included in the Customer Logs. The severity +of the events is represented in the table by one or more letters, as follows: + +.. _900-series-orchestration-customer-log-messages-ul-jsd-jkg-vp: + +- C: Critical + +- M: Major + +- m: Minor + +- W: Warning + +- NA: Not applicable + +.. _900-series-orchestration-customer-log-messages-table-zgf-jvw-v5: + +.. table:: Table 1. Customer Log Messages + :widths: auto + + +-------------------+--------------------------------------------+----------+ + | Log ID | Description | Severity | + + +--------------------------------------------+----------+ + | | Entity Instance ID | + +===================+============================================+==========+ + | 900.111 | Software update auto-apply start | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.112 | Software update auto-apply inprogress | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.113 | Software update auto-apply rejected | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.114 | Software update auto-apply canceled | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.115 | Software update auto-apply failed | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.116 | Software update auto-apply completed | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.117 | Software update auto-apply abort | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.118 | Software update auto-apply aborting | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.119 | Software update auto-apply abort rejected | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.120 | Software update auto-apply abort failed | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.121 | Software update auto-apply aborted | C | + | | | | + | | orchestration=sw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.211 | Software upgrade auto-apply start | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.212 | Software upgrade auto-apply inprogress | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.213 | Software upgrade auto-apply rejected | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.214 | Software upgrade auto-apply canceled | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.215 | Software upgrade auto-apply failed | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.216 | Software upgrade auto-apply completed | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.217 | Software upgrade auto-apply abort | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.218 | Software upgrade auto-apply aborting | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.219 | Software upgrade auto-apply abort rejected | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.220 | Software upgrade auto-apply abort failed | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.221 | Software upgrade auto-apply aborted | C | + | | | | + | | orchestration=sw-upgrade | | + +-------------------+--------------------------------------------+----------+ + | 900.311 | Firmware update auto-apply | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.312 | Firmware update auto-apply in progress | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.313 | Firmware update auto-apply rejected | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.314 | Firmware update auto-apply canceled | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.315 | Firmware update auto-apply failed | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.316 | Firmware update auto-apply completed | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.317 | Firmware update auto-apply aborted | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.318 | Firmware update auto-apply aborting | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.319 | Firmware update auto-apply abort rejected | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.320 | Firmware update auto-apply abort failed | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + | 900.321 | Firmware update auto-apply aborted | C | + | | | | + | | orchestration=fw-update | | + +-------------------+--------------------------------------------+----------+ + diff --git a/doc/source/fault/adding-an-snmp-community-string-using-the-cli.rst b/doc/source/fault/adding-an-snmp-community-string-using-the-cli.rst new file mode 100644 index 000000000..41490c9f0 --- /dev/null +++ b/doc/source/fault/adding-an-snmp-community-string-using-the-cli.rst @@ -0,0 +1,111 @@ + +.. xti1552680491532 +.. _adding-an-snmp-community-string-using-the-cli: + +========================================== +Add an SNMP Community String Using the CLI +========================================== + +To enable SNMP services you need to define one or more SNMP community strings +using the command line interface. + +.. rubric:: |context| + +No default community strings are defined on |prod| after the initial +commissioning of the cluster. This means that no SNMP operations are enabled +by default. + +The following exercise illustrates the system commands available to manage and +query SNMP community strings. It uses the string **commstr1** as an example. + +.. caution:: + For security, do not use the string **public**, or other community strings + that could easily be guessed. + +.. rubric:: |prereq| + +All commands must be executed on the active controller's console, which can be +accessed using the OAM floating IP address. You must acquire Keystone **admin** +credentials in order to execute the commands. + +.. rubric:: |proc| + +#. Add the SNMP community string commstr1 to the system. + + .. code-block:: none + + ~(keystone_admin)$ system snmp-comm-add -c commstr1 + +-----------+--------------------------------------+ + | Property | Value | + +-----------+--------------------------------------+ + | access | ro | + | uuid | eccf5729-e400-4305-82e2-bdf344eb868d | + | community | commstr1 | + | view | .1 | + +-----------+--------------------------------------+ + + + The following are attributes associated with the new community string: + + **access** + The SNMP access type. In |prod| all community strings provide read-only + access. + + **uuid** + The UUID associated with the community string. + + **community** + The community string value. + + **view** + The is always the full MIB tree. + +#. List available community strings. + + .. code-block:: none + + ~(keystone_admin)$ system snmp-comm-list + +----------------+--------------------+--------+ + | SNMP community | View | Access | + +----------------+--------------------+--------+ + | commstr1 | .1 | ro | + +----------------+--------------------+--------+ + +#. Query details of a specific community string. + + .. code-block:: none + + ~(keystone_admin)$ system snmp-comm-show commstr1 + +------------+--------------------------------------+ + | Property | Value | + +------------+--------------------------------------+ + | access | ro | + | created_at | 2014-08-14T21:12:10.037637+00:00 | + | uuid | eccf5729-e400-4305-82e2-bdf344eb868d | + | community | commstr1 | + | view | .1 | + +------------+--------------------------------------+ + +#. Delete a community string. + + .. code-block:: none + + ~(keystone_admin)$ system snmp-comm-delete commstr1 + Deleted community commstr1 + +.. rubric:: |result| + +Community strings in |prod| provide query access to any SNMP monitor +workstation that can reach the controller's OAM address on UDP port 161. + +You can verify SNMP access using any monitor tool. For example, the freely +available command :command:`snmpwalk` can be issued from any host to list +the state of all SNMP Object Identifiers \(OID\): + +.. code-block:: none + + $ snmpwalk -v 2c -c commstr1 10.10.10.100 > oids.txt + +In this example, 10.10.10.100 is the |prod| OAM floating IP address. The output, +which is a large file, is redirected to the file oids.txt. + diff --git a/doc/source/fault/cli-commands-and-paged-output.rst b/doc/source/fault/cli-commands-and-paged-output.rst new file mode 100644 index 000000000..7d6043c83 --- /dev/null +++ b/doc/source/fault/cli-commands-and-paged-output.rst @@ -0,0 +1,61 @@ + +.. idb1552680603462 +.. _cli-commands-and-paged-output: + +============================= +CLI Commands and Paged Output +============================= + +There are some CLI commands that perform paging, and you can use options to +limit the paging or to disable it, which is useful for scripts. + +CLI fault management commands that perform paging include: + +.. _cli-commands-and-paged-output-ul-wjz-y4q-bw: + +- :command:`fm event-list` + +- :command:`fm event-suppress` + +- :command:`fm event-suppress-list` + +- :command:`fm event-unsuppress` + +- :command:`fm event-unsuppress-all` + + +To turn paging off, use the --nopaging option for the above commands. The +--nopaging option is useful for bash script writers. + +.. _cli-commands-and-paged-output-section-N10074-N1001C-N10001: + +-------- +Examples +-------- + +The following examples demonstrate the resulting behavior from the use and +non-use of the paging options. + +This produces a paged list of events. + +.. code-block:: none + + ~(keystone_admin)$ fm event-list + +This produces a list of events without paging. + +.. code-block:: none + + ~(keystone_admin)$ fm event-list --nopaging + +This produces a paged list of 50 events. + +.. code-block:: none + + ~(keystone_admin)$ fm event-list --limit 50 + +This will produce a list of 50 events without paging. + +.. code-block:: none + + ~(keystone_admin)$ fm event-list --limit 50 --nopaging \ No newline at end of file diff --git a/doc/source/fault/configuring-snmp-trap-destinations.rst b/doc/source/fault/configuring-snmp-trap-destinations.rst new file mode 100644 index 000000000..a8d219a89 --- /dev/null +++ b/doc/source/fault/configuring-snmp-trap-destinations.rst @@ -0,0 +1,89 @@ + +.. sjb1552680530874 +.. _configuring-snmp-trap-destinations: + +================================ +Configure SNMP Trap Destinations +================================ + +SNMP trap destinations are hosts configured in |prod| to receive unsolicited +SNMP notifications. + +.. rubric:: |context| + +Destination hosts are specified by IP address, or by host name if it can be +properly resolved by |prod|. Notifications are sent to the hosts using a +designated community string so that they can be validated. + +.. rubric:: |proc| + +#. Configure IP address 10.10.10.1 to receive SNMP notifications using the + community string commstr1. + + .. code-block:: none + + ~(keystone_admin)$ system snmp-trapdest-add -c commstr1 --ip_address 10.10.10.1 + +------------+--------------------------------------+ + | Property | Value | + +------------+--------------------------------------+ + | uuid | c7b6774e-7f45-40f5-bcca-3668de2a186f | + | ip_address | 10.10.10.1 | + | community | commstr1 | + | type | snmpv2c_trap | + | port | 162 | + | transport | udp | + +------------+--------------------------------------+ + + The following are attributes associated with the new community string: + + **uuid** + The UUID associated with the trap destination object. + + **ip\_address** + The trap destination IP address. + + **community** + The community string value to be associated with the notifications. + + **type** + snmpv2c\_trap, the only supported message type for SNMP traps. + + **port** + The destination UDP port that SNMP notifications are sent to. + + **transport** + The transport protocol used to send notifications. + +#. List defined trap destinations. + + .. code-block:: none + + ~(keystone_admin)$ system snmp-trapdest-list + +------------+----------------+------+--------------+-----------+ + | IP Address | SNMP Community | Port | Type | Transport | + +-------------+----------------+------+--------------+-----------+ + | 10.10.10.1 | commstr1 | 162 | snmpv2c_trap | udp | + +-------------+----------------+------+--------------+-----------+ + +#. Query access details of a specific trap destination. + + .. code-block:: none + + ~(keystone_admin)$ system snmp-trapdest-show 10.10.10.1 + +------------+--------------------------------------+ + | Property | Value | + +------------+--------------------------------------+ + | uuid | c7b6774e-7f45-40f5-bcca-3668de2a186f | + | ip_address | 10.10.10.1 | + | community | commstr1 | + | type | snmpv2c_trap | + | port | 162 | + | transport | udp | + +------------+--------------------------------------+ + +#. Disable the sending of SNMP notifications to a specific IP address. + + .. code-block:: none + + ~(keystone_admin)$ system snmp-trapdest-delete 10.10.10.1 + Deleted ip 10.10.10.1 \ No newline at end of file diff --git a/doc/source/fault/deleting-an-alarm-using-the-cli.rst b/doc/source/fault/deleting-an-alarm-using-the-cli.rst new file mode 100644 index 000000000..df8a00f2b --- /dev/null +++ b/doc/source/fault/deleting-an-alarm-using-the-cli.rst @@ -0,0 +1,34 @@ + +.. cpy1552680695138 +.. _deleting-an-alarm-using-the-cli: + +============================= +Delete an Alarm Using the CLI +============================= + +You can manually delete an alarm that is not automatically cleared by the +system. + +.. rubric:: |context| + +Manually deleting an alarm should not be done unless it is absolutely +clear that there is no reason for the alarm to be active. + +You can use the command :command:`fm alarm-delete` to manually delete an alarm +that remains active/set for no apparent reason, which may happen in rare +conditions. Alarms usually clear automatically when the related trigger or +fault condition is corrected. + +.. rubric:: |proc| + +.. _deleting-an-alarm-using-the-cli-steps-clp-fzw-nkb: + +- To delete an alarm, use the :command:`fm alarm-delete` command. + + For example: + + .. code-block:: none + + ~(keystone_admin)$ fm alarm-delete 4ab5698a-19cb-4c17-bd63-302173fef62c + + Substitute the UUID of the alarm you wish to delete. \ No newline at end of file diff --git a/doc/source/fault/enabling-snmp-support.rst b/doc/source/fault/enabling-snmp-support.rst new file mode 100644 index 000000000..4a53712a2 --- /dev/null +++ b/doc/source/fault/enabling-snmp-support.rst @@ -0,0 +1,26 @@ + +.. nat1580220934509 +.. _enabling-snmp-support: + +=================== +Enable SNMP Support +=================== + +SNMP support must be enabled before you can begin using it to monitor a system. + +.. rubric:: |context| + +In order to have a workable SNMP configuration you must use the command line +interface on the active controller to complete the following steps. + +.. rubric:: |proc| + +#. Define at least one SNMP community string. + + See |fault-doc|: :ref:`Adding an SNMP Community String Using the CLI ` for details. + +#. Configure at least one SNMP trap destination. + + This will allow alarms and logs to be reported as they happen. + + For more information, see :ref:`Configuring SNMP Trap Destinations `. \ No newline at end of file diff --git a/doc/source/fault/events-suppression-overview.rst b/doc/source/fault/events-suppression-overview.rst new file mode 100644 index 000000000..35c2a35ba --- /dev/null +++ b/doc/source/fault/events-suppression-overview.rst @@ -0,0 +1,33 @@ + +.. pmt1552680681730 +.. _events-suppression-overview: + +=========================== +Events Suppression Overview +=========================== + +All alarms are unsuppressed by default. A suppressed alarm is excluded from the +Active Alarm and Events displays by setting the **Suppression Status** filter, +on the Horizon Web interface, the CLI, or REST APIs, and will not be included +in the Active Alarm Counts. + +.. warning:: + Suppressing an alarm will result in the system NOT notifying the operator + of this particular fault. + +The Events Suppression page, available from **Admin** \> **Fault Management** +\> **Events Suppression** in the left-hand pane, provides the suppression +status of each event type and functionality for suppressing or unsuppressing +each event type. + +As shown below, the Events Suppression page lists each event type by ID, and +provides a description of the event and a current status indicator. Each event +can be suppressed using the **Suppress Event** button. + +You can sort events by clicking the **Event ID**, **Description**, and +**Status** column headers. You can also use these as filtering criteria +from the **Search** field. + +.. figure:: figures/uty1463514747661.png + :scale: 70 % + :alt: Event Suppression \ No newline at end of file diff --git a/doc/source/fault/fault-management-overview.rst b/doc/source/fault/fault-management-overview.rst new file mode 100644 index 000000000..7c1b22765 --- /dev/null +++ b/doc/source/fault/fault-management-overview.rst @@ -0,0 +1,69 @@ + +.. yrq1552337051689 +.. _fault-management-overview: + +========================= +Fault Management Overview +========================= + +An admin user can view |prod-long| fault management alarms and logs in order +to monitor and respond to fault conditions. + +See :ref:`Alarm Messages <100-series-alarm-messages>` for the list of +alarms and :ref:`Customer Log Messages +<200-series-maintenance-customer-log-messages>` +for the list of customer logs reported by |prod|. + +You can access active and historical alarms, and customer logs using the CLI, +GUI, REST APIs and SNMP. + +To use the CLI, see +:ref:`Viewing Active Alarms Using the CLI +` +and :ref:`Viewing the Event Log Using the CLI +`. + +Using the GUI, you can obtain fault management information in a number of +places. + +.. _fault-management-overview-ul-nqw-hbp-mx: + +- The Fault Management pages, available from + **Admin** \> **Fault Management** in the left-hand pane, provide access to + the following: + + - The Global Alarm Banner in the page header of all screens provides the + active alarm counts for all alarm severities, see + :ref:`The Global Alarm Banner `. + + - **Admin** \> **Fault Management** \> **Active Alarms**—Alarms that are + currently set, and require user action to clear them. For more + information about active alarms, see + :ref:`Viewing Active Alarms Using the CLI + ` + and :ref:`Deleting an Alarm Using the CLI + `. + + - **Admin** \> **Fault Management** \> **Events**—The event log + consolidates historical alarms that have occurred in the past, that + is, both set and clear events of active alarms, as well as customer + logs. + + For more about the event log, which includes historical alarms and + customer logs, see + :ref:`Viewing the Event Log Using Horizon + `. + + - **Admin** \> **Fault Management** \> **Events Suppression**—Individual + events can be put into a suppressed state or an unsuppressed state. A + suppressed alarm is excluded from the Active Alarm and Events displays. + All alarms are unsuppressed by default. An event can be suppressed or + unsuppressed using the Horizon Web interface, the CLI, or REST APIs. + +- The Data Network Topology view provides real-time alarm information for + data networks and associated worker hosts and data/pci-passthru/pci-sriov + interfaces. + +.. xreflink For more information, see |datanet-doc|: :ref:`The Data Network Topology View `. + +To use SNMP, see :ref:`SNMP Overview `. \ No newline at end of file diff --git a/doc/source/fault/figures/nlc1463584178366.png b/doc/source/fault/figures/nlc1463584178366.png new file mode 100644 index 0000000000000000000000000000000000000000..f625eb77df47a4afc0f2c3b1434463c685e47bc2 GIT binary patch literal 18665 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 literal 0 HcmV?d00001 diff --git a/doc/source/fault/figures/psa1567524091300.png b/doc/source/fault/figures/psa1567524091300.png new file mode 100644 index 0000000000000000000000000000000000000000..7466ac8bb1249b45eb78a9445305f0bb3f48714a GIT binary patch literal 84703 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

3xRbI=;WJ+(?vg-@z1Vc*p&4k?K} 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

U? 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 literal 0 HcmV?d00001 diff --git a/doc/source/fault/index.rs1 b/doc/source/fault/index.rs1 new file mode 100644 index 000000000..9de4788d4 --- /dev/null +++ b/doc/source/fault/index.rs1 @@ -0,0 +1,71 @@ +============================ +|prod-long| Fault Management +============================ + +- Fault Management Overview + + - :ref:`Fault Management Overview ` + +- The Global Alarm Banner + + - :ref:`The Global Alarm Banner ` + +- Viewing Active Alarms + + - :ref:`Viewing Active Alarms Using Horizon ` + - :ref:`Viewing Active Alarms Using the CLI ` + - :ref:`Viewing Alarm Details Using the CLI ` + +- Viewing the Event Log + + - :ref:`Viewing the Event Log Using Horizon ` + - :ref:`Viewing the Event Log Using the CLI ` + +- Deleting an Alarm + + - :ref:`Deleting an Alarm Using the CLI ` + +- Events Suppression + + - :ref:`Events Suppression Overview ` + - :ref:`Suppressing and Unsuppressing Events ` + - :ref:`Viewing Suppressed Alarms Using the CLI ` + - :ref:`Suppressing an Alarm Using the CLI ` + - :ref:`Unsuppressing an Alarm Using the CLI ` + +- CLI Commands and Paged Output + + - :ref:`CLI Commands and Paged Output ` + +- SNMP + + - :ref:`SNMP Overview ` + - :ref:`Enabling SNMP Support ` + - :ref:`Traps ` + + - :ref:`Configuring SNMP Trap Destinations ` + + - :ref:`SNMP Event Table ` + - :ref:`Adding an SNMP Community String Using the CLI ` + - :ref:`Setting SNMP Identifying Information ` + +- :ref:`Troubleshooting Log Collection ` +- Cloud Platform Alarm Messages + + - :ref:`Alarm Messages Overview ` + - :ref:`100 Series Alarm Messages <100-series-alarm-messages>` + - :ref:`200 Series Alarm Messages <200-series-alarm-messages>` + - :ref:`300 Series Alarm Messages <300-series-alarm-messages>` + - :ref:`400 Series Alarm Messages <400-series-alarm-messages>` + - :ref:`500 Series Alarm Messages <500-series-alarm-messages>` + - :ref:`750 Series Alarm Messages <750-series-alarm-messages>` + - :ref:`800 Series Alarm Messages <800-series-alarm-messages>` + - :ref:`900 Series Alarm Messages <900-series-alarm-messages>` + +- Cloud Platform Customer Log Messages + + - :ref:`200 Series Maintenance Customer Log Messages <200-series-maintenance-customer-log-messages>` + - :ref:`400 Series Customer Log Messages <400-series-customer-log-messages>` + - :ref:`900 Series Orchestration Customer Log Messages <900-series-orchestration-customer-log-messages>` + + diff --git a/doc/source/fault/index.rst b/doc/source/fault/index.rst new file mode 100644 index 000000000..b9e0771d9 --- /dev/null +++ b/doc/source/fault/index.rst @@ -0,0 +1,161 @@ +.. Fault Management file, created by + sphinx-quickstart on Thu Sep 3 15:14:59 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +================ +Fault Management +================ + +-------------------- +StarlingX Kubernetes +-------------------- + +.. toctree:: + :maxdepth: 1 + + fault-management-overview + +***************** +The global banner +***************** + +.. toctree:: + :maxdepth: 1 + + the-global-alarm-banner + +********************* +Viewing active alarms +********************* + +.. toctree:: + :maxdepth: 1 + + viewing-active-alarms-using-horizon + viewing-active-alarms-using-the-cli + viewing-alarm-details-using-the-cli + +********************* +Viewing the event log +********************* + +.. toctree:: + :maxdepth: 1 + + viewing-the-event-log-using-horizon + viewing-the-event-log-using-the-cli + +***************** +Deleting an alarm +***************** + +.. toctree:: + :maxdepth: 1 + + deleting-an-alarm-using-the-cli + +***************** +Event suppression +***************** + +.. toctree:: + :maxdepth: 1 + + events-suppression-overview + suppressing-and-unsuppressing-events + viewing-suppressed-alarms-using-the-cli + suppressing-an-alarm-using-the-cli + unsuppressing-an-alarm-using-the-cli + +***************************** +CLI commands and paged output +***************************** + +.. toctree:: + :maxdepth: 1 + + cli-commands-and-paged-output + +**** +SNMP +**** + +.. toctree:: + :maxdepth: 1 + + snmp-overview + enabling-snmp-support + traps + configuring-snmp-trap-destinations + snmp-event-table + adding-an-snmp-community-string-using-the-cli + setting-snmp-identifying-information + +****************************** +Troubleshooting log collection +****************************** + +.. toctree:: + :maxdepth: 1 + + troubleshooting-log-collection + +************** +Alarm messages +************** + +.. toctree:: + :maxdepth: 1 + + 100-series-alarm-messages + 200-series-alarm-messages + 300-series-alarm-messages + 400-series-alarm-messages + 500-series-alarm-messages + 750-series-alarm-messages + 800-series-alarm-messages + 900-series-alarm-messages + +************ +Log messages +************ + +.. toctree:: + :maxdepth: 1 + + 200-series-maintenance-customer-log-messages + 400-series-customer-log-messages + 900-series-orchestration-customer-log-messages + +------------------- +StarlingX OpenStack +------------------- + +.. toctree:: + :maxdepth: 1 + + openstack-fault-management-overview + +************************ +OpenStack alarm messages +************************ + +.. toctree:: + :maxdepth: 1 + + openstack-alarm-messages-300s + openstack-alarm-messages-400s + openstack-alarm-messages-700s + openstack-alarm-messages-800s + +******************************* +OpenStack customer log messages +******************************* + +.. toctree:: + :maxdepth: 1 + + openstack-customer-log-messages-270s-virtual-machines + openstack-customer-log-messages-401s-services + openstack-customer-log-messages-700s-virtual-machines \ No newline at end of file diff --git a/doc/source/fault/openstack-alarm-messages-300s.rst b/doc/source/fault/openstack-alarm-messages-300s.rst new file mode 100644 index 000000000..c98f0a7fc --- /dev/null +++ b/doc/source/fault/openstack-alarm-messages-300s.rst @@ -0,0 +1,135 @@ + +.. slf1579788051430 +.. _alarm-messages-300s: + +===================== +Alarm Messages - 300s +===================== + +.. include:: ../_includes/openstack-alarm-messages-xxxs.rest + +.. _alarm-messages-300s-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.003** + - Networking Agent not responding. + * - Entity Instance + - host=.agent= + * - Severity: + - M\* + * - Proposed Repair Action + - If condition persists, attempt to clear issue by administratively locking and unlocking the Host. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.004** + - No enabled compute host with connectivity to provider network. + * - Entity Instance + - host=.providernet= + * - Severity: + - M\* + * - Proposed Repair Action + - Enable compute hosts with required provider network connectivity. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.005** + - Communication failure detected over provider network x% for ranges y% on host z%. + + or + + Communication failure detected over provider network x% on host z%. + * - Entity Instance + - providernet=.host= + * - Severity: + - M\* + * - Proposed Repair Action + - Check neighbor switch port VLAN assignments. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.010** + - ML2 Driver Agent non-reachable + + or + + ML2 Driver Agent reachable but non-responsive + + or + + ML2 Driver Agent authentication failure + + or + + ML2 Driver Agent is unable to sync Neutron database + * - Entity Instance + - host=.ml2driver= + * - Severity: + - M\* + * - Proposed Repair Action + - Monitor and if condition persists, contact next level of support. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.012** + - Openflow Controller connection failed. + * - Entity Instance + - host=.openflow-controller= + * - Severity: + - M\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent equipment. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.013** + - No active Openflow controller connections found for this network. + + or + + One or more Openflow controller connections in disconnected state for this network. + * - Entity Instance + - host=.openflow-network= + * - Severity: + - C, M\* + * - Proposed Repair Action + - host=.openflow-network= + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.015** + - No active OVSDB connections found. + * - Entity Instance + - host= + * - Severity: + - C\* + * - Proposed Repair Action + - Check cabling and far-end port configuration and status on adjacent equipment. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 300.016** + - Dynamic routing agent x% lost connectivity to peer y% + * - Entity Instance + - host=,agent=,bgp-peer= + * - Severity: + - M\* + * - Proposed Repair Action + - If condition persists, fix connectivity to peer. \ No newline at end of file diff --git a/doc/source/fault/openstack-alarm-messages-400s.rst b/doc/source/fault/openstack-alarm-messages-400s.rst new file mode 100644 index 000000000..ec58d929d --- /dev/null +++ b/doc/source/fault/openstack-alarm-messages-400s.rst @@ -0,0 +1,55 @@ + +.. msm1579788069384 +.. _alarm-messages-400s: + +===================== +Alarm Messages - 400s +===================== + +.. include:: ../_includes/openstack-alarm-messages-xxxs.rest + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 400.001** + - Service group failure; . + + or + + Service group degraded; + + or + + Service group Warning; . + * - Entity Instance + - service\_domain=.service\_group=.host= + * - Severity: + - C/M/m\* + * - Proposed Repair Action + - Contact next level of support. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 400.002** + - Service group loss of redundancy; expected standby member but only standby member available. + + or + + Service group loss of redundancy; expected standby member but only standby member available. + + or + + Service group loss of redundancy; expected active member but no active members available. + + or + + Service group loss of redundancy; expected active member but only active member available. + * - Entity Instance + - service\_domain=.service\_group= + * - Severity: + - M\* + * - Proposed Repair Action + - Bring a controller node back in to service, otherwise contact next level of support. \ No newline at end of file diff --git a/doc/source/fault/openstack-alarm-messages-700s.rst b/doc/source/fault/openstack-alarm-messages-700s.rst new file mode 100644 index 000000000..66857bfb1 --- /dev/null +++ b/doc/source/fault/openstack-alarm-messages-700s.rst @@ -0,0 +1,275 @@ + +.. uxo1579788086872 +.. _alarm-messages-700s: + +===================== +Alarm Messages - 700s +===================== + +.. include:: ../_includes/openstack-alarm-messages-xxxs.rest + +.. _alarm-messages-700s-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.001** + - Instance owned by has failed on host + + + Instance owned by has failed to + schedule + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - The system will attempt recovery; no repair action required. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.002** + - Instance owned by is paused on host + . + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Unpause the instance. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.003** + - Instance owned by is suspended on host + . + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Resume the instance. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.004** + - Instance owned by is stopped on host + . + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Start the instance. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.005** + - Instance owned by is rebooting on host + . + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for reboot to complete; if problem persists contact next level of + support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.006** + - Instance owned by is rebuilding on host + . + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for rebuild to complete; if problem persists contact next level of + support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.007** + - Instance owned by is evacuating from host + . + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for evacuate to complete; if problem persists contact next level of + support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.008** + - Instance owned by is live migrating from + host + * - Entity Instance + - tenant=.instance= + * - Severity: + - W\* + * - Proposed Repair Action + - Wait for live migration to complete; if problem persists contact next + level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.009** + - Instance owned by is cold migrating from + host + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for cold migration to complete; if problem persists contact next + level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.010** + - Instance owned by has been cold-migrated + to host waiting for confirmation. + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Confirm or revert cold-migrate of instance. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.011** + - Instance owned by is reverting cold + migrate to host + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for cold migration revert to complete; if problem persists contact + next level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.012** + - Instance owned by is resizing on host + + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for resize to complete; if problem persists contact next level of + support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.013** + - Instance owned by has been resized on + host waiting for confirmation. + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Confirm or revert resize of instance. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.014** + - Instance owned by is reverting resize + on host . + * - Entity Instance + - tenant=.instance= + * - Severity: + - C\* + * - Proposed Repair Action + - Wait for resize revert to complete; if problem persists contact next + level of support. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.016** + - Multi-Node Recovery Mode + * - Entity Instance + - subsystem=vim + * - Severity: + - m\* + * - Proposed Repair Action + - Wait for the system to exit out of this mode. + +----- + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 700.017** + - Server group policy was not satisfied. + * - Entity Instance + - server-group + * - Severity: + - M + * - Proposed Repair Action + - Migrate instances in an attempt to satisfy the policy; if problem + persists contact next level of support. \ No newline at end of file diff --git a/doc/source/fault/openstack-alarm-messages-800s.rst b/doc/source/fault/openstack-alarm-messages-800s.rst new file mode 100644 index 000000000..7a8c05b5e --- /dev/null +++ b/doc/source/fault/openstack-alarm-messages-800s.rst @@ -0,0 +1,98 @@ + +.. tsh1579788106505 +.. _alarm-messages-800s: + +===================== +Alarm Messages - 800s +===================== + +.. include:: ../_includes/openstack-alarm-messages-xxxs.rest + +.. _alarm-messages-800s-table-zrd-tg5-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.002** + - Image storage media is full: There is not enough disk space on the image storage media. + + or + + Instance snapshot failed: There is not enough disk space on the image storage media. + + or + + Supplied \(\) and generated from uploaded image \(\) did not match. Setting image status to 'killed'. + + or + + Error in store configuration. Adding images to store is disabled. + + or + + Forbidden upload attempt: + + or + + Insufficient permissions on image storage media: + + or + + Denying attempt to upload image larger than bytes. + + or + + Denying attempt to upload image because it exceeds the quota: + + or + + Received HTTP error while uploading image + + or + + Client disconnected before sending all data to backend + + or + + Failed to upload image + * - Entity Instance + - image=, instance= + + or + + image=, instance= + * - Severity: + - W\* + * - Proposed Repair Action + - If problem persists, contact next level of support. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.100** + - Storage Alarm Condition: + + Cinder I/O Congestion is above normal range and is building + * - Entity Instance + - cinder\_io\_monitor + * - Severity: + - M + * - Proposed Repair Action + - Reduce the I/O load on the Cinder LVM backend. Use Cinder QoS mechanisms on high usage volumes. + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Alarm ID: 800.101** + - Storage Alarm Condition: + + Cinder I/O Congestion is high and impacting guest performance + * - Entity Instance + - cinder\_io\_monitor + * - Severity: + - C\* + * - Proposed Repair Action + - Reduce the I/O load on the Cinder LVM backend. Cinder actions may fail until congestion is reduced. Use Cinder QoS mechanisms on high usage volumes. diff --git a/doc/source/fault/openstack-customer-log-messages-270s-virtual-machines.rst b/doc/source/fault/openstack-customer-log-messages-270s-virtual-machines.rst new file mode 100644 index 000000000..b37f47348 --- /dev/null +++ b/doc/source/fault/openstack-customer-log-messages-270s-virtual-machines.rst @@ -0,0 +1,38 @@ + +.. ftb1579789103703 +.. _customer-log-messages-270s-virtual-machines: + +============================================= +Customer Log Messages 270s - Virtual Machines +============================================= + +.. include:: ../_includes/openstack-customer-log-messages-xxxs.rest + +.. _customer-log-messages-270s-virtual-machines-table-zgf-jvw-v5: + +.. table:: Table 1. Customer Log Messages - Virtual Machines + :widths: auto + + +-----------+----------------------------------------------------------------------------------+----------+ + | Log ID | Description | Severity | + + +----------------------------------------------------------------------------------+----------+ + | | Entity Instance ID | | + +===========+==================================================================================+==========+ + | 270.101 | Host compute services failure\[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +-----------+----------------------------------------------------------------------------------+----------+ + | 270.102 | Host compute services enabled | C | + | | | | + | | tenant=.instance= | | + +-----------+----------------------------------------------------------------------------------+----------+ + | 270.103 | Host compute services disabled | C | + | | | | + | | tenant=.instance= | | + +-----------+----------------------------------------------------------------------------------+----------+ + | 275.001 | Host hypervisor is now - | C | + | | | | + | | tenant=.instance= | | + +-----------+----------------------------------------------------------------------------------+----------+ + +See also :ref:`Customer Log Messages 700s - Virtual Machines ` \ No newline at end of file diff --git a/doc/source/fault/openstack-customer-log-messages-401s-services.rst b/doc/source/fault/openstack-customer-log-messages-401s-services.rst new file mode 100644 index 000000000..6173825de --- /dev/null +++ b/doc/source/fault/openstack-customer-log-messages-401s-services.rst @@ -0,0 +1,45 @@ + +.. hwr1579789203684 +.. _customer-log-messages-401s-services: + +===================================== +Customer Log Messages 401s - Services +===================================== + +.. include:: ../_includes/openstack-customer-log-messages-xxxs.rest + +.. _customer-log-messages-401s-services-table-zgf-jvw-v5: + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Log Message: 401.001** + - Service group state change from to on host + * - Entity Instance + - service\_domain=.service\_group=.host= + * - Severity: + - C + +.. list-table:: + :widths: 6 15 + :header-rows: 0 + + * - **Log Message: 401.002** + - Service group loss of redundancy; expected standby member but no standby members available. + + or + + Service group loss of redundancy; expected standby member but only standby member\(s\) available. + + or + + Service group has no active members available; expected active member\(s\) + + or + + Service group loss of redundancy; expected active member\(s\) but only active member\(s\) available. + * - Entity Instance + - service\_domain=.service\_group= + * - Severity: + - C diff --git a/doc/source/fault/openstack-customer-log-messages-700s-virtual-machines.rst b/doc/source/fault/openstack-customer-log-messages-700s-virtual-machines.rst new file mode 100644 index 000000000..3a13c8750 --- /dev/null +++ b/doc/source/fault/openstack-customer-log-messages-700s-virtual-machines.rst @@ -0,0 +1,480 @@ + +.. qfy1579789227230 +.. _customer-log-messages-700s-virtual-machines: + +============================================= +Customer Log Messages 700s - Virtual Machines +============================================= + +.. include:: ../_includes/openstack-customer-log-messages-xxxs.rest + +.. _customer-log-messages-700s-virtual-machines-table-zgf-jvw-v5: + +.. table:: Table 1. Customer Log Messages + :widths: auto + + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | Log ID | Description | Severity | + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | | Entity Instance ID | | + +==========+====================================================================================================================================================================================+==========+ + | 700.101 | Instance is enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.102 | Instance owned by has failed\[, reason = \]. | C | + | | Instance owned by has failed to schedule\[, reason = \] | | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.103 | Create issued by or by the system against owned by | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.104 | Creating instance owned by | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.105 | Create rejected for instance \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.106 | Create canceled for instance \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.107 | Create failed for instance \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.108 | Instance owned by has been created | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.109 | Delete issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.110 | Deleting instance owned by | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.111 | Delete rejected for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.112 | Delete canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.113 | Delete failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.114 | Deleted instance owned by | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.115 | Pause issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.116 | Pause inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.117 | Pause rejected for instance enabled on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.118 | Pause canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.119 | Pause failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.120 | Pause complete for instance now paused on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.121 | Unpause issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.122 | Unpause inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.123 | Unpause rejected for instance paused on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.124 | Unpause canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.125 | Unpause failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.126 | Unpause complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.127 | Suspend issued by or by the system> against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.128 | Suspend inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.129 | Suspend rejected for instance enabled on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.130 | Suspend canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.131 | Suspend failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.132 | Suspend complete for instance now suspended on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.133 | Resume issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.134 | Resume inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.135 | Resume rejected for instance suspended on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.136 | Resume canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.137 | Resume failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.138 | Resume complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.139 | Start issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.140 | Start inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.141 | Start rejected for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.142 | Start canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.143 | Start failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.144 | Start complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.145 | Stop issued by \ or by the system or by the instance against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.146 | Stop inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.147 | Stop rejected for instance enabled on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.148 | Stop canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.149 | Stop failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.150 | Stop complete for instance now disabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.151 | Live-Migrate issued by or by the system against instance owned by from host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.152 | Live-Migrate inprogress for instance from host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.153 | Live-Migrate rejected for instance now on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.154 | Live-Migrate canceled for instance now on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.155 | Live-Migrate failed for instance now on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.156 | Live-Migrate complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.157 | Cold-Migrate issued by or by the system against instance owned by from host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.158 | Cold-Migrate inprogress for instance from host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.159 | Cold-Migrate rejected for instance now on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.160 | Cold-Migrate canceled for instance now on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.161 | Cold-Migrate failed for instance now on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.162 | Cold-Migrate complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.163 | Cold-Migrate-Confirm issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.164 | Cold-Migrate-Confirm inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.165 | Cold-Migrate-Confirm rejected for instance now enabled on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.166 | Cold-Migrate-Confirm canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.167 | Cold-Migrate-Confirm failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.168 | Cold-Migrate-Confirm complete for instance enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.169 | Cold-Migrate-Revert issued by or by the system\> against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.170 | Cold-Migrate-Revert inprogress for instance from host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.171 | Cold-Migrate-Revert rejected for instance now on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.172 | Cold-Migrate-Revert canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.173 | Cold-Migrate-Revert failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.174 | Cold-Migrate-Revert complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.175 | Evacuate issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.176 | Evacuating instance owned by from host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.177 | Evacuate rejected for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.178 | Evacuate canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.179 | Evacuate failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.180 | Evacuate complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.181 | Reboot <\(soft-reboot\) or \(hard-reboot\)> issued by or by the system or by the instance against instance owned by | C | + | | on host \[, reason = \] | | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.182 | Reboot inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.183 | Reboot rejected for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.184 | Reboot canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.185 | Reboot failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.186 | Reboot complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.187 | Rebuild issued by or by the system against instance using image on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.188 | Rebuild inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.189 | Rebuild rejected for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.190 | Rebuild canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.191 | Rebuild failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.192 | Rebuild complete for instance now enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.193 | Resize issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.194 | Resize inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.195 | Resize rejected for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.196 | Resize canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.197 | Resize failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.198 | Resize complete for instance enabled on host waiting for confirmation | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.199 | Resize-Confirm issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.200 | Resize-Confirm inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.201 | Resize-Confirm rejected for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.202 | Resize-Confirm canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.203 | Resize-Confirm failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.204 | Resize-Confirm complete for instance enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.205 | Resize-Revert issued by or by the system against instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.206 | Resize-Revert inprogress for instance on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.207 | Resize-Revert rejected for instance owned by on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.208 | Resize-Revert canceled for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.209 | Resize-Revert failed for instance on host \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.210 | Resize-Revert complete for instance enabled on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.214 | Instance has been renamed to owned by on host | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.215 | Guest Health Check failed for instance \[, reason = \] | C | + | | | | + | | tenant=.instance= | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.216 | Entered Multi-Node Recovery Mode | C | + | | | | + | | subsystem-vim | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + | 700.217 | Exited Multi-Node Recovery Mode | C | + | | | | + | | subsystem-vim | | + +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ + +See also :ref:`Customer Log Messages 270s - Virtual Machines ` \ No newline at end of file diff --git a/doc/source/fault/openstack-fault-management-overview.rst b/doc/source/fault/openstack-fault-management-overview.rst new file mode 100644 index 000000000..6dcd056e4 --- /dev/null +++ b/doc/source/fault/openstack-fault-management-overview.rst @@ -0,0 +1,19 @@ + +.. ekn1458933172232 +.. _openstack-fault-management-overview: + +======== +Overview +======== + +|prod-os| is a containerized application running on top of |prod|. + +All Fault Management related interfaces for displaying alarms and logs, +suppressing/unsuppressing events, enabling SNMP and enabling remote log +collection are available on the |prod| REST APIs, CLIs and/or GUIs. + +.. xreflink See :ref:`Fault Management Overview ` for details on these interfaces. + +This section provides the list of OpenStack related Alarms and Customer Logs +that are monitored and reported for the |prod-os| application through the +|prod| fault management interfaces. \ No newline at end of file diff --git a/doc/source/fault/setting-snmp-identifying-information.rst b/doc/source/fault/setting-snmp-identifying-information.rst new file mode 100644 index 000000000..3d3423d15 --- /dev/null +++ b/doc/source/fault/setting-snmp-identifying-information.rst @@ -0,0 +1,30 @@ + +.. tie1580219717420 +.. _setting-snmp-identifying-information: + +================================ +Set SNMP Identifying Information +================================ + +You can set SNMP system information including name, location and contact +details. + +.. rubric:: |proc| + +- Use the following command syntax to set the **sysContact** attribute. + + .. code-block:: none + + ~(keystone_admin)$ system modify --contact + +- Use the following command syntax to set the **sysLocation** attribute. + + .. code-block:: none + + ~(keystone_admin)$ system modify --location + +- Use the following command syntax to set the **sysName** attribute. + + .. code-block:: none + + ~(keystone_admin)$ system modify --location \ No newline at end of file diff --git a/doc/source/fault/snmp-event-table.rst b/doc/source/fault/snmp-event-table.rst new file mode 100644 index 000000000..83e5d1201 --- /dev/null +++ b/doc/source/fault/snmp-event-table.rst @@ -0,0 +1,44 @@ + +.. rdr1552680506097 +.. _snmp-event-table: + +================ +SNMP Event Table +================ + +|prod| supports SNMP active and historical alarms, and customer logs, in an +event table. + +The event table contains historical alarms \(sets and clears\) alarms and +customer logs. It does not contain active alarms. Each entry in the table +includes the following variables: + +.. _snmp-event-table-ul-y1w-4lk-qq: + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +.. note:: + The previous SNMP Historical Alarm Table and the SNMP Customer Log Table + are still supported but marked as deprecated in the MIB. \ No newline at end of file diff --git a/doc/source/fault/snmp-overview.rst b/doc/source/fault/snmp-overview.rst new file mode 100644 index 000000000..5a7a89e37 --- /dev/null +++ b/doc/source/fault/snmp-overview.rst @@ -0,0 +1,136 @@ + +.. gzl1552680561274 +.. _snmp-overview: + +============= +SNMP Overview +============= + +|prod| can generate SNMP traps for |prod| Alarm Events and Customer Log Events. + +This includes alarms based on hardware sensors monitored by board management +controllers. + +.. xreflink For more information, see |node-doc|: :ref:`Sensors Tab `. + +.. contents:: + :local: + :depth: 1 + +.. _snmp-overview-section-N10027-N1001F-N10001: + +------------------ +About SNMP Support +------------------ + +Support for Simple Network Management Protocol \(SNMP\) is implemented as follows: + +.. _snmp-overview-ul-bjv-cjd-cp: + +- access is disabled by default, must be enabled manually from the command + line interface + +- available using the controller's node floating OAM IP address, over the + standard SNMP UDP port 161 + +- supported version is SNMPv2c + +- access is read-only for all SNMP communities + +- all SNMP communities have access to the entire OID tree, there is no + support for VIEWS + +- supported SNMP operations are GET, GETNEXT, GETBULK, and SNMPv2C-TRAP2 + +- the SNMP SET operation is not supported + +For information on enabling SNMP support, see +:ref:`Enabling SNMP Support `. + +.. _snmp-overview-section-N10099-N1001F-N10001: + +----------------------- +SNMPv2-MIB \(RFC 3418\) +----------------------- + +Support for the basic standard MIB for SNMP entities is limited to the System +and SNMP groups, as follows: + +.. _snmp-overview-ul-ulb-ypl-hp: + +- System Group, **.iso.org.dod.internet.mgmt.mib-2.system** + +- SNMP Group, **.iso.org.dod.internet.mgmt.mib-2.snmp** + +- coldStart and warmStart Traps + +The following system attributes are used in support of the SNMP implementation. +They can be displayed using the :command:`system show` command. + +**contact** + A read-write system attribute used to populate the **sysContact** attribute + of the SNMP System group. + +**location** + A read-write system attribute used to populate the **sysLocation** attribute + of the SNMP System group. + +**name** + A read-write system attribute used to populate the **sysName** attribute of + the SNMP System group. + +**software\_version** + A read-only system attribute set automatically by the system. Its value is + used to populate the **sysDescr** attribute of the SNMP System group. + +For information on setting the **sysContact**, **sysLocation**, and **sysName** +attributes, see +:ref:`Setting SNMP Identifying Information `. + +The following SNMP attributes are used as follows: + +**sysObjectId** + Set to **iso.org.dod.internet.private.enterprise.wrs.titanium** \(1.3.6.1.4.1.1.2\). + +**sysUpTime** + Set to the up time of the active controller. + +**sysServices** + Set to the nominal value of 72 to indicate that the host provides services at layers 1 to 7. + +.. _snmp-overview-section-N100C9-N1001F-N10001: + +-------------------------- +Wind River Enterprise MIBs +-------------------------- + +|prod| supports the Wind River Enterprise Registration and Alarm MIBs. + +**Enterprise Registration MIB, wrsEnterpriseReg.mib** + Defines the Wind River Systems \(WRS\) hierarchy underneath the + **iso\(1\).org\(3\).dod\(6\).internet\(1\).private\(4\).enterprise\(1\)**. + This hierarchy is administered as follows: + + - **.wrs\(731\)**, the IANA-registered enterprise code for Wind River + Systems + + - **.wrs\(731\).wrsCommon\(1\).wrs\(1-...\)**, + defined in wrsCommon.mib. + + - **.wrs\(731\).wrsProduct\(2-...\)**, defined in wrs.mib. + +**Alarm MIB, wrsAlarmMib.mib** + Defines the common TRAP and ALARM MIBs for |org| products. + The definition includes textual conventions, an active alarm table, a + historical alarm table, a customer log table, and traps. + + **Textual Conventions** + Semantic statements used to simplify definitions in the active alarm + table and traps components of the MIB. + + **Tables** + See :ref:`SNMP Event Table ` for detailed + descriptions. + + **Traps** + See :ref:`Traps ` for detailed descriptions. \ No newline at end of file diff --git a/doc/source/fault/suppressing-an-alarm-using-the-cli.rst b/doc/source/fault/suppressing-an-alarm-using-the-cli.rst new file mode 100644 index 000000000..80167f293 --- /dev/null +++ b/doc/source/fault/suppressing-an-alarm-using-the-cli.rst @@ -0,0 +1,47 @@ + +.. ani1552680633324 +.. _suppressing-an-alarm-using-the-cli: + +=============================== +Suppress an Alarm Using the CLI +=============================== + +You can use the CLI to prevent a monitored system parameter from generating +unnecessary alarms. + +.. rubric:: |proc| + +#. Use the :command:`fm event-suppress` to suppress a single alarm or + multiple alarms by ID. + + .. code-block:: none + + ~(keystone_admin)$ fm event-suppress [--nowrap] --alarm id [,] \ + [--nopaging] [--uuid] + + where + + **** + is a comma separated list of alarm UUIDs. + + **--nowrap** + disables output wrapping + + **--nopaging** + disables paged output + + **--uuid** + includes the alarm type UUIDs in the output + + An error message is generated in the case of an invalid + : **Alarm ID not found: **. + + If the specified number of Alarm IDs is greater than 1, and at least 1 is + wrong, then the suppress command is not applied \(none of the specified + Alarm IDs are suppressed\). + + .. note:: + Suppressing an Alarm will result in the system NOT notifying the + operator of this particular fault. + + diff --git a/doc/source/fault/suppressing-and-unsuppressing-events.rst b/doc/source/fault/suppressing-and-unsuppressing-events.rst new file mode 100644 index 000000000..ea5f29f0c --- /dev/null +++ b/doc/source/fault/suppressing-and-unsuppressing-events.rst @@ -0,0 +1,37 @@ + +.. sla1552680666298 +.. _suppressing-and-unsuppressing-events: + +================================= +Suppress and Unsuppressing Events +================================= + +You can set events to a suppressed state and toggle them back to unsuppressed. + +.. rubric:: |proc| + +#. Open the Events Suppression page, available from **Admin** \> + **Fault Management** \> **Events Suppression** in the left-hand pane. + + The Events Suppression page appears. It provides the suppression status of + each event type and functionality for suppressing or unsuppressing each + event, depending on the current status of the event. + +#. Locate the event ID that you want to suppress. + +#. Click the **Suppress Event** button for that event. + + You are prompted to confirm that you want to suppress the event. + + .. caution:: + Suppressing an Alarm will result in the system *not* notifying the + operator of this particular fault. + +#. Click **Suppress Event** in the Confirm Suppress Event dialog box. + + The Events Suppression tab is refreshed to show the selected event ID with + a status of Suppressed, as shown below. The **Suppress Event** button is + replaced by **Unsuppress Event**, providing a way to toggle the event back + to unsuppressed. + + .. image:: figures/nlc1463584178366.png \ No newline at end of file diff --git a/doc/source/fault/the-global-alarm-banner.rst b/doc/source/fault/the-global-alarm-banner.rst new file mode 100644 index 000000000..102cb54ef --- /dev/null +++ b/doc/source/fault/the-global-alarm-banner.rst @@ -0,0 +1,25 @@ + +.. wtg1552680748451 +.. _the-global-alarm-banner: + +======================= +The Global Alarm Banner +======================= + +The |prod| Horizon Web interface provides an active alarm counts banner in the +page header of all screens. + +The global alarm banner provides a high-level indicator of faults on the system, +that is always visible, regardless of what page you are on in the GUI. The +banner provides a color-coded snapshot of current active alarm counts for each +alarm severity. + +.. image:: figures/xyj1558447807645.png + +.. note:: + Suppressed alarms are not shown. For more about suppressed alarms, see + :ref:`Events Suppression Overview `. + +Clicking on the alarm banner opens the Fault Management page, where more +detailed information about the alarms is provided. + diff --git a/doc/source/fault/traps.rst b/doc/source/fault/traps.rst new file mode 100644 index 000000000..f2d66327b --- /dev/null +++ b/doc/source/fault/traps.rst @@ -0,0 +1,63 @@ + +.. lmy1552680547012 +.. _traps: + +===== +Traps +===== + +|prod| supports SNMP traps. Traps send unsolicited information to monitoring +software when significant events occur. + +The following traps are defined. + +.. _traps-ul-p1j-tvn-c5: + +- **wrsAlarmCritical** + +- **wrsAlarmMajor** + +- **wrsAlarmMinor** + +- **wrsAlarmWarning** + +- **wrsAlarmMessage** + +- **wrsAlarmClear** + +- **wrsAlarmHierarchicalClear** + +.. note:: + Customer Logs always result in **wrsAlarmMessage** traps. + +For Critical, Major, Minor, Warning, and Message traps, all variables in the +active alarm table are included as varbinds \(variable bindings\), where each +varbind is a pair of fields consisting of an object identifier and a value +for the object. + +For the Clear trap, varbinds include only the following variables: + +.. _traps-ul-uks-byn-nkb: + +- + +- + +- + +- + +For the HierarchicalClear trap, varbinds include only the following variables: + +.. _traps-ul-isn-fyn-nkb: + +- + +- + +- + +For all alarms, the Notification Type is based on the severity of the trap or +alarm. This is done to facilitate the interaction with most SNMP trap viewers +which typically use the Notification Type to drive the coloring of traps, that +is, red for critical, yellow for minor, and so on. \ No newline at end of file diff --git a/doc/source/fault/troubleshooting-log-collection.rst b/doc/source/fault/troubleshooting-log-collection.rst new file mode 100644 index 000000000..91ac87338 --- /dev/null +++ b/doc/source/fault/troubleshooting-log-collection.rst @@ -0,0 +1,99 @@ + +.. ley1552581824091 +.. _troubleshooting-log-collection: + +=========================== +Troubleshoot Log Collection +=========================== + +The |prod| log collection tool gathers detailed information. + +.. contents:: + :local: + :depth: 1 + +.. _troubleshooting-log-collection-section-N10061-N1001C-N10001: + +------------------------------ +Collect Tool Caveats and Usage +------------------------------ + +.. _troubleshooting-log-collection-ul-dpj-bxp-jdb: + +- Log in as **sysadmin**, NOT as root, on the active controller and use the + :command:`collect` command. + +- All usage options can be found by using the following command: + + .. code-block:: none + + (keystone_admin)$ collect --help + +- For |prod| Simplex or Duplex systems, use the following command: + + .. code-block:: none + + (keystone_admin)$ collect --all + +- For |prod| Standard systems, use the following commands: + + + - For a small deployment \(less than two worker nodes\): + + .. code-block:: none + + (keystone_admin)$ collect -–all + + - For large deployments: + + .. code-block:: none + + (keystone_admin)$ collect --list host1 host2 host3 + + +- For systems with an up-time of more than 2 months, use the date range options. + + Use --start-date for the collection of logs on and after a given date: + + .. code-block:: none + + (keystone_admin)$ collect [--start-date | -s] + + Use --end-date for the collection of logs on and before a given date : + + .. code-block:: none + + (keystone_admin)$ collect [--end-date | -s] + +- To prefix the collect tar ball name and easily identify the + :command:`collect` when several are present, use the following command. + + .. code-block:: none + + (keystone_admin)$ collect [--name | -n] + + For example, the following prepends **TEST1** to the name of the tarball: + + .. code-block:: none + + (keystone_admin)$ collect --name TEST1 + [sudo] password for sysadmin: + collecting data from 1 host(s): controller-0 + collecting controller-0_20200316.155805 ... done (00:01:39 56M) + creating user-named tarball /scratch/TEST1_20200316.155805.tar ... done (00:01:39 56M) + +- Prior to using the :command:`collect` command, the nodes need to be + unlocked-enabled or disabled online and are required to be unlocked at + least once. + +- Lock the node and wait for the node to reach the disabled-online state + before collecting logs for a node that is rebooting indefinitely. + +- You may be required to run the local :command:`collect` command if the + collect tool running from the active controller node fails to collect + logs from one of the system nodes. Execute the :command:`collect` command + using the console or BMC connection on the node that displays the failure. + +.. only:: partner + + .. include:: ../_includes/troubleshooting-log-collection.rest \ No newline at end of file diff --git a/doc/source/fault/unsuppressing-an-alarm-using-the-cli.rst b/doc/source/fault/unsuppressing-an-alarm-using-the-cli.rst new file mode 100644 index 000000000..ff581675e --- /dev/null +++ b/doc/source/fault/unsuppressing-an-alarm-using-the-cli.rst @@ -0,0 +1,41 @@ + +.. maj1552680619436 +.. _unsuppressing-an-alarm-using-the-cli: + +==================================== +Unsuppressing an Alarm Using the CLI +==================================== + +If you need to reactivate a suppressed alarm, you can do so using the CLI. + +.. rubric:: |proc| + +- Use the :command:`fm event-unsuppress` CLI command to unsuppress a + currently suppressed alarm. + + .. code-block:: none + + ~(keystone_admin)$ fm event-unsuppress [--nowrap] --alarm_id [,] \ + [--nopaging] [--uuid] + + where + + **** + is a comma separated list of **Alarm ID** s of alarms to unsuppress. + + **--nowrap** + disables output wrapping. + + **--nopaging** + disables paged output + + **--uuid** + includes the alarm type UUIDs in the output. + + Alarm type\(s\) with the specified will be unsuppressed. + + You can unsuppress all currently suppressed alarms using the following command: + + .. code-block:: none + + ~(keystone_admin)$ fm event-unsuppress -all [--nopaging] [--uuid] \ No newline at end of file diff --git a/doc/source/fault/viewing-active-alarms-using-horizon.rst b/doc/source/fault/viewing-active-alarms-using-horizon.rst new file mode 100644 index 000000000..6baaf884f --- /dev/null +++ b/doc/source/fault/viewing-active-alarms-using-horizon.rst @@ -0,0 +1,47 @@ + +.. sqv1552680735693 +.. _viewing-active-alarms-using-horizon: + +================================ +View Active Alarms Using Horizon +================================ + +The |prod| Horizon Web interface provides a page for viewing active alarms. + +Alarms are fault conditions that have a state; they are set and cleared by the +system as a result of monitoring and detecting a change in a fault condition. +Active alarms are alarms that are in the set condition. Active alarms typically +require user action to be cleared, for example, replacing a faulty cable, or +removing files from a nearly full filesystem, etc. + +.. note:: + For data networks and worker host data interfaces, you can also use the + Data Network Topology view to monitor active alarms. + +.. xreflink For more information, see |datanet-doc|: :ref:`The Data Network Topology View `. + +.. rubric:: |proc| + +.. _viewing-active-alarms-using-horizon-steps-n43-ssf-pkb: + +#. Select **Admin** \> **Fault Management** \> **Active Alarms** in the left pane. + + The currently Active Alarms are displayed in a table, by default sorted by + severity with the most critical alarms at the top. A color-coded summary + count of active alarms is shown at the top of the active alarm tab as well. + + You can change the sorting of entries by clicking on the column titles. + For example, to sort the table by timestamp severity, click + **Timestamp**. The entries are re-sorted by timestamp. + + Suppressed alarms are excluded by default from the table. Suppressed alarms + can be included or excluded in the table with the **Show Suppressed** and + **Hide Suppressed** filter buttons at the top right of the table. The + suppression filter buttons are only shown when one or more alarms are + suppressed. + + The **Suppression Status** column is only shown in the table when the + **Show Suppressed** filter button is selected. + +#. Click the Alarm ID of an alarm entry in the table to display the details + of the alarm. \ No newline at end of file diff --git a/doc/source/fault/viewing-active-alarms-using-the-cli.rst b/doc/source/fault/viewing-active-alarms-using-the-cli.rst new file mode 100644 index 000000000..eb50a923e --- /dev/null +++ b/doc/source/fault/viewing-active-alarms-using-the-cli.rst @@ -0,0 +1,192 @@ + +.. pdd1551804388161 +.. _viewing-active-alarms-using-the-cli: + +================================ +View Active Alarms Using the CLI +================================ + +You can use the CLI to find information about currently active system alarms. + +.. rubric:: |context| + +.. note:: + You can also use the command :command:`fm alarm-summary` to view the count + of alarms and warnings for the system. + +To review detailed information about a specific alarm instance, see + :ref:`Viewing Alarm Details Using the CLI `. + +.. rubric:: |proc| + +.. _viewing-active-alarms-using-the-cli-steps-gsj-prg-pkb: + +#. Log in with administrative privileges. + + .. code-block:: none + + $ source /etc/platform/openrc + +#. Run the :command:`fm alarm-list` command to view alarms. + + The command syntax is: + + .. code-block:: none + + fm alarm-list [--nowrap] [-q ] [--uuid] [--include_suppress] [--mgmt_affecting] [--degrade_affecting] + + **--nowrap** + Prevent word-wrapping of output. This option is useful when output will + be piped to another process. + + **-q** + is a query string to filter the list output. The typical + OpenStack CLI syntax for this query string is used. The syntax is a + combination of attribute, operator and value. For example: + severity=warning would filter alarms with a severity of warning. More + complex queries can be built. See the upstream OpenStack CLI syntax + for more details on string syntax. Also see additional query + examples below. + + You can use one of the following --query command filters to view + specific subsets of alarms, or a particular alarm: + + .. table:: + :widths: auto + + +----------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | Query Filter | Comment | + +============================================================================+============================================================================+ + | :command:`uuid=` | Query alarms by UUID, for example: | + | | | + | | .. code-block:: none | + | | | + | | ~(keystone_admin)$ fm alarm-list --query uuid=4ab5698a-19cb... | + +----------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | :command:`alarm\_id=` | Query alarms by alarm ID, for example: | + | | | + | | .. code-block:: none | + | | | + | | ~(keystone_admin)$ fm alarm-list --query alarm_id=100.104 | + +----------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | :command:`alarm\_type=` | Query alarms by type, for example: | + | | | + | | .. code-block:: none | + | | | + | | ~(keystone_admin)$ fm alarm-list --query \ | + | | alarm_type=operational-violation | + +----------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | :command:`entity\_type\_id=` | Query alarms by entity type ID, for example: | + | | | + | | .. code-block:: none | + | | | + | | ~(keystone_admin)$ fm alarm-list --query \ | + | | entity_type_id=system.host | + +----------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | :command:`entity\_instance\_id=` | Query alarms by entity instance id, for example: | + | | | + | | .. code-block:: none | + | | | + | | ~(keystone_admin)$ fm alarm-list --query \ | + | | entity_instance_id=host=worker-0 | + +----------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | :command:`severity=` | Query alarms by severity type, for example: | + | | | + | | .. code-block:: none | + | | | + | | ~(keystone_admin)$ fm alarm-list --query severity=warning | + | | | + | | The valid severity types are critical, major, minor, and warning. | + +----------------------------------------------------------------------------+----------------------------------------------------------------------------+ + + Query command filters can be combined into a single expression + separated by semicolons, as illustrated in the following example: + + .. code-block:: none + + ~(keystone_admin)$ fm alarm-list -q 'alarm_id=400.002;entity_instance_id=service_domain=controller.service_group=directory-services' + + This option indicates that all active alarms should be displayed, + including suppressed alarms. Suppressed alarms are displayed with + their Alarm ID set to S<\(alarm-id\)>. + + **--uuid** + The --uuid option on the :command:`fm alarm-list` command lists the + active alarm list with unique UUIDs for each alarm such that this + UUID can be used in display alarm details with the + :command:`fm alarm-show` command. + + **--include\_suppress** + Use this option to include suppressed alarms in the list. + + **--mgmt\_affecting** + Management affecting alarms prevent some critical administrative + actions from being performed. For example, software upgrades. Using the + --mgmt\_affecting option will list an additional column in the output, + 'Management Affecting', which indicates whether the alarm is management + affecting or not. + + **--degrade\_affecting** + Include degrade affecting status in output. + + The following example shows alarm UUIDs. + + .. code-block:: none + + ~(keystone_admin)$ fm alarm-list --uuid + +--------------+-------+------------------+---------------+----------+-----------+ + | UUID | Alarm | Reason Text | Entity ID | Severity | Time | + | | ID | | | | Stamp | + +--------------+-------+------------------+---------------+----------+-----------+ + | 6056e290- | 200. | compute-0 was | host= | warning | 2019 | + | 2e56- | 001 | administratively | compute-0 | | -08-29T | + | 4e22-b07a- | | locked to take | | | 17:00:16. | + | ff9cf4fbd81a | | it out-of | | | 363072 | + | | | -service. | | | | + | | | | | | | + | | | | | | | + | 0a8a4aec- | 100. | NTP address | host= | minor | 2019 | + | a2cb- | 114 | 2607:5300:201:3 | controller-1. | | -08-29T | + | 46aa-8498- | | is not a valid | ntp= | | 15:44:44. | + | 9ed9b6448e0c | | or a reachable | 2607:5300: | | 773704 | + | | | NTP server. | 201:3 | | | + | | | | | | | + | | | | | | | + +--------------+-------+------------------+---------------+----------+-----------+ + + This command shows a column to track the management affecting severity of each alarm type. + + .. code-block:: none + + ~(keystone_admin)$ fm alarm-list --mgmt_affecting + +-------+-------------------+---------------+----------+------------+-------------+ + | Alarm | Reason Text | Entity ID | Severity | Management | Time Stamp | + | ID | | | | Affecting | | + +-------+-------------------+---------------+----------+------------+-------------+ + | 100. | Platform Memory | host= | major | False | 2019-05-21T | + | 103 | threshold | controller-0. | | | 13:15:26. | + | | exceeded ; | numa=node0 | | | 464231 | + | | threshold 80%, | | | | | + | | actual 80% | | | | | + | | | | | | | + | 100. | Platform Memory | host= | major | False | 2019-05-21T | + | 103 | threshold | controller-0 | | | 13:15:26. | + | | exceeded ; | | | | 456738 | + | | threshold 80%, | | | | | + | | actual 80% | | | | | + | | | | | | | + | 200. | controller-0 is | host= | major | True | 2019-05-20T | + | 006 | degraded due to | controller-0. | | | 23:56:51. | + | | the failure of | process=ceph | | | 557509 | + | | its 'ceph (osd.0, | (osd.0, ) | | | | + | | )' process. Auto | | | | | + | | recovery of this | | | | | + | | major process is | | | | | + | | in progress. | | | | | + | | | | | | | + | 200. | controller-0 was | host= | warning | True | 2019-05-17T | + | 001 | administratively | controller-0 | | | 14:17:32. | + | | locked to take it | | | | 794640 | + | | out-of-service. | | | | | + | | | | | | | + +-------+-------------------+---------------+----------+------------+-------------+ \ No newline at end of file diff --git a/doc/source/fault/viewing-alarm-details-using-the-cli.rst b/doc/source/fault/viewing-alarm-details-using-the-cli.rst new file mode 100644 index 000000000..1c3c149d9 --- /dev/null +++ b/doc/source/fault/viewing-alarm-details-using-the-cli.rst @@ -0,0 +1,56 @@ + +.. kfs1580755127017 +.. _viewing-alarm-details-using-the-cli: + +================================ +View Alarm Details Using the CLI +================================ + +You can view detailed information to help troubleshoot an alarm. + +.. rubric:: |proc| + +- Use the following command to view details about an alarm. + + .. code-block:: none + + fm alarm-show + + is the ID of the alarm to query. Use the :command:`fm alarm-list` + to obtain UUIDs as described in + :ref:`Viewing Active Alarms Using the CLI `. + + .. code-block:: none + + ~(keystone_admin)$ fm alarm-show 4ab5698a-19cb-4c17-bd63-302173fef62c + +------------------------+-------------------------------------------------+ + | Property | Value | + +------------------------+-------------------------------------------------+ + | alarm_id | 100.104 | + | alarm_state | set | + | alarm_type | operational-violation | + | entity_instance_id | system=hp380-1_4.host=controller-0 | + | entity_type_id | system.host | + | probable_cause | threshold-crossed | + | proposed_repair_action | /dev/sda3 check usage | + | reason_text | /dev/sda3 critical threshold set (0.00 MB left) | + | service_affecting | False | + | severity | critical | + | suppression | True | + | timestamp | 2014-06-25T16:58:57.324613 | + | uuid | 4ab5698a-19cb-4c17-bd63-302173fef62c | + +------------------------+-------------------------------------------------+ + + The pair of attributes **\(alarm\_id, entity\_instance\_id\)** uniquely + identifies an active alarm: + + **alarm\_id** + An ID identifying the particular alarm condition. Note that there are + some alarm conditions, such as *administratively locked*, that can be + raised by more than one entity-instance-id. + + **entity\_instance\_id** + Type and instance information of the object raising the alarm. A + period-separated list of \(key, value\) pairs, representing the + containment structure of the overall entity instance. This structure + is used for processing hierarchical clearing of alarms. \ No newline at end of file diff --git a/doc/source/fault/viewing-suppressed-alarms-using-the-cli.rst b/doc/source/fault/viewing-suppressed-alarms-using-the-cli.rst new file mode 100644 index 000000000..994f309fc --- /dev/null +++ b/doc/source/fault/viewing-suppressed-alarms-using-the-cli.rst @@ -0,0 +1,49 @@ + +.. ohs1552680649558 +.. _viewing-suppressed-alarms-using-the-cli: + +==================================== +View Suppressed Alarms Using the CLI +==================================== + +Alarms may be suppressed. List them to determine if any need to be unsuppressed +or otherwise managed. + +.. rubric:: |proc| + +.. _viewing-suppressed-alarms-using-the-cli-steps-hyn-g1x-nkb: + +- Use the :command:`fm event-suppress-list` CLI command to view a list of + all currently suppressed alarms. + + This command shows all alarm IDs along with their suppression status. + + .. code-block:: none + + ~(keystone_admin)$ fm event-suppress-list [--nopaging] [--uuid] [--include-unsuppressed] + + where + + **--nopaging** + disables paged output, see :ref:`CLI Commands and Paged Output ` + + **--uuid** + includes the alarm type UUIDs in the output + + **--include-unsuppressed** + includes unsuppressed alarm types in the output. By default only + suppressed alarm types are shown. + + For example: + + .. code-block:: none + + [sysadmin@controller-0 ~(keystone_admin)] fm event-suppress-list + +----------+-------------+ + | Event ID | Status | + +----------+-------------+ + | 100.101 | suppressed | + | 100.103 | suppressed | + | 100.105 | suppressed | + | ... | ... | + +----------+-------------+ \ No newline at end of file diff --git a/doc/source/fault/viewing-the-event-log-using-horizon.rst b/doc/source/fault/viewing-the-event-log-using-horizon.rst new file mode 100644 index 000000000..2b695f77a --- /dev/null +++ b/doc/source/fault/viewing-the-event-log-using-horizon.rst @@ -0,0 +1,55 @@ + +.. ubf1552680722858 +.. _viewing-the-event-log-using-horizon: + +================================ +View the Event Log Using Horizon +================================ + +The |prod| Horizon Web interface provides a convenient way to work with +historical alarms, and customer logs. + +.. rubric:: |context| + +The event log consolidates historical alarms events, that is, the sets and +clears of alarms that have occurred in the past, and customer logs. + +Customer logs capture important system events and provide useful information +to the administrator for the purposes of overall fault management. Customer +log events do not have a state and do not typically require administrator +actions, for example, they may be reporting a failed login attempt or the fact +that a container was evacuated to another host. + +Customer logs and historical alarms' set and clear actions are held in a +buffer, with older entries discarded as needed to release logging space. + +.. rubric:: |proc| + +#. Select **Admin** \> **Fault Management** \> **Events** in the left pane. + + The Events window appears. By default, the Events screen shows all events, + including both historical set/clear alarms and logs, with the most recent + events at the top. + +#. Use the filter selections from the search field to select the information + you want to view. + + Use the **All Events**, **Alarm Events** and **Log Events** filter buttons + to select all events, only historical alarms set/clear events or only + customer log events to be displayed. By default, all events are displayed. + Suppressed events are by default excluded from the table. Suppressed events + can be included or excluded in the table with the **Show Suppressed and Hide + Suppressed** filter buttons at the top right of table. The suppression filter + buttons are only shown when one or more events are suppressed. + + The **Suppression Status** column is only shown in the table when + **Show Suppressed** filter button is selected. + + .. image:: figures/psa1567524091300.png + + You can sort the entries by clicking on the column titles. For example, to + sort the view of the entries by severity, click **Severity**; the entries + are resorted and grouped by severity. + +#. Click the arrow to the left of an event entry in the table for an expanded + view of event details. \ No newline at end of file diff --git a/doc/source/fault/viewing-the-event-log-using-the-cli.rst b/doc/source/fault/viewing-the-event-log-using-the-cli.rst new file mode 100644 index 000000000..5ee0ceacf --- /dev/null +++ b/doc/source/fault/viewing-the-event-log-using-the-cli.rst @@ -0,0 +1,183 @@ + +.. fcv1552680708686 +.. _viewing-the-event-log-using-the-cli: + +================================ +View the Event Log Using the CLI +================================ + +You can use CLI commands to work with historical alarms and logs in the event log. + +.. rubric:: |proc| + +.. _viewing-the-event-log-using-the-cli-steps-v3r-stf-pkb: + +#. Log in with administrative privileges. + + .. code-block:: none + + $ source /etc/platform/openrc + +#. Use the :command:`fm event-list` command to view historical alarms' + sets/clears and logs. By default, only unsuppressed events are shown. + + For more about event suppression, see + :ref:`Events Suppression Overview `. + + The syntax of the command is: + + .. code-block:: none + + fm event-list [-q ] [-l ] [--alarms] [--logs] [--include_suppress] + + Optional arguments: + + **-q QUERY, --query QUERY** + \- key\[op\]data\_type::value; list. data\_type is optional, but if + supplied must be string, integer, float, or boolean. + + **-l NUMBER, --limit NUMBER** + Maximum number of event logs to return. + + **--alarms** + Show historical alarms set/clears only. + + **--logs** + Show customer logs only. + + **--include\_suppress** + Show suppressed alarms as well as unsuppressed alarms. + + **--uuid** + Include the unique event UUID in the listing such that it can be used + in displaying event details with :command:`fm event-show` . + + **-nopaging** + Disable output paging. + + For details on CLI paging, see + :ref:`CLI Commands and Paged Output `. + + For example: + + .. code-block:: none + + [sysadmin@controller-0 ~(keystone_admin)]$ fm event-list -l 5 + +-----------+-----+-----+--------------------+-----------------+---------+ + |Time Stamp |State|Event|Reason Text |Entity Instance |Severity | + | | |Log | |ID | | + | | |ID | | | | + +-----------+-----+-----+--------------------+-----------------+---------+ + |2019-05-21T| set |100. |Platform Memory |host=controller-0|major | + | 13:15:26. | |103 |threshold exceeded ;|numa=node0 | | + | 464231 | | |threshold 80%,actual| | | + | | | |80% | | | + | | | | | | | + |2019-05-21T| set | 100.|Platform Memory |host=controller-0|major | + | 13:15:26. | | 103 |threshold exceeded; | | | + | 456738 | | |threshold 80%,actual| | | + | | | |80% | | | + | | | | | | | + |2019-05-21T|clear| 100.|Platform Memory |host=controller-0|major | + | 13:07:26. | | 103 |threshold exceeded; |numa=node0 | | + | 658374 | | |threshold 80%,actual| | | + | | | |79% | | | + | | | | | | | + |2019-05-21T|clear| 100.|Platform Memory |host=controller-0|major | + | 13:07:26. | | 103 |threshold exceeded; | | | + | 656608 | | |threshold 80%,actual| | | + | | | |79% | | | + | | | | | | | + |2019-05-21T| set | 100 |Platform Memory |host=controller-0|major | + | 13:05:26. | | 103 |threshold exceeded; |numa=node0 | | + | 481240 | | |threshold 80%,actual| | | + | | | |79% | | | + | | | | | | | + +-----------+-----+-----+--------------------+-----------------+---------+ + + .. note:: + You can also use the --nopaging option to avoid paging long event + lists. + + In the following example, the :command:`fm event-list` command shows + alarms only; the **State** column indicates either **set** or **clear**. + + .. code-block:: none + + [sysadmin@controller-0 ~(keystone_admin)]$ fm event-list -l 5 --alarms + +-------------+-------+-------+--------------------+---------------+----------+ + | Time Stamp | State | Event | Reason Text | Entity | Severity | + | | | Log | | Instance ID | | + | | | ID | | | | + +-------------+-------+-------+--------------------+---------------+----------+ + | 2019-05-21T | set | 100. | Platform Memory | host= | major | + | 13:15:26. | | 103 | threshold exceeded | controller-0. | | + | 464231 | | | ; threshold 80%, | numa=node0 | | + | | | | actual 80% | | | + | | | | | | | + | 2019-05-21T | set | 100. | Platform Memory | host= | | + | 13:15:26. | | 103 | threshold exceeded | controller-0 | major | + | 456738 | | | ; threshold 80%, | | | + | | | | actual 80% | | | + | | | | | | | + | 2019-05-21T | clear | 100. | Platform Memory | host= | | + | 13:07:26. | | 103 | threshold exceeded | controller-0. | major | + | 658374 | | | ; threshold 80%, | numa=node0 | | + | | | | actual 79% | | | + | | | | | | | + | 2019-05-21T | clear | 100. | Platform Memory | host= | | + | 13:07:26. | | 103 | threshold exceeded | controller-0 | major | + | 656608 | | | ; threshold 80%, | | | + | | | | actual 79% | | | + | | | | | | | + | 2019-05-21T | set | 100. | Platform Memory | host= | | + | 13:05:26. | | 103 | threshold exceeded | controller-0. | major | + | 481240 | | | ; threshold 80%, | numa=node0 | | + | | | | actual 79% | | | + | | | | | | | + +-------------+-------+-------+--------------------+---------------+----------+ + + + In the following example, the :command:`fm event-list` command shows logs + only; the **State** column indicates **log**. + + .. code-block:: none + + [sysadmin@controller-0 ~(keystone_admin)]$ fm event-list -l 5 --logs + +-------------+-------+-------+---------------------+---------------+----------+ + | Time Stamp | State | Event | Reason Text | Entity | Severity | + | | | Log | | Instance ID | | + | | | ID | | | | + +-------------+-------+-------+---------------------+---------------+----------+ + | 2019-05-21T | log | 700. | Exited Multi-Node | subsystem=vim | critical | + | 00:50:29. | | 217 | Recovery Mode | | | + | 525068 | | | | | | + | | | | | | | + | 2019-05-21T | log | 700. | Entered Multi-Node | subsystem=vim | critical | + | 00:49:49. | | 216 | Recovery Mode | | | + | 979021 | | | | | | + | | | | | | | + | 2019-05-21T | log | 401. | Service group vim- | service | | + | 00:49:31. | | 002 | services redundancy | _domain= | critical | + | 205116 | | | restored | controller. | | + | | | | | service_group | | + | | | | | =vim- | | + | | | | | services | | + | | | | | | | + | 2019-05-21T | log | 401. | Service group vim- | service | | + | 00:49:30. | | 001 | services state | _domain= | critical | + | 003221 | | | change from go- | controller. | | + | | | | active to active on | service_group | | + | | | | host controller-0 | =vim-services | | + | | | | | .host= | | + | | | | | controller-0 | | + | | | | | | | + | 2019-05-21T | log | 401. | Service group | service | | + | 00:49:29. | | 002 | controller-services | _domain= | critical | + | 950524 | | | redundancy restored | controller. | | + | | | | | service | | + | | | | | _group= | | + | | | | | controller | | + | | | | | -services | | + | | | | | | | + +-------------+-------+-------+---------------------+---------------+----------+ \ No newline at end of file diff --git a/doc/source/index.rst b/doc/source/index.rst index 50ededd7d..ccf6d0063 100755 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -57,6 +57,15 @@ Configuration configuration/index +---------------- +Fault Management +---------------- + +.. toctree:: + :maxdepth: 2 + + fault/index + ---------------- Operation guides ---------------- @@ -91,18 +100,13 @@ General information Governance ---------- -StarlingX is a top-level Open Infrastructure Foundation confirmed project that -is governed by two separate bodies: The `Open Infrastructure Foundation Board of -Directors`_ and the `StarlingX Technical Steering Committee`_. +StarlingX is a top-level OpenStack Foundation pilot project that is governed by +two separate bodies: The `OpenStack Foundation Board of Directors`_ and the +`StarlingX Technical Steering Committee`_. See `StarlingX Governance`_ for additional information about StarlingX project governance. -.. _`Open Infrastructure Foundation Board of Directors`: https://openinfra.dev/about/board/ +.. _`OpenStack Foundation Board of Directors`: https://wiki.openstack.org/wiki/Governance/Foundation .. _`StarlingX Technical Steering Committee`: https://docs.starlingx.io/governance/reference/tsc/ -.. _`StarlingX Governance`: https://docs.starlingx.io/governance/ - - - - - +.. _`StarlingX Governance`: https://docs.starlingx.io/governance/ \ No newline at end of file