To generate a service account token please refer to the authentication chapter.
jq can be used to easily format and parse the outputs.
Events
Get all active events
curl
curl -sS -kX GET --header 'Accept: application/json' 'https://192.0.2.33/api/resources/event/v1/Event/all' -b access_token=`cat token.tok`
cvprac
event_url = '/api/resources/event/v1/Event/all'
response = client.get(event_url)
python requests
def get_events_all():
event_url = '/api/resources/event/v1/Event/all'
url = cvp_url + event_url
head = {'Authorization': 'Bearer {}'.format(token)}
response = requests.get(url, headers=head, verify=False)
print(response.text)
get_events_all()
Get a specific event
curl
curl -sS -kX GET --header 'Accept: application/json' -b access_token=`cat token.tok` 'https://192.0.2.33/api/resources/event/v1/Event?key.key=6152f6160fc38f55&key.timestamp=2021-03-23T13:38:59.295341290Z'
Result:
{
"value":{
"key":{
"key":"6152f6160fc38f55",
"timestamp":"2021-03-23T13:38:59.295341290Z"
},
"severity":"EVENT_SEVERITY_ERROR",
"title":"Low Disk Volume Space Available",
"description":"Detected low disk space on volume /mnt/flash, 93.46756% of space used",
"eventType":"LOW_DEVICE_DISK_SPACE",
"data":{
"data":{
"deviceId":"JPE15233329",
"threshold":"90",
"value":"93.46756",
"volume":"/mnt/flash"
}
},
"components":{
"components":[
{
"type":"COMPONENT_TYPE_DEVICE",
"components":{
"deviceId":"JPE15233329"
}
}
]
}
},
"time":"2021-03-25T14:37:00Z"
}
The time
key here shows the state of the resource at a given time,
key.timestmap
is part of the key for that an event.
cvprac
event_url = '/api/resources/event/v1/Event?'
url = event_url + 'key.key=' + key + "&key.timestamp=" + ts
response = client.get(url)
python requests
def get_event(key, ts):
event_url = '/api/resources/event/v1/Event?'
url = cvp_url + event_url + 'key.key=' + key + "&key.timestamp=" + ts
head = {'Authorization': 'Bearer {}'.format(token)}
response = requests.get(url, headers=head, verify=False)
print(response.text)
get_event("bf931ff01f5c5a2","2021-04-01T18:14:53Z")
Get events between two dates
When fetching a state from NetDB between two arbitrary dates, the result returned will contain data that existed between those two dates and not just data that was created between those dates. For instance if BGP events are queried between 2021-03-24 09:00 and 2021-03-24 10:00 the result will contain events that were active in the range of 9 AM to 10 AM. If there were events that started before 9 AM and were not resolved (still active) at that time, the result will contain those events too.
curl
curl -sS -kX GET --header 'Accept: application/json' -b access_token=`cat token.tok` 'https://192.0.2.33/api/resources/event/v1/Event/all?time.start=2021-03-24T09:00:00Z&time.end=2021-03-24T10:00:00Z'
Result:
{
"result": {
"value": {
"key": {
"key": "6a5eea29e5599b0",
"timestamp": "2021-02-04T23:19:22.809962243Z"
},
"severity": "EVENT_SEVERITY_WARNING",
"title": "Interface went down unexpectedly",
"description": "Interface Ethernet1 on JPE19332824 is no longer operationally active",
"eventType": "DEVICE_INTF_ERR_SMART",
"data": {
"data": {
"deviceId": "JPE19332824",
"interfaceId": "Ethernet1"
}
},
"components": {
"components": [
{
"type": "COMPONENT_TYPE_INTERFACE",
"components": {
"deviceId": "JPE19332824",
"interfaceId": "Ethernet1"
}
}
]
}
},
"time": "2021-02-04T23:19:22.809962243Z",
"type": "INITIAL"
}
}
{
"result": {
"value": {
"key": {
"key": "6acbaa29e5b6002",
"timestamp": "2021-02-04T23:19:22.819264873Z"
},
"severity": "EVENT_SEVERITY_WARNING",
"title": "Interface went down unexpectedly",
"description": "Interface Ethernet3 on JPE19332824 is no longer operationally active",
"eventType": "DEVICE_INTF_ERR_SMART",
"data": {
"data": {
"deviceId": "JPE19332824",
"interfaceId": "Ethernet3"
}
},
"components": {
"components": [
{
"type": "COMPONENT_TYPE_INTERFACE",
"components": {
"deviceId": "JPE19332824",
"interfaceId": "Ethernet3"
}
}
]
}
}
cvprac
event_url = '/api/resources/event/v1/Event/all?'
url = event_url + 'time.start=' + t1 + "&time.end=" + t2
response = client.get(url)
python requests
def get_events_t1_t2(t1, t2):
event_url = '/api/resources/event/v1/Event/all?'
url = cvp_url + event_url + 'time.start=' + t1 + "&time.end=" + t2
head = {'Authorization': 'Bearer {}'.format(token)}
response = requests.get(url, headers=head, verify=False)
print(response.text)
get_events_t1_t2("2021-03-24T09:00:00Z", "2021-03-24T10:00:00Z")
Get all INFO severity events
To apply filters on events, the POST method has to be used.
curl
curl -sS -kX POST --header 'Accept: application/json' -b access_token=`cat token.tok` -d '{"partialEqFilter": [{"severity": 1}]}' 'https://192.0.2.33/api/resources/event/v1/Event/all'
Result:
{
"result": {
"value": {
"key": {
"key": "571d021ba26bbb96",
"timestamp": "2020-12-11T10:35:00Z"
},
"severity": "EVENT_SEVERITY_INFO",
"title": "High PTP skew",
"description": "Detected high PTP skew (0)",
"eventType": "HIGH_PTP_SKEW",
"data": {
"data": {
"deviceId": "JPE15233329",
"discovered": "true",
"threshold": "0.9",
"value": "0"
}
},
"components": {
"components": [
{
"components": {
"deviceId": "JPE15233329"
}
}
]
}
},
"time": "2020-12-11T10:35:00Z",
"type": "INITIAL"
}
}
curl -sS -kX POST --header 'Accept: application/json' -b access_token=`cat token.tok` -d '{"partialEqFilter": [{"severity": "EVENT_SEVERITY_INFO"}]}' 'https://192.0.2.33/api/resources/event/v1/Event/all'
curl -sS -kX POST --header 'Accept: application/json' -b access_token=`cat token.tok` -d '{"partial_eq_filter": [{"severity": 1}]}' 'https://192.0.2.33/api/resources/event/v1/Event/all'
cvprac
severity = 1 ## Severity INFO
payload = {"partialEqFilter": [{"severity": severity }]}
event_url = '/api/resources/event/v1/Event/all'
response = client.post(event_url, data=payload)
python requests
def get_events_by_severity(severity):
payload = {"partialEqFilter": [{"severity": severity }]}
event_url = '/api/resources/event/v1/Event/all'
url = cvp_url + event_url
head = {'Authorization': 'Bearer {}'.format(token)}
response = requests.post(url, headers=head, data=json.dumps(payload), verify=False)
print(response.text)
# Get with string value
get_events_by_severity("EVENT_SEVERITY_INFO")
# Get with enum value
get_events_by_severity(1)
Get specific event types
curl
curl -sS -kX POST --header 'Accept: application/json' -b access_token=`cat token.tok` -d '{"partialEqFilter": [{"eventType":"LOW_DEVICE_DISK_SPACE"}]}' 'https://192.0.2.33/api/resources/event/v1/Event/all'
Result:
{
"result": {
"value": {
"key": {
"key": "6152f6160fc38f55",
"timestamp": "2021-03-23T13:38:59.295341290Z"
},
"severity": "EVENT_SEVERITY_ERROR",
"title": "Low Disk Volume Space Available",
"description": "Detected low disk space on volume /mnt/flash, 93.46756% of space used",
"eventType": "LOW_DEVICE_DISK_SPACE",
"data": {
"data": {
"deviceId": "JPE15233329",
"threshold": "90",
"value": "93.46756",
"volume": "/mnt/flash"
}
},
"components": {
"components": [
{
"type": "COMPONENT_TYPE_DEVICE",
"components": {
"deviceId": "JPE15233329"
}
}
]
}
},
"time": "2021-03-23T13:38:59.295341290Z",
"type": "INITIAL"
}
}
cvprac
etype = "LOW_DEVICE_DISK_SPACE"
payload = {"partialEqFilter": [{"eventType": etype }]}
get_events_by_type = clnt.post(event_url, data=payload)
print(get_events_by_type)
python requests
def get_events_by_type(etype):
payload = {"partialEqFilter": [{"eventType": etype }]}
event_url = '/api/resources/event/v1/Event/all'
url = cvp_url + event_url
head = {'Authorization': 'Bearer {}'.format(token)}
response = requests.post(url, headers=head, data=json.dumps(payload), verify=False)
print(response.text)
get_events_by_type("LOW_DEVICE_DISK_SPACE")
Get all Low device disk space events with ERROR severity
The Low Disk Volume Space Available
events have two default rules (custom rules can be added):
- generate a WARNING event if a partition on EOS goes above 80%
- generate an ERROR event if a partition on EOS goes above 90%
To get only the ERROR events we can add the severity
key to our filter.
curl
curl -sS -kX POST --header 'Accept: application/json' -b access_token=`cat token.tok` -d '{"partialEqFilter": [{"eventType":"LOW_DEVICE_DISK_SPACE","severity":"EVENT_SEVERITY_ERROR"}]}' 'https://192.0.2.33/api/resources/event/v1/Event/all'
Result:
{
"result": {
"value": {
"key": {
"key": "6152f6160fc38f55",
"timestamp": "2021-04-06T19:39:29.307757986Z"
},
"severity": "EVENT_SEVERITY_ERROR",
"title": "Low Disk Volume Space Available",
"description": "Detected low disk space on volume /mnt/flash, 93.46767% of space used",
"eventType": "LOW_DEVICE_DISK_SPACE",
"data": {
"data": {
"deviceId": "JPE15233329",
"threshold": "90",
"value": "93.46767",
"volume": "/mnt/flash"
}
},
"components": {
"components": [
{
"type": "COMPONENT_TYPE_DEVICE",
"components": {
"deviceId": "JPE15233329"
}
}
]
}
},
"time": "2021-04-06T19:39:29.307757986Z",
"type": "INITIAL"
}
}
If the partialEqFilter
would've had two dictionaries inside the list, e.g.:
[{"eventType":"LOW_DEVICE_DISK_SPACE"},{"severity":"EVENT_SEVERITY_ERROR"}]}'
the filtering
would've used an OR operation instead of AND, meaning that all events that have
eventType
="LOW_DEVICE_DISK_SPACE"
and all events that have ERROR severity would've been printed.