README.md 6.2 KB

Netdata Dynamic Configuration

Purpose of Netdata Dynamic Configuration is to allow configuration of select Netdata plugins and options through the Netdata API and by extension by UI.

HTTP API documentation

Summary API

For summary of all jobs and their statuses (for all children that stream to parent) use the following URL:

Method Endpoint Description
GET api/v2/job_statuses list of Jobs
GET api/v2/job_statuses?grouped list of Jobs (hierarchical, grouped by host/plugin/module)

Dyncfg API

Top level

Method Endpoint Description
GET /api/v2/config registered Plugins (sent DYNCFG_ENABLE)

Plugin level

Method Endpoint Description
GET /api/v2/config/[plugin] Plugin config
PUT /api/v2/config/[plugin] update Plugin config
GET /api/v2/config/[plugin]/modules Modules registered by Plugin
GET /api/v2/config/[plugin]/schema Plugin config schema

Module level

Method Endpoint Description
GET /api/v2/config/<plugin>/[module] Module config
PUT /api/v2/config/[plugin]/[module] update Module config
GET /api/v2/config/[plugin]/[module]/jobs Jobs registered by Module
GET /api/v2/config/[plugin]/[module]/job_schema Job config schema
GET /api/v2/config/[plugin]/[module]/schema Module config schema

Job level - only for modules where module_type == job_array

Method Endpoint Description
GET /api/v2/config/[plugin]/[module]/[job] Job config
PUT /api/v2/config/[plugin]/[module]/[job] update Job config
POST /api/v2/config/[plugin]/[module]/[job] create Job
DELETE /api/v2/config/[plugin]/[module]/[job] delete Job (created by Dyncfg)

AGENT<->PLUGIN interface documentation

1. DYNCFG_ENABLE

Plugin signifies to agent its ability to use new dynamic config and the name it wishes to use by sending

plugin->agent:
=============
DYNCFG_ENABLE [plugin_url_name]

This can be sent only once per lifetime of the plugin (at startup or later) sending it multiple times is considered a protocol violation and plugin might get terminated. After this command is sent the plugin has to be ready to accept all the new commands/keywords related to dynamic configuration (this command lets agent know this plugin is dyncfg capable and wishes to use dyncfg functionality).

After this command agent can call

agent->plugin:
=============
FUNCTION_PAYLOAD [UUID] 1 "set_plugin_config"
the new configuration
blah blah blah
FUNCTION_PAYLOAD_END

plugin->agent:
=============
FUNCTION_RESULT_BEGIN [UUID] [(1/0)(accept/reject)] [text/plain] 5
FUNCTION_RESULT_END

to set the new config which can be accepted/rejected by plugin by sending answer for this FUNCTION as it would with any other regular function.

The new FUNCTION_PAYLOAD command differs from regular FUNCTION command exclusively in its ability to send bigger payloads (configuration file contents) to the plugin (not just parameters list).

Agent can also call (after DYNCFG_ENABLE)

Agent->plugin:
=============
FUNCTION [UID] 1 "get_plugin_config"

Plugin->agent:
=============
FUNCTION_RESULT_BEGIN [UID] 1 text/plain 5
{
	"the currently used config from plugin" : "nice"
}
FUNCTION_RESULT_END

and

Agent->plugin:
=============
FUNCTION [UID] 1 "get_plugin_config_schema"

Plugin->agent:
=============
FUNCTION_RESULT_BEGIN [UID] 1 text/plain 5
{
	"the schema of plugin configuration" : "splendid"
}
FUNCTION_RESULT_END

Plugin can also register zero, one or more configurable modules using:

plugin->agent:
=============
DYNCFG_REGISTER_MODULE [module_url_name] (job_array|single)

modules can be added any time during plugins lifetime (you are not required to add them all at startup).

2. DYNCFG_REGISTER_MODULE

Module has to choose one of following types at registration:

  • single - module itself has configuration but does not accept any jobs (this is useful mainly for internal netdata configurable things like webserver etc.)
  • job_array - module itself can (not must) have configuration and it has an array of jobs which can be added, modified and deleted. this is what plugin developer needs in most cases

After module has been registered agent can call

  • set_module_config [module] FUNCTION_PAYLOAD
  • get_module_config [module] FUNCTION
  • get_module_config_schema [module] FUNCTION

with same syntax as set_plugin_config and get_plugin_config. In case of set command the plugin has ability to reject the new configuration pushed to it.

In a case the module was registered as job_array type following commands can be used to manage jobs:

3. Job interface for job_array modules

  • get_job_config_schema [module] - FUNCTION
  • get_job_config [module] [job] - FUNCTION
  • set_job_config [module] [job] - FUNCTION_PAYLOAD
  • delete_job_name [module] [job] - FUNCTION

4. Streaming

When above commands are transferred trough streaming additionally plugin_name is prefixed as first parameter. This is done to allow routing to appropriate plugin @child.

As a plugin developer you don't need to concern yourself with this detail as that parameter is stripped when sent to the plugin (and added when sent trough streaming) automagically.