REST API
Overview
SWISnap exposes REST API that allows managing and monitoring:
- tasks
- plugins
- metrics
This document describes its usage. Check SWISnap configuration for more details on available configuration options.
This document refers to V3 version of REST API. Versions V1 and V2 are still available, but are deprecated.
REST API methods list
Tasks
Get summary information about tasks
GET http://127.0.0.1:21413/v3/tasks
Users can request summary information about all loaded tasks (v1 and v2). Output information contains among others:
- task id
- href - reference to details information about a single task
- task state
Example usage:
curl http://127.0.0.1:21413/v3/tasks
Example output:
[
{
"creation_timestamp": 1590059578,
"deadline": "55s",
"hit_count": 1,
"href": "/v3/tasks/5908f536-091c-493e-9a39-b088480c6b1c",
"id": "5908f536-091c-493e-9a39-b088480c6b1c",
"last_run_timestamp": 1590059579,
"master_id": "_30385a3a-7bcd-4f7b-8ac7-5036c10de9bd",
"name": "5908f536-00-C:\\ProgramData\\SolarWinds\\Snap\\tasks-autoload.d\\task-processes.yaml",
"task_state": "Running"
},
{
"creation_timestamp": 1590059578,
"deadline": "55s",
"hit_count": 1,
"href": "/v3/tasks/35bf2746-0e49-472e-97db-115c4ccb3b59",
"id": "35bf2746-0e49-472e-97db-115c4ccb3b59",
"last_run_timestamp": 1590059580,
"name": "35bf2746-00-C:\\ProgramData\\SolarWinds\\Snap\\tasks.d\\task-logs.yaml",
"task_state": "Running"
},
{
"creation_timestamp": 1590059578,
"deadline": "55s",
"hit_count": 1,
"href": "/v3/tasks/55e4a62c-5947-4e2b-9cd4-dd9ce76fff73",
"id": "55e4a62c-5947-4e2b-9cd4-dd9ce76fff73",
"last_run_timestamp": 1590059580,
"master_id": "_9911deb7-2ac3-468f-8ab6-cc66c154dd7c",
"name": "55e4a62c-00-C:\\ProgramData\\SolarWinds\\Snap\\tasks-autoload.d\\task-aosystem.yaml",
"task_state": "Running"
}
]
Get detailed information about a given task
GET http://127.0.0.1:21413/v3/tasks/:id
Users can obtain detailed information about any task. Output information contains among others:
- summary information,
- list of plugins used by task,
- configuration options used to load a given task,
- requested metrics (
filters
) - statistics (ie.
total_metrics
,collect_requests_succeeded
), - recent actions history,
- etc.
Example usage:
curl http://127.0.0.1:21413/v3/task/
Example output:
[
{
"creation_timestamp": 1590059578,
"deadline": "55s",
"hit_count": 28,
"href": "/v3/tasks/5908f536-091c-493e-9a39-b088480c6b1c",
"id": "5908f536-091c-493e-9a39-b088480c6b1c",
"last_run_timestamp": 1590061199,
"master_id": "_30385a3a-7bcd-4f7b-8ac7-5036c10de9bd",
"name": "5908f536-00-C:\\ProgramData\\SolarWinds\\Snap\\tasks-autoload.d\\task-processes.yaml",
"plugins_used": [
{
"configuration": {
"_v1_config_": {
"snap_version": "3.0.0.4584"
}
},
"counters": {
"avg_metrics_per_collect": 1042,
"avg_warnings_per_collect": 0,
"collect_requests": 28,
"collect_requests_failed": 0,
"collect_requests_succeeded": 28,
"collect_success_rate": 1,
"total_metrics": 29176
},
"filters": [
"/processes/[process_name]/cpu",
"/processes/[process_name]/memory",
"/processes/[process_name]/count",
"/processes/[process_name]/uptime"
],
"history": {
"collect": {
"recent_errors": [],
"recent_events": [
{
"err": "<nil>",
"locked_time": "2020-05-21T13:39:59.8766827+02:00",
"locking_time": "2020-05-21T13:39:59.8766827+02:00",
"status": "succeeded",
"unlocked_time": "2020-05-21T13:40:04.0210139+02:00"
}
]
},
...
},
"href": "/v3/plugins/collector/processes/local/11.0.0",
"key": "collector/processes/local/11.0.0",
"last_measurement": {
"duration": 4144331200,
"processed_metrics": 1104,
"timestamp": "2020-05-21T13:39:59.8766827+02:00"
},
"loaded": "2020-05-21T13:12:59.8556533+02:00",
"name": "processes",
"processing_times": {
"average": 5080215542,
"maximum": 30751119300,
"total": 142246035200
},
"type": "collector",
"version": "11.0.0"
},
{
"configuration": {
"_v1_config_": {
"snap_version": "3.0.0.4584"
},
"endpoint": {
"token": "SOLARWINDS_TOKEN"
},
"options": {
"ec2": null
}
},
"counters": {
"avg_metrics_per_collect": 1042,
"avg_warnings_per_collect": 0,
"collect_requests": 28,
"collect_requests_failed": 0,
"collect_requests_succeeded": 28,
"collect_success_rate": 1,
"total_metrics": 29176
},
"history": {
"publish": {
"recent_errors": [],
"recent_events": [
{
"err": "<nil>",
"locked_time": "2020-05-21T13:40:04.0219903+02:00",
"locking_time": "2020-05-21T13:40:04.0219903+02:00",
"status": "succeeded",
"unlocked_time": "2020-05-21T13:40:04.7873316+02:00"
}
]
}
...
},
"href": "/v3/plugins/publisher/publisher-processes/local/48.0.0",
"key": "publisher/publisher-processes/local/48.0.0",
"last_measurement": {
"duration": 765341300,
"processed_metrics": 1104,
"timestamp": "2020-05-21T13:40:04.0219903+02:00"
},
"loaded": "2020-05-21T13:12:59.8576053+02:00",
"name": "publisher-processes",
"processing_times": {
"average": 1022340853,
"maximum": 2019545000,
"total": 28625543900
},
"type": "publisher",
"version": "48.0.0"
}
],
"schedule": {
"interval": "1m0s",
"type": "windowed"
},
"task_state": "Running"
}
]
Peeking collected metrics
GET http://127.0.0.1:21413/v3/tasks/:id/watch
Users can watch metrics collected under a given task in real-time. The output is an infinite stream of JSON objects. Each stream part contains information about a single metric, among others:
- metric value (
data
) - metric name (
namespace
) - list of tags
- time of collection (
timestamp
)
Example usage:
curl http://127.0.0.1:21413/v3/tasks/55e4a62c-5947-4e2b-9cd4-dd9ce76fff73/watch
Example output:
{
"data": 114269267456,
"namespace": "/system/io/C:/bytes/read",
"source_task_id": "55e4a62c-5947-4e2b-9cd4-dd9ce76fff73",
"tags": {
"collector_plugin": "aosystem",
"collector_plugin_file": "snap-plugin-collector-aosystem.exe",
"disk": "C:"
},
"timestamp": "2020-05-21T13:29:00.0103349+02:00"
}
{
"data": 57643884032,
"namespace": "/system/io/C:/bytes/write",
"source_task_id": "55e4a62c-5947-4e2b-9cd4-dd9ce76fff73",
"tags": {
"collector_plugin": "aosystem",
"collector_plugin_file": "snap-plugin-collector-aosystem.exe",
"disk": "C:"
},
"timestamp": "2020-05-21T13:29:00.0103349+02:00"
}
{
"data": 321325,
"namespace": "/system/io/C:/io_time",
"source_task_id": "55e4a62c-5947-4e2b-9cd4-dd9ce76fff73",
"tags": {
"collector_plugin": "aosystem",
"collector_plugin_file": "snap-plugin-collector-aosystem.exe",
"disk": "C:"
},
"timestamp": "2020-05-21T13:29:00.0103349+02:00"
}
{
"data": 5644,
"namespace": "/system/io/C:/time/read",
"source_task_id": "55e4a62c-5947-4e2b-9cd4-dd9ce76fff73",
"tags": {
"collector_plugin": "aosystem",
"collector_plugin_file": "snap-plugin-collector-aosystem.exe",
"disk": "C:"
},
"timestamp": "2020-05-21T13:29:00.0103349+02:00"
}
{
"data": 2716,
"namespace": "/system/io/C:/time/write",
"source_task_id": "55e4a62c-5947-4e2b-9cd4-dd9ce76fff73",
"tags": {
"collector_plugin": "aosystem",
"collector_plugin_file": "snap-plugin-collector-aosystem.exe",
"disk": "C:"
},
"timestamp": "2020-05-21T13:29:00.0103349+02:00"
}
...
Start/stop task
PUT http://127.0.0.1:21413/v3/tasks/:id
Users can request starting/stopping a given task.
For new tasks (v2) requesting to stop is equal to removing the task (it won't be possible to start it again).
For legacy tasks (v1) stop
will only stop the task; it is possible to start it later and if you want the task removed, it has to be requested as a separate command.
Example usage:
## v2
curl -X PUT http://127.0.0.1:21413/v3/tasks/5908f536-091c-493e-9a39-b088480c6b1c?action=stop
## v1
curl -X PUT http://127.0.0.1:21413/v3/tasks/35bf2746-0e49-472e-97db-115c4ccb3b59?action=stop
curl -X PUT http://127.0.0.1:21413/v3/tasks/35bf2746-0e49-472e-97db-115c4ccb3b59?action=start
Delete task
DELETE http://127.0.0.1:21413/v3/tasks/:id
Users can request to delete a given task.
After this operation, the task won't be listed anymore by GET http://127.0.0.1:21413/v3/tasks
request.
For removing a legacy (v1) task, it is needed to stop it first.
Example usage:
curl -X DELETE http://127.0.0.1:21413/v3/tasks/35bf2746-0e49-472e-97db-115c4ccb3b59
Plugins
Get information about running plugins
GET http://127.0.0.1:21413/v3/plugins
Users can request a list of running plugins.
List contains plugins of both versions: v1 and v2.
Moreover, there are single binaries that can be executed in two instances (in v1 and v2 compatibility mode), eg. publisher-appoptics
.
Example usage:
curl http://127.0.0.1:21413/v3/plugins/
Example output:
[
{
"href": "/v3/plugins/collector/aosystem/58.0.0",
"last_hit_timestamp": "2020-05-21T14:14:00.0003124+02:00",
"loaded_timestamp": "2020-05-21T13:57:50.1262301+02:00",
"name": "aosystem",
"runtime": "local",
"signed": false,
"status": "running",
"task_version": "PluginsV2",
"type": "collector",
"version": "58.0.0"
},
{
"href": "/v3/plugins/publisher/publisher-appoptics/48.0.0",
"last_hit_timestamp": "2020-05-21T14:14:01.7398349+02:00",
"loaded_timestamp": "2020-05-21T13:57:50.7189664+02:00",
"name": "publisher-appoptics",
"runtime": "local",
"signed": false,
"status": "running",
"task_version": "PluginsV2",
"type": "publisher",
"version": "48.0.0"
},
{
"href": "/v3/plugins/collector/logs/15.0.0",
"last_hit_timestamp": "2020-05-21T14:14:00.0237093+02:00",
"loaded_timestamp": "2020-05-21T13:57:50.2492066+02:00",
"name": "logs",
"pprof_port": "0",
"signed": false,
"status": "running",
"task_version": "PluginsV1",
"type": "collector",
"version": "15.0.0"
},
{
"href": "/v3/plugins/publisher/publisher-appoptics/48.0.0",
"last_hit_timestamp": "2020-05-21T14:14:00.684609+02:00",
"loaded_timestamp": "2020-05-21T13:57:50.716047+02:00",
"name": "publisher-appoptics",
"pprof_port": "0",
"signed": false,
"status": "running",
"task_version": "PluginsV1",
"type": "publisher",
"version": "48.0.0"
},
]
Loading plugin
POST http://127.0.0.1:21413/v3/plugins
The plugin v1 or v2 can be loaded manually. It can be helpful when the plugin has been prepared by customer or there is no plugin in the package. Be aware that after loading v1 plugin it will be visible on the plugin list no matter if the task has been started or not. For v2 the plugin will be visible on the plugin list after the task is started. The localization for uploaded plugin binaries is:
/opt/SolarWinds/Snap/bin/uploaded
on LinuxC:\ProgramFiles\SolarWinds\Snap\bin\uploaded
on Windows
It can be loaded in the following ways:
-
binary file local to snap
Example usage:
curl -d "plugin_data=/opt/SolarWinds/Snap/bin/snap-plugin-collector-logs" http://127.0.0.1:21413/v3/plugins
-
binary file local to the REST caller (the only one will be sent as binary payload)
Example usage:
curl -F "plugin_data=@/opt/SolarWinds/Snap/bin/snap-plugin-collector-logs" http://127.0.0.1:21413/v3/plugins
-
remote plugin instance (aka standalone plugin)
Example usage:
curl -d "plugin_uri=http://example.com/opt/SolarWinds/Snap/bin/snap-plugin-collector-logs" http://127.0.0.1:21413/v3/plugins
Metrics
Get metrics list registered by legacy (v1) plugins
GET http://127.0.0.1:21413/v3/metrics
Users can request a list of all metrics available in the SWISnap catalog. Due to the changes in architecture, new plugins are not registering their metrics list in SWISnap and thereby won't be listed in the output.
Example usage:
curl http://127.0.0.1:21413/v3/metrics
Example output:
[
{
"dynamic": false,
"href": "http://127.0.0.1:21413/v3/metrics?ns=%2Flogs%2Fattempts_total&ver=15.0.0",
"last_advertised_timestamp": 1590062269,
"namespace": "/logs/attempts_total",
"policy": [
{
"default": "tls",
"name": "api_protocol",
"required": false,
"type": "string"
},
...
],
"version": "15.0.0"
},
{
"dynamic": false,
"href": "http://127.0.0.1:21413/v3/metrics?ns=%2Flogs%2Fbytes_failed&ver=15.0.0",
"last_advertised_timestamp": 1590062269,
"namespace": "/logs/bytes_failed",
"policy": [
{
"name": "hostname",
"required": false,
"type": "string"
},
...
],
"version": "15.0.0"
},
...
]
Navigation Notice: When the APM Integrated Experience is enabled, AppOptics shares a common navigation and enhanced feature set with other integrated experience products. How you navigate AppOptics and access its features may vary from these instructions.
The scripts are not supported under any SolarWinds support program or service. The scripts are provided AS IS without warranty of any kind. SolarWinds further disclaims all warranties including, without limitation, any implied warranties of merchantability or of fitness for a particular purpose. The risk arising out of the use or performance of the scripts and documentation stays with you. In no event shall SolarWinds or anyone else involved in the creation, production, or delivery of the scripts be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the scripts or documentation.