diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:18 +0000 |
commit | 5da14042f70711ea5cf66e034699730335462f66 (patch) | |
tree | 0f6354ccac934ed87a2d555f45be4c831cf92f4a /collectors/charts.d.plugin/README.md | |
parent | Releasing debian version 1.44.3-2. (diff) | |
download | netdata-5da14042f70711ea5cf66e034699730335462f66.tar.xz netdata-5da14042f70711ea5cf66e034699730335462f66.zip |
Merging upstream version 1.45.3+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'collectors/charts.d.plugin/README.md')
-rw-r--r-- | collectors/charts.d.plugin/README.md | 190 |
1 files changed, 0 insertions, 190 deletions
diff --git a/collectors/charts.d.plugin/README.md b/collectors/charts.d.plugin/README.md deleted file mode 100644 index 97c2446fa..000000000 --- a/collectors/charts.d.plugin/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# charts.d.plugin - -`charts.d.plugin` is a Netdata external plugin. It is an **orchestrator** for data collection modules written in `BASH` v4+. - -1. It runs as an independent process `ps fax` shows it -2. It is started and stopped automatically by Netdata -3. It communicates with Netdata via a unidirectional pipe (sending data to the `netdata` daemon) -4. Supports any number of data collection **modules** - -To better understand the guidelines and the API behind our External plugins, please have a look at the [Introduction to External plugins](https://github.com/netdata/netdata/blob/master/collectors/plugins.d/README.md) prior to reading this page. - - -`charts.d.plugin` has been designed so that the actual script that will do data collection will be permanently in -memory, collecting data with as little overheads as possible -(i.e. initialize once, repeatedly collect values with minimal overhead). - -`charts.d.plugin` looks for scripts in `/usr/lib/netdata/charts.d`. -The scripts should have the filename suffix: `.chart.sh`. - -By default, `charts.d.plugin` is not included as part of the install when using [our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/methods/packages.md). You can install it by installing the `netdata-plugin-chartsd` package. - -## Configuration - -`charts.d.plugin` itself can be [configured](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md#use-edit-config-to-edit-configuration-files) using the configuration file `/etc/netdata/charts.d.conf`. This file is also a BASH script. - -In this file, you can place statements like this: - -```conf -enable_all_charts="yes" -X="yes" -Y="no" -``` - -where `X` and `Y` are the names of individual charts.d collector scripts. -When set to `yes`, charts.d will evaluate the collector script (see below). -When set to `no`, charts.d will ignore the collector script. - -The variable `enable_all_charts` sets the default enable/disable state for all charts. - -## A charts.d module - -A `charts.d.plugin` module is a BASH script defining a few functions. - -For a module called `X`, the following criteria must be met: - -1. The module script must be called `X.chart.sh` and placed in `/usr/libexec/netdata/charts.d`. - -2. If the module needs a configuration, it should be called `X.conf` and placed in `/etc/netdata/charts.d`. - The configuration file `X.conf` is also a BASH script itself. - You can edit the default files supplied by Netdata, by editing `/etc/netdata/edit-config charts.d/X.conf`, where `X` is the name of the module. - -3. All functions and global variables defined in the script and its configuration, must begin with `X_`. - -4. The following functions must be defined: - - - `X_check()` - returns 0 or 1 depending on whether the module is able to run or not - (following the standard Linux command line return codes: 0 = OK, the collector can operate and 1 = FAILED, - the collector cannot be used). - - - `X_create()` - creates the Netdata charts (commands `CHART` and `DIMENSION`). - The return value does matter: 0 = OK, 1 = FAILED. - - - `X_update()` - collects the values for the defined charts (commands `BEGIN`, `SET`, `END`). - The return value also matters: 0 = OK, 1 = FAILED. - -5. The following global variables are available to be set: - - `X_update_every` - is the data collection frequency for the module script, in seconds. - -The module script may use more functions or variables. But all of them must begin with `X_`. - -### X_check() - -The purpose of the BASH function `X_check()` is to check if the module can collect data (or check its config). - -For example, if the module is about monitoring a local mysql database, the `X_check()` function may attempt to -connect to a local mysql database to find out if it can read the values it needs. - -`X_check()` is run only once for the lifetime of the module. - -### X_create() - -The purpose of the BASH function `X_create()` is to create the charts and dimensions using the standard Netdata -plugin guidelines. - -`X_create()` will be called just once and only after `X_check()` was successful. -You can however call it yourself when there is need for it (for example to add a new dimension to an existing chart). - -A non-zero return value will disable the collector. - -### X_update() - -`X_update()` will be called repeatedly every `X_update_every` seconds, to collect new values and send them to Netdata, -following the Netdata plugin guidelines. - -The function will be called with one parameter: microseconds since the last time it was run. This value should be -appended to the `BEGIN` statement of every chart updated by the collector script. - -A non-zero return value will disable the collector. - -### Useful functions charts.d provides - -Module scripts can use the following charts.d functions: - -#### require_cmd command - -`require_cmd()` will check if a command is available in the running system. - -For example, your `X_check()` function may use it like this: - -```sh -mysql_check() { - require_cmd mysql || return 1 - return 0 -} -``` - -Using the above, if the command `mysql` is not available in the system, the `mysql` module will be disabled. - -#### fixid "string" - -`fixid()` will get a string and return a properly formatted id for a chart or dimension. - -This is an expensive function that should not be used in `X_update()`. -You can keep the generated id in a BASH associative array to have the values availables in `X_update()`, like this: - -```sh -declare -A X_ids=() -X_create() { - local name="a very bad name for id" - - X_ids[$name]="$(fixid "$name")" -} - -X_update() { - local microseconds="$1" - - ... - local name="a very bad name for id" - ... - - echo "BEGIN ${X_ids[$name]} $microseconds" - ... -} -``` - -### Debugging your collectors - -You can run `charts.d.plugin` by hand with something like this: - -```sh -# become user netdata -sudo su -s /bin/sh netdata - -# run the plugin in debug mode -/usr/libexec/netdata/plugins.d/charts.d.plugin debug 1 X Y Z -``` - -Charts.d will run in `debug` mode, with an update frequency of `1`, evaluating only the collector scripts -`X`, `Y` and `Z`. You can define zero or more module scripts. If none is defined, charts.d will evaluate all -module scripts available. - -Keep in mind that if your configs are not in `/etc/netdata`, you should do the following before running -`charts.d.plugin`: - -```sh -export NETDATA_USER_CONFIG_DIR="/path/to/etc/netdata" -``` - -Also, remember that Netdata runs `chart.d.plugin` as user `netdata` (or any other user the `netdata` process is configured to run as). - -## Running multiple instances of charts.d.plugin - -`charts.d.plugin` will call the `X_update()` function one after another. This means that a delay in collector `X` -will also delay the collection of `Y` and `Z`. - -You can have multiple `charts.d.plugin` running to overcome this problem. - -This is what you need to do: - -1. Decide a new name for the new charts.d instance: example `charts2.d`. - -2. Create/edit the files `/etc/netdata/charts.d.conf` and `/etc/netdata/charts2.d.conf` and enable / disable the - module you want each to run. Remember to set `enable_all_charts="no"` to both of them, and enable the individual - modules for each. - -3. link `/usr/libexec/netdata/plugins.d/charts.d.plugin` to `/usr/libexec/netdata/plugins.d/charts2.d.plugin`. - Netdata will spawn a new charts.d process. - -Execute the above in this order, since Netdata will (by default) attempt to start new plugins soon after they are -created in `/usr/libexec/netdata/plugins.d/`. |