(Beta) Integrate with Telemetry Data Collectors
Data Collector Setup
You can collect event or metric data using various Sink Types, each designed to streamline data handling and processing. These Sink Types enable you to direct your data to preferred destinations like Splunk or Datadog for advanced analytics, or PagerDuty or Slack for real-time alerts. Set up Sink Types using the documentation below.
Here's a list of what we support:
Sink Type | Observability Data Type | ||
---|---|---|---|
|
|||
Datadog | Supported | Supported | |
Microsoft Teams | Supported | Supported | |
Pager Duty | Supported | Not Supported | |
Service Now | Coming Soon | Coming Soon | |
Slack | Supported | Supported | |
Splunk HEC | Supported | Supported |
How to Manage Streams
A stream is a logical entity created through the Stream Management APIs. It allows you to organize telemetry data from resources that share the same set of subscriptions.
Step 1: Authenticate
Submit your user credentials, Client ID and Client Secret for OAuth2 authentication.
Refer to Generating Client ID and Client Secret.
Note: To use Observability APIs, the user must have the Fabric Stream Subscription Manager role. Refer to the IAM documentation to get roles assigned to a user.
Step 2: Create Streams
Once your Assets are created, you will need to create a Stream to manage these Assets. Call (Beta) POST /fabric/v4/streams to create a Stream.
Sample curl request
curl -X 'POST' \
'https://api.equinix.com/fabric/v4/streams' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token>' \
-d
'{
"type": "TELEMETRY_STREAM",
"name": "splunk1",
"description": "subscription 1",
"project": {
"projectId": "300014703"
}
}'
Response
{
"uuid": "241372e9-79c9-4ef8-b77a-8b8176c2098b4",
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c228b4",
"type": "TELEMETRY_STREAM",
"name": "splunk1",
"description": "subscription 1",
"project": {
"projectId": "300014703"
},
"enabled": true,
"state": "PROVISIONING",
"assetsCount": 0,
"streamSubscriptionsCount": 0,
"changelog": {
"createdBy": "testuser",
"createdDateTime": "2024-08-12T21:14:17.689103902Z"
}
}
Step 3: Retrieve Streams
Call (Beta) GET /fabric/v4/streams/{streamId} to get your Stream details.
Sample Curl Request
curl -X 'GET' \
'https://api.equinix.com/fabric/v4/streams/657400f8-d360-11e9-bb65-2a2ae2dbcce5' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <Bearer Token>’
Response
{
"uuid": "241372e9-79c9-4ef8-b77a-8b8176c2098b4",
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a- 8b8176c228b4",
"type": "STREAM_SUSBSCRIPTION",
"name": "splunk1",
"description": "subscription 1",
"project": {
"projectId": "300014703"
},
"enabled": true,
"state": "PROVISIONED",
"changelog": {
"createdBy": "testuser",
"createdDateTime": "2024-08-12T21:14:17.689104Z"
}
}
Step 4: Delete Streams
Call (Beta) DELETE /fabric/v4/streams/{streamId} to delete a Stream.
Sample Curl Request
curl -X 'DELETE' \
'https://api.equinix.com/fabric/v4/streams/657400f8-d360-11e9-bb65-2a2ae2dbcce5' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token> '
How to Manage Subscription
Consumers can use the Subscription Management APIs to manage the delivery of telemetry data to their systems.
Before calling POST /fabric/v4/streams/{streamID}/subscriptions, refer to the Data Collector Section to set up a sink type of your choice.
Note: Subscriptions do not support self-signed certificates.
Refer to the payloads below to create a stream subscription for the supported data collectors:
Step 1: Create Subscription
Call (Beta) POST /fabric/v4/streams/{streamId}/subscriptions to create a Subscription.
Sample Curl Request
curl -X 'POST' \
'https://api.equinix.com/fabric/v4/streams/<streamId>/subscriptions' \
--header 'Content-Type: application/json' \
--header ' Authorization: Bearer <bearer_token>’ \
-d
'{
"type": "STREAM_SUBSCRIPTION",
"name": "<splunk_subscription_name>",
"description": "<splunk_subscription_desc>",
"stream": {
"uuid": "<stream_id>" },
"sink": {
"uri": "<protocol>://http-inputs-<host>.splunkcloud.com:<port>/<endpoint>",
"type": "SPLUNK_HEC",
"settings": {
"eventIndex": "<name_of_eventIndex>",
"metricIndex": "<name_of_metricIndex>",
"source": "<name_of_splunk_hec>"},
"credential": {
"type": "ACCESS_TOKEN",
"accessToken": "Splunk <Splunk AccessToken>"
}
}
}'
curl -X POST
'https://api.equinix.com/fabric/v4/streams/<streamId>/subscriptions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <bearer_token>' \
--data '{
"type": "STREAM_SUBSCRIPTION",
"name": "<slack_subscription_name>",
"description": "<slack_subscription_desc>",
"stream": {
"uuid": "<stream_id>"
},
"sink": {
"uri": "<slack_webhook_uri>",
"type": "SLACK"
}
}
}'
curl -X POST \
'https://api.equinix.com/fabric/v4/streams/<streamId>/subscriptions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <bearer_token>' \
--data '{
"type": "STREAM_SUBSCRIPTION",
"name": "<pagerduty_subscription_name>",
"description": "<pagerduty_subscription_desc>",
"sink": {
"host": "https://events.pagerduty.com",
"type": "PAGERDUTY",
"credential": {
"type": "INTEGRATION_KEY",
"integrationKey": "<pagerduty_integration_key>"
}
}'
curl -X POST \
'https://api.equinix.com/fabric/v4/streams/<streamId>/subscriptions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <bearer_token>' \
--data '{
"type": "STREAM_SUBSCRIPTION",
"name": "<datadog_subscription_name>",
"description": "<datadog_subscription_desc>",
"sink": {
"host": "https://<datadog_host>.datadoghq.com",
"type": "DATADOG",
"credential": {
"type": "API_KEY",
"apiKey": "<datadog_api_key>"
},
"settings": {
"applicationKey": "<datadog_application_key>"
}
}
}'
curl -X POST \
'https://api.equinix.com/fabric/v4/streams/<streamId>/subscriptions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <bearer_token>’ \
-data '{
"type": "STREAM_SUBSCRIPTION",
"name": "<ms_teams_subscription>",
"description": "<ms_teams_subscription_desc>",
"sink": {
"uri": "<teams_webhook_uri>",
"type": "TEAMS",
}
}
}'
Response
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c228b4/subscriptions/958a9854-dc49-4ded- 87bd-be4d0099355e", 4
"uuid": "958a9854-dc49-4ded-87bd-be4d0099355e",
"type": "STREAM_SUBSCRIPTION",
"name": " eq-splunk",
"description": "subscription1",
"state": "PROVISIONING",
"enabled": true,
"sink": {
"uri": "<protocol>://http-inputs-<host>.splunkcloud.com:<port>/<endpoint>",
"type": "SPLUNK_HEC",
"credential": {
"type": "ACCESS_TOKEN"
},
"batchEnabled": false,
"batchSizeMax": 50,
"batchWaitTimeMax": 5,
"settings": {
"eventIndex": "<name_of_eventIndex>",
"metricIndex": "<name_of_metricIndex>",
"source": "<name_of_splunk_hec>"
}
},
"changelog": {
"createdBy": "user1",
"createdDateTime": "2024-08-12T21:49:21.761029359Z"
}
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c228b4/subscriptions/12190e7d-a486-4a77-ba56-fecdab616837",
"uuid": "12190e7d-a486-4a77-ba56-fecdab616837",
"type": "STREAM_SUBSCRIPTION",
"name": "slack_subscription",
"description": "slack_subscription_desc",
"state": "PROVISIONED",
"enabled": true,
"sink": {
"uri": "****",
"type": "SLACK",
"batchEnabled": false,
"batchSizeMax": 50,
"batchWaitTimeMax": 5
},
"changelog": {
"createdBy": "user1",
"createdDateTime": "2024-10-04T13:20:40.127727Z"
}
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c228b4/dae0726a-87f0-4c5f-8662-ccbcf44a0de2",
"uuid": "dae0726a-87f0-4c5f-8662-ccbcf44a0de2",
"type": "STREAM_SUBSCRIPTION",
"name": "pagerduty-subscription",
"description": "pagerduty-subscription-desc",
"state": "PROVISIONED",
"enabled": true,
"sink": {
"host": "https://events.pagerduty.com",
"type": "PAGERDUTY",
"credential": {
"type": "INTEGRATION_KEY",
"integrationKey": "<encrypted_integration_key>"
},
"batchEnabled": false,
"batchSizeMax": 50,
"batchWaitTimeMax": 5,
"settings": {
"source": "equinix",
"changeUri": "https://events.pagerduty.com/v2/change/enqueue",
"alertUri": "https://events.pagerduty.com/v2/enqueue",
}
},
"changelog": {
"createdBy": "user1",
"createdDateTime": "2024-09-18T22:04:58.664523Z"
}
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c228b4/subscriptions/1a39648d-c407-4470-b08b-454965f31bf4",
"uuid": "1a39648d-c407-4470-b08b-454965f31bf4",
"type": "STREAM_SUBSCRIPTION",
"name": "datadog_subscription",
"description": "datadog_subscription_desc",
"state": "PROVISIONED",
"enabled": true,
"sink": {
"host": "https://<datadog_host>.datadoghq.com",
"type": "DATADOG",
"credential": {
"type": "API_KEY",
"apiKey": "<encrypted_datadog_api_key>"
},
"batchEnabled": false,
"batchSizeMax": 50,
"batchWaitTimeMax": 5,
"settings": {
"metricUri" : "https://<datadog_host>.datadoghq.com/api/v2/series",
"eventsUri" : "https://<datadog_host>.datadoghq.com/api/v1/events"
}
},
"changelog": {
"createdBy": "user1",
"createdDateTime": "2024-10-07T06:48:45.861755Z",
"updatedDateTime": "2024-10-07T06:48:51.514474Z"
}
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c228b4/subscriptions/12190e7d-a486-4a77-ba56-fecdab616837",
"uuid": "12190e7d-a486-4a77-ba56-fecdab616837",
"type": "STREAM_SUBSCRIPTION",
"name": "ms_teams_subscription",
"description": "ms_teams_subscription_desc",
"state": "PROVISIONED",
"enabled": true,
"sink": {
"uri": "*****",
"type": "TEAMS",
"batchEnabled": false,
"batchSizeMax": 50,
"batchWaitTimeMax": 5
},
"changelog": {
"createdBy": "user1",
"createdDateTime": "2024-10-04T13:20:40.127727Z"
}
}
Step 2: Retrieve Subscription
Call (Beta) GET /fabric/v4/streamSubscriptions/{streamSusbscriptionId} to get your Subscription details.
Sample Curl Request
curl -X 'GET' \
'https://api.equinix.com/fabric/v4/streamSubscriptions/557400f8-d360-11e9-bb65-2a2ae2dbcce4' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <Bearer Token>'
Response
{
"uuid": "958a9854-dc49-4ded-87bd-be4d0099355e",
"href": "https://api.equinix.com/fabric/v4/streamSubscriptions/958a9854-dc49-4ded-87bd-be4d0099355e",
"type": "STREAM_SUBSCRIPTION",
"name": " eq-splunk ",
"description": "subscription1",
"project": {
"projectId": "377533000114703"
},
"state": "PROVISIONED",
"enabled": true,
"stream": {
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c228b4",
"uuid": "241372e9-79c9-4ef8-b77a-8b8176c228b4"
},
"sink": {
"uri": "<protocol>://http-inputs-<host>.splunkcloud.com:<port>/<endpoint>",
"type": "SPLUNK_HEC",
"credential": {
"type": "ACCESS_TOKEN"
},
"settings": {
"eventIndex": "<name_of_eventIndex>",
"metricIndex": "<name_of_metricIndex>",
"source": "<name_of_splunk_hec>",
}
},
"changelog": {
"createdBy": "user1",
"createdDateTime": "2024-08-12T21:49:21.761029Z"
}
}
Step 3: Delete Subscription
Call (Beta) DELETE /v4/fabric/streamSubscriptions/{streamSunscriptionId} to delete a Subscription.
Sample Curl Request
curl -X 'DELETE' \
'https://api.equinix.com/fabric/v4/streamSubscriptions/557400f8-d360-11e9-bb65-2a2ae2dbcce4' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token>'
How to Manage Assets
Asset Management APIs provide a seamless way to attach various types of Assets, such as Ports, Connections, Cloud Routers, Metros, Projects, and Organizations to a Stream. They ensure efficient organization and monitoring of your resources. You have the option to use existing Assets or create new ones to add to a Stream. There are six types of Assets:
-
Fabric Cloud Router (FCR) – To create a Fabric Cloud Router, Call POST /fabric/v4/routers
-
Connections – To create Connections, Call POST /fabric/v4/connections
-
Ports – To create Ports, Call POST /fabric/v4/ports
-
Metros – To view available metros, refer to Equinix Metros List.
-
Projects – To view lifecycle events on your asset, such as provisioning and deprovisioning events, attach a project to your stream. Refer to the IAM docs.
-
Organizations – To view project and organization events such as role assignments, resource management (create, update, delete), and user login, refer to the IAM docs.
Step 1: Attach Assets
Attach Assets to a Stream by calling (Beta) PUT /fabric/v4/streams/{streamId}/{asset}/{assetId}
Note: To attach assets (Port, Connections, etc) onto a stream, the user needs to have at least the Viewer Role on that asset. To attach projects to a stream for lifecycle provisioning events, the user needs to have the Project Admin role. To attach organizations to a stream for role assignment, user login, and resource management events, the user needs to have the Org Admin role. Refer to the IAM documentation to get roles assigned to a user.
Sample Curl Request
curl -X 'PUT' \
'https://api.equinix.com/fabric/v4/streams/<streamId>/ports/<portId>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token> ' \
-d
'{
"metricsEnabled": true
}'
curl -X 'PUT' \
'https://api.equinix.com/fabric/v4/streams/<streamId>/connections/<connectionId>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token> ' \
-d
'{
"metricsEnabled": true
}'
curl -X 'PUT' \
'https://api.equinix.com/fabric/v4/streams/<streamId>/routers/<routerId>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token> ' \
-d
'{
"metricsEnabled": false
}'
curl -X 'PUT' \
'https://api.equinix.com/fabric/v4/streams/<streamId>/metros/<metroCode>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token> ' \
-d
'{
"metricsEnabled": true
}'
curl -X 'PUT' \
'https://api.equinix.com/fabric/v4/streams/<streamId>/projects/<projectId>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token> ' \
-d
'{
"includes": ["*"],
"metricsEnabled": true
}'
curl -X 'PUT' \
https://api.equinix.com/fabric/v4/streams/<streamId>/organizations/<organizationId>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token> ' \
-d
'{
"includes": ["*"],
"metricsEnabled": true
}'
Response
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c2098b4/ports/dee885d7-a845-4873-8774-f83012e7a",
"uuid": "dee885d7-a845-4873-8774-f83012e7a",
"type": "XF_PORT",
"metricsEnabled": true
"attachmentStatus": "ATTACHING"
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c2098b4/connections/dee885d7-a845-4873-8774-f83012e7a",
"uuid": " dee885d7-a845-4873-8774-f83012e7a ",
"type": "IP_VC",
"metricsEnabled": true
"attachmentStatus": "ATTACHING"
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c2098b4/routers/dee885d7-a845-4873-8774-f83012e7a",
"uuid": " dee885d7-a845-4873-8774-f83012e7a ",
"type": "XF_ROUTER",
"metricsEnabled": false
"attachmentStatus": "ATTACHED"
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c2098b4/metros/SV",
"uuid": "SV",
"type": "XF_METRO",
"metricsEnabled": true
"attachmentStatus": "ATTACHED"
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c2098b4/projects/dee885d7-a845-4873-8774-f83012e7a",
"uuid": "dee885d7-a845-4873-8774-f83012e7a",
"type": "PROJECT",
"metricsEnabled": true
"attachmentStatus": "ATTACHED"
}
{
"href": "https://api.equinix.com/fabric/v4/streams/241372e9-79c9-4ef8-b77a-8b8176c2098b4/organizations/dee885d7-a845-4873-8774-f83012e7a",
"uuid": "dee885d7-a845-4873-8774-f83012e7a",
"type": "ORGANIZATION",
"metricsEnabled": true
"attachmentStatus": "ATTACHED"
}
Step 2: Retrieve Asset Details
Call (Beta) GET /fabric/v4/streams/{streamId}/{asset}/{assetId} to get Asset details.
Sample Curl Request
curl -X 'GET' \
'https://api.equinix.com/fabric/v4/streams/657400f8-d360-11e9-bb65-2a2ae2dbcce5/ports/757400f8-d360-11e9-bb65-2a2ae2dbcce6' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <Bearer Token>'
Response
{
"href": "https://api.equinix.com/fabric/v4/stream/241372e9-79c9-4ef8-b77a-8b8176c2098b4/ports/757400f8-d360-11e9-bb65-2a2ae2dbcce6",
"uuid": " dee885d7-a845-4873-8774-f83012e7a ",
"type": "XF_PORT",
"metricsEnabled": true,
"attachmentStatus": "ATTACHED"
}
Step 3: Delete Asset Attachment
Call (Beta) DELETE /fabric/v4/streams/{streamId}/{asset}/{assetId} to delete Asset Attachment.
Sample Curl Request
curl -X 'DELETE' \
'https://api.equinix.com/fabric/v4/streams/657400f8-d360-11e9-bb65-2a2ae2dbcce5/ports/757400f8-d360-11e9-bb65-2a2ae2dbcce6' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <Bearer Token>'
Response
{
"href": "https://api.equinix.com/fabric/v4/stream/241372e9-79c9-4ef8-b77a-8b8176c2098b4/ports/757400f8-d360-11e9-bb65-2a2ae2dbcce6",
"uuid": " dee885d7-a845-4873-8774-f83012e7a ",
"type": "XF_PORT",
"metricsEnabled": true,
"attachmentStatus": "DETACHING"
}
Receive Events in Client Sink Integration
You can generate events in different ways.
-
BGP State Events - When configuring BGP and performing actions such as disable, enable, or reset on the portal, BGP events related to FCR connections will be generated. These events include BGP IPV4/IPv6 Idle, Connected, or Established states.
-
Route Quota Usage Events - FCR and FCR related connections can learn IPV4/IPv6 routes up to 90% or 100% of the FCR Package Type. These routes are typically learned based on the IPV4/IPv6 addresses configured in BGP.
-
Port and Connection Up/Down Events - These events are critical to the user. If an Equinix Port goes down, a Port and Connection Down Event will be triggered. Once the Equinix Port recovers, a Port and Connection Up Event will be sent.
-
Fabric and Network Edge Asset Lifecycle Provisioning Events – Track the service provisioning of your assets, such as ports, connections, FCRs, Virtual Devices, etc. Any status change to your asset, including provisioning, deprovisioning, and failures, will result in an event being sent.
-
Organization Events – These events are from access manager and resource manager to inform organization administrators of the change events happening within the organization such as user login, and adding or removing roles for users.
Once you create a subscription, you will receive Events whenever they occur.
For your FCR to Port Connection, set up Direct and BGP routing protocol and enable or disable BGP:
-
Log in to Fabric Portal.
-
Navigate to Connection Inventory.
-
Open Connection Asset that is attached to Streams.
-
Navigate to the Routing Protocol tab.
-
Enable or Disable BGP Ipv4/Ipv6 Routing Protocol.
-
Splunk will receive an Event.
Once your subscriptions are active, go to Splunk and search using index="<name_of_splunk_hec>". This search should return the relevant Event data collected by Splunk.
{ [-]
_source: https://api.equinix.com/fabric/v4/cloudevents
equinixmessage: Virtual port status changed to UP
id: 5345e011-4478-484b-beb4-38c940ff2f9e
severitynumber: 9
severitytext: INFO
subject: /fabric/v4/ports/c4d85dbe-f965-9659-f7e0-306a5c00af26
time: 2024-07-26T12:31:53.975Z
type: equinix.fabric.port.status.up
}
Show as raw text
host = http-inputs-equinix-digin.splunkcloud.com
source = Equinix
sourcetype = _json
Receive Metrics in Client Sink Integration
Once you subscribe to the asset(s) metrics, you will receive metrics at a 5-minute interval:
-
Port and Connection Bandwidth Usage Metrics provide an output for the data transmitted (tx) or received (rx) in the port or connection asset.
-
Metro Latency Metrics provide the latency from a single subscribed metro code to other metros supported by Equinix.
-
Port Error and Discards Metrics provide the number of packet discards on a given port due to packet format, transmission errors, or even when the port doesn’t have bandwidth to accept the packet.
API Reference and Related Resources
For more details on Observability APIs, refer to the resources below.
Reach out to your Equinix account or sales team partner to sign up for the beta. Refer to Fabric Support for any inquiries.