# Monitor Resource A monitor resource represents a monitor inside MaxScale that monitors one or more servers. ## Resource Operations ### Get a monitor ``` GET /v1/monitors/:name ``` Get a single monitor. The _:name_ in the URI must be a valid monitor name with all whitespace replaced with hyphens. The monitor names are case-sensitive. #### Response `Status: 200 OK` ```javascript { "links": { "self": "http://localhost:8989/v1/monitors/MariaDB-Monitor" }, "data": { "id": "MariaDB-Monitor", "type": "monitors", "relationships": { "servers": { "links": { "self": "http://localhost:8989/v1/servers/" }, "data": [ { "id": "server1", "type": "servers" }, { "id": "server2", "type": "servers" } ] } }, "attributes": { "module": "mariadbmon", "state": "Running", "parameters": { "user": "maxuser", "password": "maxpwd", "monitor_interval": 10000, "backend_connect_timeout": 3, "backend_read_timeout": 1, "backend_write_timeout": 2, "backend_connect_attempts": 1, "detect_replication_lag": false, "detect_stale_master": true, "detect_stale_slave": true, "mysql51_replication": false, "multimaster": false, "detect_standalone_master": false, "failcount": 5, "allow_cluster_recovery": true, "journal_max_age": 28800 }, "monitor_diagnostics": { "monitor_id": 0, "detect_stale_master": true, "detect_stale_slave": true, "detect_replication_lag": false, "multimaster": false, "detect_standalone_master": false, "failcount": 5, "allow_cluster_recovery": true, "mysql51_replication": false, "journal_max_age": 28800, "server_info": [ { "name": "server1", "server_id": 0, "master_id": 0, "read_only": false, "slave_configured": false, "slave_io_running": false, "slave_sql_running": false, "master_binlog_file": "", "master_binlog_position": 0 }, { "name": "server2", "server_id": 0, "master_id": 0, "read_only": false, "slave_configured": false, "slave_io_running": false, "slave_sql_running": false, "master_binlog_file": "", "master_binlog_position": 0 } ] } }, "links": { "self": "http://localhost:8989/v1/monitors/MariaDB-Monitor" } } } ``` ### Get all monitors ``` GET /v1/monitors ``` Get all monitors. #### Response `Status: 200 OK` ```javascript { "links": { "self": "http://localhost:8989/v1/monitors/" }, "data": [ { "id": "MariaDB-Monitor", "type": "monitors", "relationships": { "servers": { "links": { "self": "http://localhost:8989/v1/servers/" }, "data": [ { "id": "server1", "type": "servers" }, { "id": "server2", "type": "servers" } ] } }, "attributes": { "module": "mariadbmon", "state": "Running", "parameters": { "user": "maxuser", "password": "maxpwd", "monitor_interval": 10000, "backend_connect_timeout": 3, "backend_read_timeout": 1, "backend_write_timeout": 2, "backend_connect_attempts": 1, "detect_replication_lag": false, "detect_stale_master": true, "detect_stale_slave": true, "mysql51_replication": false, "multimaster": false, "detect_standalone_master": false, "failcount": 5, "allow_cluster_recovery": true, "journal_max_age": 28800 }, "monitor_diagnostics": { "monitor_id": 0, "detect_stale_master": true, "detect_stale_slave": true, "detect_replication_lag": false, "multimaster": false, "detect_standalone_master": false, "failcount": 5, "allow_cluster_recovery": true, "mysql51_replication": false, "journal_max_age": 28800, "server_info": [ { "name": "server1", "server_id": 0, "master_id": 0, "read_only": false, "slave_configured": false, "slave_io_running": false, "slave_sql_running": false, "master_binlog_file": "", "master_binlog_position": 0 }, { "name": "server2", "server_id": 0, "master_id": 0, "read_only": false, "slave_configured": false, "slave_io_running": false, "slave_sql_running": false, "master_binlog_file": "", "master_binlog_position": 0 } ] } }, "links": { "self": "http://localhost:8989/v1/monitors/MariaDB-Monitor" } } ] } ``` ### Create a monitor ``` POST /v1/monitors ``` Create a new monitor. The request body must define at least the following fields. * `data.id` * Name of the monitor * `data.type` * Type of the object, must be `monitors` * `data.attributes.module` * The monitor module to use * `data.attributes.parameters.user` * The [`user`](../Getting-Started/Configuration-Guide.md#password) to use * `data.attributes.parameters.password` * The [`password`](../Getting-Started/Configuration-Guide.md#password) to use All monitor parameters can be defined at creation time. The following example defines a request body which creates a new monitor and assigns two servers to be monitored by it. It also defines a custom value for the _monitor_interval_ parameter. ```javascript { data: { "id": "test-monitor", // Name of the monitor "type": "monitors", "attributes": { "module": "mariadbmon", // The monitor uses the mariadbmon module "parameters": { // Monitor parameters "monitor_interval": 1000, "user": "maxuser, "password": "maxpwd" } }, "relationships": { // List of server relationships that this monitor uses "servers": { "data": [ // This monitor uses two servers { "id": "server1", "type": "servers" }, { "id": "server2", "type": "servers" } ] } } } } ``` #### Response Monitor is created: `Status: 204 No Content` ### Update a monitor ``` PATCH /v1/monitors/:name ``` The :name in the URI must map to a monitor name with all whitespace replaced with hyphens. The request body must be a valid JSON document representing the modified monitor. ### Modifiable Fields The following standard server parameter can be modified. - [user](../Monitors/Monitor-Common.md#user) - [password](../Monitors/Monitor-Common.md#password) - [monitor_interval](../Monitors/Monitor-Common.md#monitor_interval) - [backend_connect_timeout](../Monitors/Monitor-Common.md#backend_connect_timeout) - [backend_write_timeout](../Monitors/Monitor-Common.md#backend_write_timeout) - [backend_read_timeout](../Monitors/Monitor-Common.md#backend_read_timeout) - [backend_connect_attempts](../Monitors/Monitor-Common.md#backend_connect_attempts) In addition to these standard parameters, the monitor specific parameters can also be modified. Refer to the monitor module documentation for details on these parameters. #### Response Monitor is modified: `Status: 204 No Content` Invalid request body: `Status: 403 Forbidden` ### Update monitor relationships ``` PATCH /v1/monitors/:name/relationships/servers ``` The _:name_ in the URI must map to a monitor name with all whitespace replaced with hyphens. The request body must be a JSON object that defines only the _data_ field. The value of the _data_ field must be an array of relationship objects that define the _id_ and _type_ fields of the relationship. This object will replace the existing relationships of the monitor. The following is an example request and request body that defines a single server relationship for a monitor. ``` PATCH /v1/monitors/my-monitor/relationships/servers { data: [ { "id": "my-server", "type": "servers" } ] } ``` All relationships for a monitor can be deleted by sending an empty array as the _data_ field value. The following example removes all servers from a monitor. ``` PATCH /v1/monitors/my-monitor/relationships/servers { data: [] } ``` #### Response Monitor relationships modified: `Status: 204 No Content` Invalid JSON body: `Status: 403 Forbidden` ### Destroy a monitor ``` DELETE /v1/monitors/:name/stop ``` Destroy a created monitor. The monitor must not have relationships to any servers in order to be destroyed. #### Response Monitor is deleted: `Status: 204 No Content` Monitor could not be deleted: `Status: 403 Forbidden` ### Stop a monitor ``` PUT /v1/monitors/:name/stop ``` Stops a started monitor. #### Response Monitor is stopped: `Status: 204 No Content` ### Start a monitor ``` PUT /v1/monitors/:name/start ``` Starts a stopped monitor. #### Response Monitor is started: `Status: 204 No Content`