diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-02-06 16:11:30 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-02-06 16:11:30 +0000 |
commit | aa2fe8ccbfcb117efa207d10229eeeac5d0f97c7 (patch) | |
tree | 941cbdd387b41c1a81587c20a6df9f0e5e0ff7ab /collectors/python.d.plugin/springboot | |
parent | Adding upstream version 1.37.1. (diff) | |
download | netdata-aa2fe8ccbfcb117efa207d10229eeeac5d0f97c7.tar.xz netdata-aa2fe8ccbfcb117efa207d10229eeeac5d0f97c7.zip |
Adding upstream version 1.38.0.upstream/1.38.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'collectors/python.d.plugin/springboot')
-rw-r--r-- | collectors/python.d.plugin/springboot/Makefile.inc | 13 | ||||
-rw-r--r-- | collectors/python.d.plugin/springboot/README.md | 145 | ||||
-rw-r--r-- | collectors/python.d.plugin/springboot/springboot.chart.py | 160 | ||||
-rw-r--r-- | collectors/python.d.plugin/springboot/springboot.conf | 118 |
4 files changed, 0 insertions, 436 deletions
diff --git a/collectors/python.d.plugin/springboot/Makefile.inc b/collectors/python.d.plugin/springboot/Makefile.inc deleted file mode 100644 index 06775f937..000000000 --- a/collectors/python.d.plugin/springboot/Makefile.inc +++ /dev/null @@ -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 - diff --git a/collectors/python.d.plugin/springboot/README.md b/collectors/python.d.plugin/springboot/README.md deleted file mode 100644 index cdbc9a900..000000000 --- a/collectors/python.d.plugin/springboot/README.md +++ /dev/null @@ -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. - - diff --git a/collectors/python.d.plugin/springboot/springboot.chart.py b/collectors/python.d.plugin/springboot/springboot.chart.py deleted file mode 100644 index dbe11d6b8..000000000 --- a/collectors/python.d.plugin/springboot/springboot.chart.py +++ /dev/null @@ -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) diff --git a/collectors/python.d.plugin/springboot/springboot.conf b/collectors/python.d.plugin/springboot/springboot.conf deleted file mode 100644 index 0cb369cd8..000000000 --- a/collectors/python.d.plugin/springboot/springboot.conf +++ /dev/null @@ -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' |