The Redfish® Event Service
Redfish standardizes an event subscription service that enables monitoring applications to receive notifications when the REST data changes or when certain alerts occur. These notifications are HTTPS POST operations sent to a listener URL of your choice.
The EventService
resource type is located in the Redfish data model at /redfish/v1/EventService/
. This resource includes a link to the collection of subscriptions referred as EventDestinationCollection
and located at the /redfish/v1/EventService/Subscriptions
URI.
Event subscription
In order to receive events, you must identify the URL of an HTTPS server accepting POST requests and accessible to the BMC management network. Event POST operations generated by the BMC will be sent to this event listener URL after successful subscription.
TIP
If needed, The DMTF provides a Redfish Event Listener on GitHub.
To subscribe to an event, you need to construct a JSON object and POST it to the EventDestinationCollection
URI of the managed BMC. Upon success, you receive an HTTP 201 Created response and a new subscription has been added in the collection.
NOTE
Most of the BMC Redfish event services (including iLO and OpenBMC) does not test the event listener destination URL during the subscription phase. It is your responsibility to verify that the BMC can post HTTPS requests in the listener destination.
The following example creates an event subscription in an iLO 6, with the Destination
and Context
properties as the only properties part of the request body. If not provided, the default value for EventFormatType
is set to Event
. Use the MetricReport
value when subscribing to metric reports.
POST /redfish/v1/EventService/Subscriptions/
{
"Destination": "https://{{EventListener}}/path/to/listener.app",
"Context": "Some context"
}
{
"error": {
"code": "iLO.0.10.ExtendedInfo",
"message": "See @Message.ExtendedInfo for more information.",
"@Message.ExtendedInfo": [
{
"MessageId": "Base.1.17.Created"
}
]
}
}
NOTE
If the creation request does not provide any value for the RegistryPrefixes
and the Oem
resources, the Redfish service may fill them up with default values. This is the case for HPE iLO 6; the previous example does not provide any detail concerning the subscription but RegisryPrefixes
and Oem/Hpe
objects have been automatically supplied by the service. Refer to the response body of the following example.
Once the subscription is created, its URI appears in the EventDestinationCollection
collection. The following example retrieves the subscription entry created by the previous example.
GET /redfish/v1/EventService/Subscriptions/{item}/
{
"@odata.context": "/redfish/v1/$metadata#EventDestination.EventDestination",
"@odata.etag": "W/\"F8B2DF36\"",
"@odata.id": "/redfish/v1/EventService/Subscriptions/2/",
"@odata.type": "#EventDestination.v1_13_0.EventDestination",
"Id": "2",
"Context": "Some context",
"Description": "iLO Event Subscription",
"Destination": "https://10.124.107.98/path/to/listener.app",
"EventFormatType": "Event",
"HttpHeaders": [],
"MetricReportDefinitions": [],
"Name": "Event Subscription",
"Oem": {
"Hpe": {
"@odata.context": "/redfish/v1/$metadata#HpeEventDestination.HpeEventDestination",
"@odata.type": "#HpeEventDestination.v2_1_0.HpeEventDestination",
"DeliveryRetryAttempts": 3,
"DeliveryRetryIntervalInSeconds": 30,
"MutualAuthenticationEnabled": false,
"RequestedMaxEventsToQueue": 3,
"RetireOldEventInMinutes": 10
}
},
"Protocol": "Redfish",
"RegistryPrefixes": [
"NetworkDevice",
"StorageDevice",
"ResourceEvent",
"iLOEvents",
"iLOResourceEvents"
],
"SubscriptionType": "RedfishEvent"
}
The RegistryPrefixes
property is a list of message registry prefixes to subscribe to. They correspond to the prefix of the error messages of the form <RegistryPrefix>.<MajorVersion>.<MinorVersion>.<MessageKey>
.
If you subscribe to the the StorageDevice
registry prefix, the destination event listener will receive all the error messages starting with "StorageDevice". Refer to the Event interpretation paragraph for more information.
The following example retrieves the list of possible RegistryPrefixes from an HPE iLO 6.
GET /redfish/v1/EventService/?$select=RegistryPrefixes
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest get RegistryPrefixes --json --selector EventService.
ilorest logout
{
"@odata.context": "/redfish/v1/$metadata#EventService.EventService",
"@odata.etag": "W/\"3015330F\"",
"@odata.id": "/redfish/v1/EventService/",
"@odata.type": "#EventService.v1_7_2.EventService",
"RegistryPrefixes": [
"iLOEvents",
"ResourceEvent",
"NetworkDevice",
"StorageDevice",
"iLOResourceEvents"
]
}
The following example retrieves the list of event subscriptions from an HPE iLO 6.
GET /redfish/v1/EventService/Subscriptions/
{
"@odata.context": "/redfish/v1/$metadata#EventDestinationCollection.EventDestinationCollection",
"@odata.etag": "W/\"AA6D42B0\"",
"@odata.id": "/redfish/v1/EventService/Subscriptions/",
"@odata.type": "#EventDestinationCollection.EventDestinationCollection",
"Description": "iLO User Event Subscriptions",
"Name": "EventSubscriptions",
"Members": [
{
"@odata.id": "/redfish/v1/EventService/Subscriptions/6/"
}
],
"Members@odata.count": 1
}
The following example shows an event subscription with specific HttpHeaders
and Context
properties. The HttpHeaders
property contains a list of HTTP headers that the Redfish service will use when sending events to the event listener. This property could be used to perform an authentication in the event listener.
NOTE
The Redfish specification advises to return an empty HttpHeaders
array upon GET requests of subscription details. Refer to the Subscription detail tabulation of the following example.
The Context
property is a string that will be part of the event sent to the listener. With this information the listener could dispatch the event to a specific service able to act accordingly.
POST /redfish/v1/EventService/Subscriptions/
{
"Destination": "https://{{EventListener}}/",
"Context": "Some context",
"RegistryPrefixes": [
"StorageDevice",
"NetworkDevice",
"iLOEvents",
"ResourceEvent"
],
"HttpHeaders":{
"Header1": "HeaderValue1",
"Header2": "HeaderValue2"
}
}
{
"@odata.context": "/redfish/v1/$metadata#EventDestination.EventDestination",
"@odata.etag": "W/\"71734713\"",
"@odata.id": "/redfish/v1/EventService/Subscriptions/3/",
"@odata.type": "#EventDestination.v1_13_0.EventDestination",
"Id": "3",
"Context": "Some context",
"Description": "iLO Event Subscription",
"Destination": "https://192.168.1.46/",
"EventFormatType": "Event",
"HttpHeaders": [],
"MetricReportDefinitions": [],
"Name": "Event Subscription",
"Oem": {
"Hpe": {
"@odata.context": "/redfish/v1/$metadata#HpeEventDestination.HpeEventDestination",
"@odata.type": "#HpeEventDestination.v2_1_0.HpeEventDestination",
"DeliveryRetryAttempts": 3,
"DeliveryRetryIntervalInSeconds": 30,
"MutualAuthenticationEnabled": false,
"RequestedMaxEventsToQueue": 3,
"RetireOldEventInMinutes": 10
}
},
"Protocol": "Redfish",
"RegistryPrefixes": [
"StorageDevice",
"NetworkDevice",
"iLOEvents",
"ResourceEvent"
],
"SubscriptionType": "RedfishEvent"
}
TIP
More event examples are presented in the HPE iLO specific supplement documents.
Testing the Event service
The Redfish Event Service offers the possibility to trigger test events from managed BMCs. The following test event, with MessageId
containing iLOResourceEvents
, will be forwarded to all the subscription destinations having iLOResourceEvents
in its RegistryPrefixes
list. Refer to the next paragraph for the interpretation of this event.
POST /redfish/v1/EventService/Actions/EventService.SubmitTestEvent
{
"EventID": "myEventId",
"EventTimestamp": "2023-02-13T14:49:20Z",
"Severity": "Warning",
"Message": "This is a test event message",
"MessageId": "iLOResourceEvents.1.3.DrvArrLogDrvErasing",
"MessageArgs": [ "1", "slot 3" ],
"OriginOfCondition": "/redfish/v1/Systems/1/Storage"
}
{
"error": {
"code": "iLO.0.10.ExtendedInfo",
"message": "See @Message.ExtendedInfo for more information.",
"@Message.ExtendedInfo": [
{
"MessageId": "Base.1.12.Success"
}
]
}
}
Event interpretation
When an event occurs in a server, a MessageId
property is associated to it. Its value is a message reference (i.e. iLOResourceEvents.1.3.DrvArrLogDrvErasing
) described in the message registry. Only event destinations containing the message registry prefix of the MessageId
property are notified. Upon reception, they can consult the related message registry file to get more detail and optionally resolution actions.
TIP
Registry file URIs are listed in the MessageRegistryFileCollection
collection at /redfish/v1/Registries
.
Upon reception of an event, the event listener can use the prefix of the MessageId
property to retrieve the URI of the corresponding message registry URI. In the test event example above, the message registry prefix contained in the MessageId
property is iLOResourceEvents
. A GET of /redfish/v1/registries/iLOResourceEvents
leads to /redfish/v1/RegistryStore/registries/en/iLOResourceEvents.json
. A GET of this URI retrieves the entire message registry. This file contains an entry for the DrvArrLogDrvErasing
error message.
Refer to the Error responses section for more information on this subject.