![]() |
1 year ago | |
---|---|---|
.. | ||
tests | 1 year ago | |
README.md | 1 year ago | |
dyn_conf.c | 1 year ago | |
dyn_conf.h | 1 year ago |
Purpose of Netdata Dynamic Configuration is to allow configuration of select Netdata plugins and options through the Netdata API and by extension by UI.
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) |
Method | Endpoint | Description |
---|---|---|
GET | /api/v2/config |
registered Plugins (sent DYNCFG_ENABLE) |
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 |
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 |
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) |
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).
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 casesAfter module has been registered agent can call
set_module_config [module]
FUNCTION_PAYLOADget_module_config [module]
FUNCTIONget_module_config_schema [module]
FUNCTIONwith 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:
get_job_config_schema [module]
- FUNCTIONget_job_config [module] [job]
- FUNCTIONset_job_config [module] [job]
- FUNCTION_PAYLOADdelete_job_name [module] [job]
- FUNCTIONWhen 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.