summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFotis Voutsas <fotis@netdata.cloud>2024-07-05 08:24:33 +0300
committerGitHub <noreply@github.com>2024-07-05 08:24:33 +0300
commite5e900d77207f442259a94235a739caca538b71d (patch)
tree24210b641993d794b8262bbf8c16ac9570072657
parentd1deb80a1168480e93a85dae8b7a0f4ad7dea68d (diff)
Port ipfs from python to Go (#18070)
* port ipfs to go * format testdata * fix imports * updates --------- Co-authored-by: ilyam8 <ilya@netdata.cloud>
-rw-r--r--CMakeLists.txt2
l---------src/collectors/python.d.plugin/ipfs/README.md1
-rw-r--r--src/collectors/python.d.plugin/ipfs/integrations/ipfs.md236
-rw-r--r--src/collectors/python.d.plugin/ipfs/ipfs.chart.py149
-rw-r--r--src/collectors/python.d.plugin/ipfs/ipfs.conf82
-rw-r--r--src/collectors/python.d.plugin/ipfs/metadata.yaml172
-rw-r--r--src/collectors/python.d.plugin/python.d.conf2
-rw-r--r--src/go/plugin/go.d/README.md1
-rw-r--r--src/go/plugin/go.d/config/go.d.conf1
-rw-r--r--src/go/plugin/go.d/config/go.d/ipfs.conf6
-rw-r--r--src/go/plugin/go.d/config/go.d/sd/docker.conf7
-rw-r--r--src/go/plugin/go.d/config/go.d/sd/net_listeners.conf7
-rw-r--r--src/go/plugin/go.d/modules/init.go1
-rw-r--r--src/go/plugin/go.d/modules/ipfs/charts.go105
-rw-r--r--src/go/plugin/go.d/modules/ipfs/collect.go217
-rw-r--r--src/go/plugin/go.d/modules/ipfs/config_schema.json195
-rw-r--r--src/go/plugin/go.d/modules/ipfs/ipfs.go128
-rw-r--r--src/go/plugin/go.d/modules/ipfs/ipfs_test.go279
-rw-r--r--src/go/plugin/go.d/modules/ipfs/metadata.yaml217
-rw-r--r--src/go/plugin/go.d/modules/ipfs/testdata/api_v0_pin_ls.json8
-rw-r--r--src/go/plugin/go.d/modules/ipfs/testdata/api_v0_stats_bw.json6
-rw-r--r--src/go/plugin/go.d/modules/ipfs/testdata/api_v0_stats_repo.json7
-rw-r--r--src/go/plugin/go.d/modules/ipfs/testdata/api_v0_swarm_peers.json70
-rw-r--r--src/go/plugin/go.d/modules/ipfs/testdata/config.json22
-rw-r--r--src/go/plugin/go.d/modules/ipfs/testdata/config.yaml19
-rw-r--r--src/health/health.d/ipfs.conf4
26 files changed, 1299 insertions, 645 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 953c9ff4ff..08c0ba2d06 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2858,7 +2858,6 @@ install(FILES
src/collectors/python.d.plugin/go_expvar/go_expvar.conf
src/collectors/python.d.plugin/haproxy/haproxy.conf
src/collectors/python.d.plugin/icecast/icecast.conf
- src/collectors/python.d.plugin/ipfs/ipfs.conf
src/collectors/python.d.plugin/memcached/memcached.conf
src/collectors/python.d.plugin/monit/monit.conf
src/collectors/python.d.plugin/nsd/nsd.conf
@@ -2898,7 +2897,6 @@ install(FILES
src/collectors/python.d.plugin/go_expvar/go_expvar.chart.py
src/collectors/python.d.plugin/haproxy/haproxy.chart.py
src/collectors/python.d.plugin/icecast/icecast.chart.py
- src/collectors/python.d.plugin/ipfs/ipfs.chart.py
src/collectors/python.d.plugin/memcached/memcached.chart.py
src/collectors/python.d.plugin/monit/monit.chart.py
src/collectors/python.d.plugin/nsd/nsd.chart.py
diff --git a/src/collectors/python.d.plugin/ipfs/README.md b/src/collectors/python.d.plugin/ipfs/README.md
deleted file mode 120000
index eee6a07b2a..0000000000
--- a/src/collectors/python.d.plugin/ipfs/README.md
+++ /dev/null
@@ -1 +0,0 @@
-integrations/ipfs.md \ No newline at end of file
diff --git a/src/collectors/python.d.plugin/ipfs/integrations/ipfs.md b/src/collectors/python.d.plugin/ipfs/integrations/ipfs.md
deleted file mode 100644
index 2059ac95e5..0000000000
--- a/src/collectors/python.d.plugin/ipfs/integrations/ipfs.md
+++ /dev/null
@@ -1,236 +0,0 @@
-<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/python.d.plugin/ipfs/README.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/python.d.plugin/ipfs/metadata.yaml"
-sidebar_label: "IPFS"
-learn_status: "Published"
-learn_rel_path: "Collecting Metrics/Storage, Mount Points and Filesystems"
-most_popular: False
-message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
-endmeta-->
-
-# IPFS
-
-
-<img src="https://netdata.cloud/img/ipfs.svg" width="150"/>
-
-
-Plugin: python.d.plugin
-Module: ipfs
-
-<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
-
-## Overview
-
-This collector monitors IPFS server metrics about its quality and performance.
-
-It connects to an http endpoint of the IPFS server to collect the metrics
-
-This collector is supported on all platforms.
-
-This collector supports collecting metrics from multiple instances of this integration, including remote instances.
-
-
-### Default Behavior
-
-#### Auto-Detection
-
-If the endpoint is accessible by the Agent, netdata will autodetect it
-
-#### Limits
-
-Calls to the following endpoints are disabled due to IPFS bugs:
-
-/api/v0/stats/repo (https://github.com/ipfs/go-ipfs/issues/3874)
-/api/v0/pin/ls (https://github.com/ipfs/go-ipfs/issues/7528)
-
-
-#### Performance Impact
-
-The default configuration for this integration is not expected to impose a significant performance impact on the system.
-
-
-## Metrics
-
-Metrics grouped by *scope*.
-
-The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
-
-
-
-### Per IPFS instance
-
-These metrics refer to the entire monitored application.
-
-This scope has no labels.
-
-Metrics:
-
-| Metric | Dimensions | Unit |
-|:------|:----------|:----|
-| ipfs.bandwidth | in, out | kilobits/s |
-| ipfs.peers | peers | peers |
-| ipfs.repo_size | avail, size | GiB |
-| ipfs.repo_objects | objects, pinned, recursive_pins | objects |
-
-
-
-## Alerts
-
-
-The following alerts are available:
-
-| Alert name | On metric | Description |
-|:------------|:----------|:------------|
-| [ ipfs_datastore_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipfs.conf) | ipfs.repo_size | IPFS datastore utilization |
-
-
-## Setup
-
-### Prerequisites
-
-No action required.
-
-### Configuration
-
-#### File
-
-The configuration file name for this integration is `python.d/ipfs.conf`.
-
-
-You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
-
-```bash
-cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
-sudo ./edit-config python.d/ipfs.conf
-```
-#### Options
-
-There are 2 sections:
-
-* Global variables
-* One or more JOBS that can define multiple different instances to monitor.
-
-The following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.
-
-Additionally, the following collapsed table contains all the options that can be configured inside a JOB definition.
-
-Every configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.
-
-
-<details open><summary></summary>
-
-| Name | Description | Default | Required |
-|:----|:-----------|:-------|:--------:|
-| update_every | Sets the default data collection frequency. | 5 | no |
-| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |
-| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |
-| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |
-| name | The JOB's name as it will appear at the dashboard (by default is the job_name) | job_name | no |
-| url | URL to the IPFS API | no | yes |
-| repoapi | Collect repo metrics. | no | no |
-| pinapi | Set status of IPFS pinned object polling. | no | no |
-
-</details>
-
-#### Examples
-
-##### Basic (default out-of-the-box)
-
-A basic example configuration, one job will run at a time. Autodetect mechanism uses it by default.
-
-```yaml
-localhost:
- name: 'local'
- url: 'http://localhost:5001'
- repoapi: no
- pinapi: no
-
-```
-##### Multi-instance
-
-> **Note**: When you define multiple jobs, their names must be unique.
-
-Collecting metrics from local and remote instances.
-
-
-<details open><summary>Config</summary>
-
-```yaml
-localhost:
- name: 'local'
- url: 'http://localhost:5001'
- repoapi: no
- pinapi: no
-
-remote_host:
- name: 'remote'
- url: 'http://192.0.2.1:5001'
- repoapi: no
- pinapi: no
-
-```
-</details>
-
-
-
-## Troubleshooting
-
-### Debug Mode
-
-To troubleshoot issues with the `ipfs` collector, run the `python.d.plugin` with the debug option enabled. The output
-should give you clues as to why the collector isn't working.
-
-- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
- your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
-
- ```bash
- cd /usr/libexec/netdata/plugins.d/
- ```
-
-- Switch to the `netdata` user.
-
- ```bash
- sudo -u netdata -s
- ```
-
-- Run the `python.d.plugin` to debug the collector:
-
- ```bash
- ./python.d.plugin ipfs debug trace
- ```
-
-### Getting Logs
-
-If you're encountering problems with the `ipfs` collector, follow these steps to retrieve logs and identify potential issues:
-
-- **Run the command** specific to your system (systemd, non-systemd, or Docker container).
-- **Examine the output** for any warnings or error messages that might indicate issues. These messages should provide clues about the root cause of the problem.
-
-#### System with systemd
-
-Use the following command to view logs generated since the last Netdata service restart:
-
-```bash
-journalctl _SYSTEMD_INVOCATION_ID="$(systemctl show --value --property=InvocationID netdata)" --namespace=netdata --grep ipfs
-```
-
-#### System without systemd
-
-Locate the collector log file, typically at `/var/log/netdata/collector.log`, and use `grep` to filter for collector's name:
-
-```bash
-grep ipfs /var/log/netdata/collector.log
-```
-
-**Note**: This method shows logs from all restarts. Focus on the **latest entries** for troubleshooting current issues.
-
-#### Docker Container
-
-If your Netdata runs in a Docker container named "netdata" (replace if different), use this command:
-
-```bash
-docker logs netdata 2>&1 | grep ipfs
-```
-
-
diff --git a/src/collectors/python.d.plugin/ipfs/ipfs.chart.py b/src/collectors/python.d.plugin/ipfs/ipfs.chart.py
deleted file mode 100644
index abfc9c4924..0000000000
--- a/src/collectors/python.d.plugin/ipfs/ipfs.chart.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# -*- coding: utf-8 -*-
-# Description: IPFS netdata python.d module
-# Authors: davidak
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-import json
-
-from bases.FrameworkServices.UrlService import UrlService
-
-ORDER = [
- 'bandwidth',
- 'peers',
- 'repo_size',
- 'repo_objects',
-]
-
-CHARTS = {
- 'bandwidth': {
- 'options': [None, 'IPFS Bandwidth', 'kilobits/s', 'Bandwidth', 'ipfs.bandwidth', 'line'],
- 'lines': [
- ['in', None, 'absolute', 8, 1000],
- ['out', None, 'absolute', -8, 1000]
- ]
- },
- 'peers': {
- 'options': [None, 'IPFS Peers', 'peers', 'Peers', 'ipfs.peers', 'line'],
- 'lines': [
- ['peers', None, 'absolute']
- ]
- },
- 'repo_size': {
- 'options': [None, 'IPFS Repo Size', 'GiB', 'Size', 'ipfs.repo_size', 'area'],
- 'lines': [
- ['avail', None, 'absolute', 1, 1 << 30],
- ['size', None, 'absolute', 1, 1 << 30],
- ]
- },
- 'repo_objects': {
- 'options': [None, 'IPFS Repo Objects', 'objects', 'Objects', 'ipfs.repo_objects', 'line'],
- 'lines': [
- ['objects', None, 'absolute', 1, 1],
- ['pinned', None, 'absolute', 1, 1],
- ['recursive_pins', None, 'absolute', 1, 1]
- ]
- }
-}
-
-SI_zeroes = {
- 'k': 3,
- 'm': 6,
- 'g': 9,
- 't': 12,
- 'p': 15,
- 'e': 18,
- 'z': 21,
- 'y': 24
-}
-
-
-class Service(UrlService):
- def __init__(self, configuration=None, name=None):
- UrlService.__init__(self, configuration=configuration, name=name)
- self.order = ORDER
- self.definitions = CHARTS
- self.baseurl = self.configuration.get('url', 'http://localhost:5001')
- self.method = "POST"
- self.do_pinapi = self.configuration.get('pinapi')
- self.do_repoapi = self.configuration.get('repoapi')
- self.__storage_max = None
-
- def _get_json(self, sub_url):
- """
- :return: json decoding of the specified url
- """
- self.url = self.baseurl + sub_url
- try:
- return json.loads(self._get_raw_data())
- except (TypeError, ValueError):
- return dict()
-
- @staticmethod
- def _recursive_pins(keys):
- return sum(1 for k in keys if keys[k]['Type'] == b'recursive')
-
- @staticmethod
- def _dehumanize(store_max):
- # convert from '10Gb' to 10000000000
- if not isinstance(store_max, int):
- store_max = store_max.lower()
- if store_max.endswith('b'):
- val, units = store_max[:-2], store_max[-2]
- if units in SI_zeroes:
- val += '0' * SI_zeroes[units]
- store_max = val
- try:
- store_max = int(store_max)
- except (TypeError, ValueError):
- store_max = None
- return store_max
-
- def _storagemax(self, store_cfg):
- if self.__storage_max is None:
- self.__storage_max = self._dehumanize(store_cfg)
- return self.__storage_max
-
- def _get_data(self):
- """
- Get data from API
- :return: dict
- """
- # suburl : List of (result-key, original-key, transform-func)
- cfg = {
- '/api/v0/stats/bw':
- [
- ('in', 'RateIn', int),
- ('out', 'RateOut', int),
- ],
- '/api/v0/swarm/peers':
- [
- ('peers', 'Peers', len),
- ],
- }
- if self.do_repoapi:
- cfg.update({
- '/api/v0/stats/repo':
- [
- ('size', 'RepoSize', int),
- ('objects', 'NumObjects', int),
- ('avail', 'StorageMax', self._storagemax),
- ],
- })
-
- if self.do_pinapi:
- cfg.update({
- '/api/v0/pin/ls':
- [
- ('pinned', 'Keys', len),
- ('recursive_pins', 'Keys', self._recursive_pins),
- ]
- })
- r = dict()
- for suburl in cfg:
- in_json = self._get_json(suburl)
- for new_key, orig_key, xmute in cfg[suburl]:
- try:
- r[new_key] = xmute(in_json[orig_key])
- except Exception as error:
- self.debug(error)
- return r or None
diff --git a/src/collectors/python.d.plugin/ipfs/ipfs.conf b/src/collectors/python.d.plugin/ipfs/ipfs.conf
deleted file mode 100644
index 8b167b3995..0000000000
--- a/src/collectors/python.d.plugin/ipfs/ipfs.conf
+++ /dev/null
@@ -1,82 +0,0 @@
-# netdata python.d.plugin configuration for ipfs
-#
-# This file is in YaML format. Generally the format is:
-#
-# name: value
-#
-# There are 2 sections:
-# - global variables
-# - one or more JOBS
-#
-# JOBS allow you to collect values from multiple sources.
-# Each source will have its own set of charts.
-#
-# JOB parameters have to be indented (using spaces only, example below).
-
-# ----------------------------------------------------------------------
-# Global Variables
-# These variables set the defaults for all JOBs, however each JOB
-# may define its own, overriding the defaults.
-
-# update_every sets the default data collection frequency.
-# If unset, the python.d.plugin default is used.
-# update_every: 1
-
-# priority controls the order of charts at the netdata dashboard.
-# Lower numbers move the charts towards the top of the page.
-# If unset, the default for python.d.plugin is used.
-# priority: 60000
-
-# penalty indicates whether to apply penalty to update_every in case of failures.
-# Penalty will increase every 5 failed updates in a row. Maximum penalty is 10 minutes.
-# penalty: yes
-
-# autodetection_retry sets the job re-check interval in seconds.
-# The job is not deleted if check fails.
-# Attempts to start the job are made once every autodetection_retry.
-# This feature is disabled by default.
-# autodetection_retry: 0
-
-# ----------------------------------------------------------------------
-# JOBS (data collection sources)
-#
-# The default JOBS share the same *name*. JOBS with the same name
-# are mutually exclusive. Only one of them will be allowed running at
-# any time. This allows autodetection to try several alternatives and
-# pick the one that works.
-#
-# Any number of jobs is supported.
-#
-# All python.d.plugin JOBS (for all its modules) support a set of
-# predefined parameters. These are:
-#
-# job_name:
-# name: myname # the JOB's name as it will appear at the
-# # dashboard (by default is the job_name)
-# # JOBs sharing a name are mutually exclusive
-# update_every: 1 # the JOB's data collection frequency
-# priority: 60000 # the JOB's order on the dashboard
-# penalty: yes # the JOB's penalty
-# autodetection_retry: 0 # the JOB's re-check interval in seconds
-#
-# Additionally to the above, ipfs also supports the following:
-#
-# url: 'URL' # URL to the IPFS API
-# repoapi: no # Collect repo metrics
-# # Currently defaults to disabled due to IPFS Bug
-# # https://github.com/ipfs/go-ipfs/issues/7528
-# # resulting in very high CPU Usage
-# pinapi: no # Set status of IPFS pinned object polling
-# # Currently defaults to disabled due to IPFS Bug
-# # https://github.com/ipfs/go-ipfs/issues/3874
-# # resulting in very high CPU Usage
-#
-# ----------------------------------------------------------------------
-# AUTO-DETECTION JOBS
-# only one of them will run (they have the same name)
-
-localhost:
- name: 'local'
- url: 'http://localhost:5001'
- repoapi: no
- pinapi: no
diff --git a/src/collectors/python.d.plugin/ipfs/metadata.yaml b/src/collectors/python.d.plugin/ipfs/metadata.yaml
deleted file mode 100644
index 55c39e31ec..0000000000
--- a/src/collectors/python.d.plugin/ipfs/metadata.yaml
+++ /dev/null
@@ -1,172 +0,0 @@
-plugin_name: python.d.plugin
-modules:
- - meta:
- plugin_name: python.d.plugin
- module_name: ipfs
- monitored_instance:
- name: IPFS
- link: "https://ipfs.tech/"
- categories:
- - data-collection.storage-mount-points-and-filesystems
- icon_filename: "ipfs.svg"
- related_resources:
- integrations:
- list: []
- info_provided_to_referring_integrations:
- description: ""
- keywords: []
- most_popular: false
- overview:
- data_collection:
- metrics_description: "This collector monitors IPFS server metrics about its quality and performance."
- method_description: "It connects to an http endpoint of the IPFS server to collect the metrics"
- supported_platforms:
- include: []
- exclude: []
- multi_instance: true
- additional_permissions:
- description: ""
- default_behavior:
- auto_detection:
- description: "If the endpoint is accessible by the Agent, netdata will autodetect it"
- limits:
- description: |
- Calls to the following endpoints are disabled due to IPFS bugs:
-
- /api/v0/stats/repo (https://github.com/ipfs/go-ipfs/issues/3874)
- /api/v0/pin/ls (https://github.com/ipfs/go-ipfs/issues/7528)
- performance_impact:
- description: ""
- setup:
- prerequisites:
- list: []
- configuration:
- file:
- name: "python.d/ipfs.conf"
- options:
- description: |
- There are 2 sections:
-
- * Global variables
- * One or more JOBS that can define multiple different instances to monitor.
-
- The following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.
-
- Additionally, the following collapsed table contains all the options that can be configured inside a JOB definition.
-
- Every configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.
- folding:
- title: ""
- enabled: true
- list:
- - name: update_every
- description: Sets the default data collection frequency.
- default_value: 5
- required: false
- - name: priority
- description: Controls the order of charts at the netdata dashboard.
- default_value: 60000
- required: false
- - name: autodetection_retry
- description: Sets the job re-check interval in seconds.
- default_value: 0
- required: false
- - name: penalty
- description: Indicates whether to apply penalty to update_every in case of failures.
- default_value: yes
- required: false
- - name: name
- description: The JOB's name as it will appear at the dashboard (by default is the job_name)
- default_value: job_name
- required: false
- - name: url
- description: URL to the IPFS API
- default_value: no
- required: true
- - name: repoapi
- description: Collect repo metrics.
- default_value: no
- required: false
- - name: pinapi
- description: Set status of IPFS pinned object polling.
- default_value: no
- required: false
- examples:
- folding:
- enabled: true
- title: "Config"
- list:
- - name: Basic (default out-of-the-box)
- description: A basic example configuration, one job will run at a time. Autodetect mechanism uses it by default.
- folding:
- enabled: false
- config: |
- localhost:
- name: 'local'
- url: 'http://localhost:5001'
- repoapi: no
- pinapi: no
- - name: Multi-instance
- description: |
- > **Note**: When you define multiple jobs, their names must be unique.
-
- Collecting metrics from local and remote instances.
- config: |
- localhost:
- name: 'local'
- url: 'http://localhost:5001'
- repoapi: no
- pinapi: no
-
- remote_host:
- name: 'remote'
- url: 'http://192.0.2.1:5001'
- repoapi: no
- pinapi: no
- troubleshooting:
- problems:
- list: []
- alerts:
- - name: ipfs_datastore_usage
- link: https://github.com/netdata/netdata/blob/master/src/health/health.d/ipfs.conf
- metric: ipfs.repo_size
- info: IPFS datastore utilization
- metrics:
- folding:
- title: Metrics
- enabled: false
- description: ""
- availability: []
- scopes:
- - name: global
- description: "These metrics refer to the entire monitored application."
- labels: []
- metrics:
- - name: ipfs.bandwidth
- description: IPFS Bandwidth
- unit: "kilobits/s"
- chart_type: line
- dimensions:
- - name: in
- - name: out
- - name: ipfs.peers
- description: IPFS Peers
- unit: "peers"
- chart_type: line
- dimensions:
- - name: peers
- - name: ipfs.repo_size
- description: IPFS Repo Size
- unit: "GiB"
- chart_type: area
- dimensions:
- - name: avail
- - name: size
- - name: ipfs.repo_objects
- description: IPFS Repo Objects
- unit: "objects"
- chart_type: line
- dimensions:
- - name: objects
- - name: pinned
- - name: recursive_pins
diff --git a/src/collectors/python.d.plugin/python.d.conf b/src/collectors/python.d.plugin/python.d.conf
index 7a87cd7463..51067d90fe 100644
--- a/src/collectors/python.d.plugin/python.d.conf
+++ b/src/collectors/python.d.plugin/python.d.conf
@@ -40,7 +40,6 @@ example: no
go_expvar: no
# haproxy: yes
# icecast: yes
-# ipfs: yes
# memcached: yes
# monit: yes
# nvidia_smi: yes
@@ -73,6 +72,7 @@ fail2ban: no # Removed (replaced with go.d/fail2ban).
freeradius: no # Removed (replaced with go.d/freeradius).
hddtemp: no # Removed (replaced with go.d/hddtemp).
hpssa: no # Removed (replaced with go.d/hpssa).
+ipfs: no # Removed (replaced with go.d/ipfs).
litespeed: no # Removed (replaced with go.d/litespeed).
megacli: no # Removed (replaced with go.d/megacli).
mongodb: no # Removed (replaced with go.d/mongodb).
diff --git a/src/go/plugin/go.d/README.md b/src/go/plugin/go.d/README.md
index 7aa2be1366..9b0d207cdc 100644
--- a/src/go/plugin/go.d/README.md
+++ b/src/go/plugin/go.d/README.md
@@ -82,6 +82,7 @@ see the appropriate collector readme.
| [hpssa](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/hpssa) | HPE Smart Array |
| [httpcheck](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/httpcheck) | Any HTTP Endpoint |
| [intelgpu](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/intelgpu) | Intel integrated GPU |
+| [ipfs](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/ipfs) | IPFS |
| [isc_dhcpd](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/isc_dhcpd) | ISC DHCP |
| [k8s_kubelet](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/k8s_kubelet) | Kubelet |
| [k8s_kubeproxy](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/k8s_kubeproxy) | Kube-proxy |
diff --git a/src/go/plugin/go.d/config/go.d.conf b/src/go/plugin/go.d/config/go.d.conf
index 39e3988480..ee1d4ce4ee 100644
--- a/src/go/plugin/go.d/config/go.d.conf
+++ b/src/go/plugin/go.d/config/go.d.conf
@@ -47,6 +47,7 @@ modules:
# hpssa: yes
# httpcheck: yes
# intelgpu: yes
+# ipfs: yes
# isc_dhcpd: yes
# k8s_kubelet: yes
# k8s_kubeproxy: yes
diff --git a/src/go/plugin/go.d/config/go.d/ipfs.conf b/src/go/plugin/go.d/config/go.d/ipfs.conf
new file mode 100644
index 0000000000..127006de58
--- /dev/null
+++ b/src/go/plugin/go.d/config/go.d/ipfs.conf
@@ -0,0 +1,6 @@
+## All available configuration options, their descriptions and default values:
+## https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/ipfs#readme
+
+#jobs:
+# - name: local
+# url: http://localhost:5001
diff --git a/src/go/plugin/go.d/config/go.d/sd/docker.conf b/src/go/plugin/go.d/config/go.d/sd/docker.conf
index b0f1a3aa9d..6569de8b30 100644
--- a/src/go/plugin/go.d/config/go.d/sd/docker.conf
+++ b/src/go/plugin/go.d/config/go.d/sd/docker.conf
@@ -38,6 +38,8 @@ classify:
expr: '{{ or (eq .PrivatePort "5984") (match "sp" .Image "couchdb couchdb:*") }}'
- tags: "elasticsearch"
expr: '{{ or (eq .PrivatePort "9200") (match "sp" .Image "elasticsearch elasticsearch:* */elasticsearch */elasticsearch:* */opensearch */opensearch:*") }}'
+ - tags: "ipfs"
+ expr: '{{ and (eq .PrivatePort "5001") (match "sp" .Image "ipfs/kubo ipfs/kubo:*") }}'
- tags: "lighttpd"
expr: '{{ match "sp" .Image "*/lighttpd */lighttpd:*" }}'
- tags: "mongodb"
@@ -115,6 +117,11 @@ compose:
username: admin
password: admin
{{ end -}}
+ - selector: "ipfs"
+ template: |
+ module: ipfs
+ name: docker_{{.Name}}