CEPH-PROMETHEUS-ALERT-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, enterprises, TimeTicks
        FROM SNMPv2-SMI
    DisplayString
        FROM SNMPv2-TC
;

ceph       OBJECT IDENTIFIER ::= { enterprises 50495 }
prometheus OBJECT IDENTIFIER ::= { ceph 15 }

prometheusAlert MODULE-IDENTITY
    LAST-UPDATED "201904010000Z" -- 1. Apr 2019
    ORGANIZATION "The Ceph Project"
    CONTACT-INFO "https://ceph.com"
    DESCRIPTION  "Prometheus Alert SNMP MIB"
    REVISION     "201904010000Z" -- 1. Apr 2019
    DESCRIPTION  "Initial version."
    ::= { prometheus 1 }

prometheusAlertObjects OBJECT IDENTIFIER ::= { prometheusAlert 1 }
prometheusAlertTraps   OBJECT IDENTIFIER ::= { prometheusAlert 2 }

--
-- Objects
--

prometheusAlertNotificationAlertName OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "The name of the Prometheus alert."
::= { prometheusAlertObjects 1 }

prometheusAlertNotificationStatus OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "The status of the Prometheus alert."
::= { prometheusAlertObjects 2 }

prometheusAlertNotificationSeverity OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "The severity of the Prometheus alert."
::= { prometheusAlertObjects 3 }

prometheusAlertNotificationInstance OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Unique identifier for the Prometheus instance."
::= { prometheusAlertObjects 4 }

prometheusAlertNotificationJob OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "The name of the Prometheus job."
::= { prometheusAlertObjects 5 }

prometheusAlertNotificationDescription OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "The Prometheus alert description field."
::= { prometheusAlertObjects 6 }

prometheusAlertNotificationLabels OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Additional Prometheus alert labels as JSON string."
::= { prometheusAlertObjects 7 }

prometheusAlertNotificationTimestamp OBJECT-TYPE
    SYNTAX      TimeTicks
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "The time when the Prometheus alert occurred."
::= { prometheusAlertObjects 8 }

prometheusAlertNotificationRawData OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "The raw Prometheus alert as JSON string."
::= { prometheusAlertObjects 9 }

--
-- Traps
--

prometheusAlertTrapDefault NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "Default trap."
::= { prometheusAlertTraps 1 }

prometheusAlertClusterHealthTraps OBJECT IDENTIFIER ::= { prometheusAlertTraps 2 }
prometheusAlertMonTraps           OBJECT IDENTIFIER ::= { prometheusAlertTraps 3 }
prometheusAlertOsdTraps           OBJECT IDENTIFIER ::= { prometheusAlertTraps 4 }
prometheusAlertMdsTraps           OBJECT IDENTIFIER ::= { prometheusAlertTraps 5 }
prometheusAlertMgrTraps           OBJECT IDENTIFIER ::= { prometheusAlertTraps 6 }
prometheusAlertPgsTraps           OBJECT IDENTIFIER ::= { prometheusAlertTraps 7 }
prometheusAlertNodesTraps         OBJECT IDENTIFIER ::= { prometheusAlertTraps 8 }
prometheusAlertPoolsTraps         OBJECT IDENTIFIER ::= { prometheusAlertTraps 9 }

prometheusAlertClusterHealthTrapHealthError NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "Ceph in health_error state for more than 5m."
::= { prometheusAlertClusterHealthTraps 1 }

prometheusAlertClusterHealthTrapHealthWarn NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "Ceph in health_warn for more than 15m."
::= { prometheusAlertClusterHealthTraps 2 }

prometheusAlertMonTrapLowMonitorQuorumCount NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "Monitor count in quorum is low."
::= { prometheusAlertMonTraps 1 }

prometheusAlertOsdTrap10PercentOsdsDown NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "More than 10% of OSDs are down."
::= { prometheusAlertOsdTraps 1 }

prometheusAlertOsdTrapOsdDown NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "One or more OSDs down for more than 15 minutes."
::= { prometheusAlertOsdTraps 2 }

prometheusAlertOsdTrapOsdsNearFull NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "An OSD is dangerously full, over 80%."
::= { prometheusAlertOsdTraps 3 }

prometheusAlertOsdTrapFlapOsd NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "An OSD was marked down at back up at least once a minute for 5 minutes."
::= { prometheusAlertOsdTraps 4 }

prometheusAlertOsdTrapHighPgCountDeviation NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "An OSD deviates by more then 30% from average PG count."
::= { prometheusAlertOsdTraps 5 }

prometheusAlertPgsTrapPgsInactive NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "One or more PGs are inactive for more than 5 minutes."
::= { prometheusAlertPgsTraps 1 }

prometheusAlertPgsTrapPgsUnclean NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "One or more PGs are not clean for more than 15 minutes."
::= { prometheusAlertPgsTraps 2 }

prometheusAlertNodesTrapRootVolumeFull NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "Root volume (OSD and MON store) is dangerously full (< 5% free)."
::= { prometheusAlertNodesTraps 1 }

prometheusAlertNodesTrapNetworkPacketsDropped NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "A node experiences packet drop > 1 packet/s on an interface."
::= { prometheusAlertNodesTraps 2 }

prometheusAlertNodesTrapNetworkPacketErrors NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "A node experiences packet errors > 1 packet/s on an interface."
::= { prometheusAlertNodesTraps 3 }

prometheusAlertNodesTrapStorageFilling NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "A mountpoint will be full in less then 5 days assuming the average fillup rate of the past 48 hours."
::= { prometheusAlertNodesTraps 4 }

prometheusAlertPoolsTrapPoolFull NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "A pool is at 90% capacity or over."
::= { prometheusAlertPoolsTraps 1 }

prometheusAlertPoolsTrapPoolFillingUp NOTIFICATION-TYPE
    OBJECTS     {
                    prometheusAlertNotificationAlertName,
                    prometheusAlertNotificationStatus,
                    prometheusAlertNotificationSeverity,
                    prometheusAlertNotificationInstance,
                    prometheusAlertNotificationJob,
                    prometheusAlertNotificationDescription,
                    prometheusAlertNotificationLabels,
                    prometheusAlertNotificationTimestamp,
                    prometheusAlertNotificationRawData
                }
    STATUS      current
    DESCRIPTION "A pool will be full in less then 5 days assuming the average fillup rate of the past 48 hours."
::= { prometheusAlertPoolsTraps 2 }

END
