Browse Source

remove python.d/springboot (#14075)

Ilya Mashchenko 2 years ago
parent
commit
76ba49765e

+ 1 - 3
collectors/COLLECTORS.md

@@ -84,10 +84,8 @@ configure any of these collectors according to your setup and infrastructure.
 - [Go applications](/collectors/python.d.plugin/go_expvar/README.md): Monitor any Go application that exposes its
   metrics with the  `expvar` package from the Go standard library.
 - [Java Spring Boot 2
-  applications](https://learn.netdata.cloud/docs/agent/collectors/go.d.plugin/modules/springboot2/) (Go version):
+  applications](https://learn.netdata.cloud/docs/agent/collectors/go.d.plugin/modules/springboot2/):
   Monitor running Java Spring Boot 2 applications that expose their metrics with the use of the Spring Boot Actuator.
-- [Java Spring Boot 2 applications](/collectors/python.d.plugin/springboot/README.md) (Python version): Monitor
-  running Java Spring Boot applications that expose their metrics with the use of the Spring Boot Actuator.
 - [statsd](/collectors/statsd.plugin/README.md): Implement a high performance `statsd` server for Netdata.
 - [phpDaemon](https://learn.netdata.cloud/docs/agent/collectors/go.d.plugin/modules/phpdaemon/): Collect worker
   statistics (total, active, idle), and uptime for web and network applications.

+ 0 - 1
collectors/python.d.plugin/Makefile.am

@@ -83,7 +83,6 @@ include samba/Makefile.inc
 include sensors/Makefile.inc
 include smartd_log/Makefile.inc
 include spigotmc/Makefile.inc
-include springboot/Makefile.inc
 include squid/Makefile.inc
 include tomcat/Makefile.inc
 include tor/Makefile.inc

+ 0 - 1
collectors/python.d.plugin/python.d.conf

@@ -73,7 +73,6 @@ logind: no
 # sensors: yes
 # smartd_log: yes
 # spigotmc: yes
-# springboot: yes
 # squid: yes
 # traefik: yes
 # tomcat: yes

+ 0 - 13
collectors/python.d.plugin/springboot/Makefile.inc

@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# THIS IS NOT A COMPLETE Makefile
-# IT IS INCLUDED BY ITS PARENT'S Makefile.am
-# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT
-
-# install these files
-dist_python_DATA       += springboot/springboot.chart.py
-dist_pythonconfig_DATA += springboot/springboot.conf
-
-# do not install these files, but include them in the distribution
-dist_noinst_DATA       += springboot/README.md springboot/Makefile.inc
-

+ 0 - 145
collectors/python.d.plugin/springboot/README.md

@@ -1,145 +0,0 @@
-<!--
-title: "Java Spring Boot 2 application monitoring with Netdata"
-custom_edit_url: https://github.com/netdata/netdata/edit/master/collectors/python.d.plugin/springboot/README.md
-sidebar_label: "Java Spring Boot 2 applications"
--->
-
-# Java Spring Boot 2 application monitoring with Netdata
-
-Monitors one or more Java Spring-boot applications depending on configuration.
-Netdata can be used to monitor running Java [Spring Boot](https://spring.io/) applications that expose their metrics with the use of the **Spring Boot Actuator** included in Spring Boot library.
-
-## Configuration
-
-The Spring Boot Actuator exposes these metrics over HTTP and is very easy to use:
-
--   add `org.springframework.boot:spring-boot-starter-actuator` to your application dependencies
--   set `endpoints.metrics.sensitive=false` in your `application.properties`
-
-You can create custom Metrics by add and inject a PublicMetrics in your application.
-This is a example to add custom metrics:
-
-```java
-package com.example;
-
-import org.springframework.boot.actuate.endpoint.PublicMetrics;
-import org.springframework.boot.actuate.metrics.Metric;
-import org.springframework.stereotype.Service;
-
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryPoolMXBean;
-import java.util.ArrayList;
-import java.util.Collection;
-
-@Service
-public class HeapPoolMetrics implements PublicMetrics {
-
-    private static final String PREFIX = "mempool.";
-    private static final String KEY_EDEN = PREFIX + "eden";
-    private static final String KEY_SURVIVOR = PREFIX + "survivor";
-    private static final String KEY_TENURED = PREFIX + "tenured";
-
-    @Override
-    public Collection<Metric<?>> metrics() {
-        Collection<Metric<?>> result = new ArrayList<>(4);
-        for (MemoryPoolMXBean mem : ManagementFactory.getMemoryPoolMXBeans()) {
-            String poolName = mem.getName();
-            String name = null;
-            if (poolName.indexOf("Eden Space") != -1) {
-                name = KEY_EDEN;
-            } else if (poolName.indexOf("Survivor Space") != -1) {
-                name = KEY_SURVIVOR;
-            } else if (poolName.indexOf("Tenured Gen") != -1 || poolName.indexOf("Old Gen") != -1) {
-                name = KEY_TENURED;
-            }
-
-            if (name != null) {
-                result.add(newMemoryMetric(name, mem.getUsage().getMax()));
-                result.add(newMemoryMetric(name + ".init", mem.getUsage().getInit()));
-                result.add(newMemoryMetric(name + ".committed", mem.getUsage().getCommitted()));
-                result.add(newMemoryMetric(name + ".used", mem.getUsage().getUsed()));
-            }
-        }
-        return result;
-    }
-
-    private Metric<Long> newMemoryMetric(String name, long bytes) {
-        return new Metric<>(name, bytes / 1024);
-    }
-}
-```
-
-Please refer [Spring Boot Actuator: Production-ready Features](https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready) and [81. Actuator - Part IX. ‘How-to’ guides](https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-actuator) for more information.
-
-## Charts
-
-1.  **Response Codes** in requests/s
-
-    -   1xx
-    -   2xx
-    -   3xx
-    -   4xx
-    -   5xx
-    -   others
-
-2.  **Threads**
-
-    -   daemon
-    -   total
-
-3.  **GC Time** in milliseconds and **GC Operations** in operations/s
-
-    -   Copy
-    -   MarkSweep
-    -   ...
-
-4.  **Heap Memory Usage** in KB
-
-    -   used
-    -   committed
-
-## Usage
-
-Edit the `python.d/springboot.conf` configuration file using `edit-config` from the Netdata [config
-directory](/docs/configure/nodes.md), which is typically at `/etc/netdata`.
-
-```bash
-cd /etc/netdata   # Replace this path with your Netdata config directory, if different
-sudo ./edit-config python.d/springboot.conf
-```
-
-This module defines some common charts, and you can add custom charts by change the configurations.
-
-The configuration format is like:
-
-```yaml
-<id>:
-  name: '<name>'
-  url:  '<metrics endpoint>' # ex. http://localhost:8080/metrics
-  user: '<username>'         # optional
-  pass: '<password>'         # optional
-  defaults:
-    [<chart-id>]: true|false
-  extras:
-  - id: '<chart-id>'
-    options:
-      title:  '***'
-      units:  '***'
-      family: '***'
-      context: 'springboot.***'
-      charttype: 'stacked' | 'area' | 'line'
-    lines:
-    - { dimension: 'myapp_ok',  name: 'ok',  algorithm: 'absolute', multiplier: 1, divisor: 1} # it shows "myapp.ok" metrics
-    - { dimension: 'myapp_ng',  name: 'ng',  algorithm: 'absolute', multiplier: 1, divisor: 1} # it shows "myapp.ng" metrics
-```
-
-By default, it creates `response_code`, `threads`, `gc_time`, `gc_ope` abd `heap` charts.
-You can disable the default charts by set `defaults.<chart-id>: false`.
-
-The dimension name of extras charts should replace `.` to `_`.
-
-Please check
-[springboot.conf](https://raw.githubusercontent.com/netdata/netdata/master/collectors/python.d.plugin/springboot/springboot.conf)
-for more examples.
-
-

+ 0 - 160
collectors/python.d.plugin/springboot/springboot.chart.py

@@ -1,160 +0,0 @@
-# -*- coding: utf-8 -*-
-# Description: tomcat netdata python.d module
-# Author: Wing924
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-import json
-
-from bases.FrameworkServices.UrlService import UrlService
-
-DEFAULT_ORDER = [
-    'response_code',
-    'threads',
-    'gc_time',
-    'gc_ope',
-    'heap',
-]
-
-DEFAULT_CHARTS = {
-    'response_code': {
-        'options': [None, "Response Codes", "requests/s", "response", "springboot.response_code", "stacked"],
-        'lines': [
-            ["resp_other", 'Other', 'incremental'],
-            ["resp_1xx", '1xx', 'incremental'],
-            ["resp_2xx", '2xx', 'incremental'],
-            ["resp_3xx", '3xx', 'incremental'],
-            ["resp_4xx", '4xx', 'incremental'],
-            ["resp_5xx", '5xx', 'incremental'],
-        ]
-    },
-    'threads': {
-        'options': [None, "Threads", "current threads", "threads", "springboot.threads", "area"],
-        'lines': [
-            ["threads_daemon", 'daemon', 'absolute'],
-            ["threads", 'total', 'absolute'],
-        ]
-    },
-    'gc_time': {
-        'options': [None, "GC Time", "milliseconds", "garbage collection", "springboot.gc_time", "stacked"],
-        'lines': [
-            ["gc_copy_time", 'Copy', 'incremental'],
-            ["gc_marksweepcompact_time", 'MarkSweepCompact', 'incremental'],
-            ["gc_parnew_time", 'ParNew', 'incremental'],
-            ["gc_concurrentmarksweep_time", 'ConcurrentMarkSweep', 'incremental'],
-            ["gc_ps_scavenge_time", 'PS Scavenge', 'incremental'],
-            ["gc_ps_marksweep_time", 'PS MarkSweep', 'incremental'],
-            ["gc_g1_young_generation_time", 'G1 Young Generation', 'incremental'],
-            ["gc_g1_old_generation_time", 'G1 Old Generation', 'incremental'],
-        ]
-    },
-    'gc_ope': {
-        'options': [None, "GC Operations", "operations/s", "garbage collection", "springboot.gc_ope", "stacked"],
-        'lines': [
-            ["gc_copy_count", 'Copy', 'incremental'],
-            ["gc_marksweepcompact_count", 'MarkSweepCompact', 'incremental'],
-            ["gc_parnew_count", 'ParNew', 'incremental'],
-            ["gc_concurrentmarksweep_count", 'ConcurrentMarkSweep', 'incremental'],
-            ["gc_ps_scavenge_count", 'PS Scavenge', 'incremental'],
-            ["gc_ps_marksweep_count", 'PS MarkSweep', 'incremental'],
-            ["gc_g1_young_generation_count", 'G1 Young Generation', 'incremental'],
-            ["gc_g1_old_generation_count", 'G1 Old Generation', 'incremental'],
-        ]
-    },
-    'heap': {
-        'options': [None, "Heap Memory Usage", "KiB", "heap memory", "springboot.heap", "area"],
-        'lines': [
-            ["heap_committed", 'committed', "absolute"],
-            ["heap_used", 'used', "absolute"],
-        ]
-    }
-}
-
-
-class ExtraChartError(ValueError):
-    pass
-
-
-class Service(UrlService):
-    def __init__(self, configuration=None, name=None):
-        UrlService.__init__(self, configuration=configuration, name=name)
-        self.url = self.configuration.get('url', "http://localhost:8080/metrics")
-        self._setup_charts()
-
-    def _get_data(self):
-        """
-        Format data received from http request
-        :return: dict
-        """
-        raw_data = self._get_raw_data()
-        if not raw_data:
-            return None
-
-        try:
-            data = json.loads(raw_data)
-        except ValueError:
-            self.debug('%s is not a valid JSON page' % self.url)
-            return None
-
-        result = {
-            'resp_1xx': 0,
-            'resp_2xx': 0,
-            'resp_3xx': 0,
-            'resp_4xx': 0,
-            'resp_5xx': 0,
-            'resp_other': 0,
-        }
-
-        for key, value in data.iteritems():
-            if 'counter.status.' in key:
-                status_type = key[15:16] + 'xx'
-                if status_type[0] not in '12345':
-                    status_type = 'other'
-                result['resp_' + status_type] += value
-            else:
-                result[key.replace('.', '_')] = value
-
-        return result or None
-
-    def _setup_charts(self):
-        self.order = []
-        self.definitions = {}
-        defaults = self.configuration.get('defaults', {})
-
-        for chart in DEFAULT_ORDER:
-            if defaults.get(chart, True):
-                self.order.append(chart)
-                self.definitions[chart] = DEFAULT_CHARTS[chart]
-
-        for extra in self.configuration.get('extras', []):
-            self._add_extra_chart(extra)
-            self.order.append(extra['id'])
-
-    def _add_extra_chart(self, chart):
-        chart_id = chart.get('id', None) or self.die('id is not defined in extra chart')
-        options = chart.get('options', None) or self.die('option is not defined in extra chart: %s' % chart_id)
-        lines = chart.get('lines', None) or self.die('lines is not defined in extra chart: %s' % chart_id)
-
-        title = options.get('title', None) or self.die('title is missing: %s' % chart_id)
-        units = options.get('units', None) or self.die('units is missing: %s' % chart_id)
-        family = options.get('family', title)
-        context = options.get('context', 'springboot.' + title)
-        charttype = options.get('charttype', 'line')
-
-        result = {
-            'options': [None, title, units, family, context, charttype],
-            'lines': [],
-        }
-
-        for line in lines:
-            dimension = line.get('dimension', None) or self.die('dimension is missing: %s' % chart_id)
-            name = line.get('name', dimension)
-            algorithm = line.get('algorithm', 'absolute')
-            multiplier = line.get('multiplier', 1)
-            divisor = line.get('divisor', 1)
-            result['lines'].append([dimension, name, algorithm, multiplier, divisor])
-
-        self.definitions[chart_id] = result
-
-    @staticmethod
-    def die(error_message):
-        raise ExtraChartError(error_message)

+ 0 - 118
collectors/python.d.plugin/springboot/springboot.conf

@@ -1,118 +0,0 @@
-# netdata python.d.plugin configuration for springboot
-#
-# 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)
-#
-# 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, this plugin also supports the following:
-#
-#     url: 'http://127.0.0.1/metrics'       # the URL of the spring boot actuator metrics
-#
-# if the URL is password protected, the following are supported:
-#
-#     user: 'username'
-#     pass: 'password'
-#
-#     defaults:
-#       [chart_id]: true | false    # enables/disables default charts, defaults true.
-#     extras: {}              # defines extra charts to monitor, please see the example below
-#     - id: [chart_id]
-#       options: {}
-#       lines: []
-#
-# If all defaults is disabled and no extra charts are defined, this module will disable itself, as it has no data to
-# collect.
-#
-# Configuration example
-# ---------------------
-# example:
-#   name: 'example'
-#   url: 'http://localhost:8080/metrics'
-#   defaults:
-#     response_code: true
-#     threads: true
-#     gc_time: true
-#     gc_ope: true
-#     heap: false
-#   extras:
-#   - id: 'heap'
-#     options: { title: 'Heap Memory Usage', units: 'KB', family: 'heap memory', context: 'springboot.heap', charttype: 'stacked' }
-#     lines:
-#     - { dimension: 'mem_free',              name: 'free'}
-#     - { dimension: 'mempool_eden_used',     name: 'eden',     algorithm: 'absolute', multiplier: 1, divisor: 1}
-#     - { dimension: 'mempool_survivor_used', name: 'survivor', algorithm: 'absolute', multiplier: 1, divisor: 1}
-#     - { dimension: 'mempool_tenured_used',  name: 'tenured',  algorithm: 'absolute', multiplier: 1, divisor: 1}
-#   - id: 'heap_eden'
-#     options: { title: 'Eden Memory Usage', units: 'KB', family: 'heap memory', context: 'springboot.heap_eden', charttype: 'area' }
-#     lines:
-#     - { dimension: 'mempool_eden_used',      name: 'used'}
-#     - { dimension: 'mempool_eden_committed', name: 'committed'}
-#   - id: 'heap_survivor'
-#     options: { title: 'Survivor Memory Usage', units: 'KB', family: 'heap memory', context: 'springboot.heap_survivor', charttype: 'area' }
-#     lines:
-#     - { dimension: 'mempool_survivor_used',      name: 'used'}
-#     - { dimension: 'mempool_survivor_committed', name: 'committed'}
-#   - id: 'heap_tenured'
-#     options: { title: 'Tenured Memory Usage', units: 'KB', family: 'heap memory', context: 'springboot.heap_tenured', charttype: 'area' }
-#     lines:
-#     - { dimension: 'mempool_tenured_used',      name: 'used'}
-#     - { dimension: 'mempool_tenured_committed', name: 'committed'}
-
-
-local:
-  name: 'local'
-  url: 'http://localhost:8080/metrics'
-
-local_ip:
-  name: 'local'
-  url: 'http://127.0.0.1:8080/metrics'