Skip to content
This repository was archived by the owner on Mar 21, 2022. It is now read-only.

Intergration of Prometheus and Grafan #126

Open
wants to merge 15 commits into
base: dev-1
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions analysis-service/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,21 @@ dependencies {
implementation project(':kiekeradapter')

// Teetime Pipe and Filter Framework
implementation group: 'net.sourceforge.teetime', name: 'teetime', version: '3.0-SNAPSHOT'
implementation group: 'net.sourceforge.teetime', name: 'teetime', version: '3.1-SNAPSHOT'
implementation group: 'net.sourceforge.teetime-stages', name: 'teetime-stages', version: '3.0-SNAPSHOT'

// Kieker Monitoring Framework
implementation group: 'net.kieker-monitoring', name: 'kieker', version: '1.14-SNAPSHOT'

// Prometheus
// Base
implementation group: 'io.prometheus', name: 'simpleclient', version: '0.8.1'
// Exposition server
implementation group: 'io.prometheus', name: 'simpleclient_httpserver', version: '0.8.1'
// JVM Metrics
implementation group: 'io.prometheus', name: 'simpleclient_hotspot', version: '0.8.1'


}

// disable integration tests, since there are none
Expand Down Expand Up @@ -76,4 +86,4 @@ task spotbugs {

dependsOn 'spotbugsMain'
dependsOn 'spotbugsTest'
}
}
23 changes: 23 additions & 0 deletions analysis-service/src/main/java/net/explorviz/analysis/Main.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,33 @@
package net.explorviz.analysis;

import io.prometheus.client.exporter.HTTPServer;
import io.prometheus.client.hotspot.DefaultExports;
import net.explorviz.kiekeradapter.main.KiekerAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

public class Main {

private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);

private static final int PROM_PORT = 1234;

public static void main(final String[] args) {


try {
// Starts the server
new HTTPServer(PROM_PORT);
// JVM Metrics
DefaultExports.initialize();
LOGGER.info("Started prometheus server on port " + PROM_PORT);
} catch (IOException e) {
LOGGER.warn("Failed to start metrics HTTP server", e);
}


KiekerAdapter.getInstance().startReader();
}

Expand Down
11 changes: 11 additions & 0 deletions broadcast-service/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,17 @@ dependencies {
implementation group: 'org.glassfish.jersey.media', name: 'jersey-media-sse', version: '2.27'

implementation group: 'org.apache.kafka', name: 'kafka_2.12', version: '2.2.0'

// Prometheus
// Base
implementation group: 'io.prometheus', name: 'simpleclient', version: '0.8.1'
//implementation group: 'io.prometheus', name: 'simpleclient_httpserver', version: '0.8.1'
// Expose via Jetty
implementation group: 'io.prometheus', name: 'simpleclient_servlet', version: '0.8.1'
// Collect Jetty stats
implementation group: 'io.prometheus', name: 'simpleclient_jetty', version: '0.8.1'
// JVM Metrics
implementation group: 'io.prometheus', name: 'simpleclient_hotspot', version: '0.8.1'
}

// disable integration tests, since there are none
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
package net.explorviz.broadcast.server.main;

import io.prometheus.client.exporter.MetricsServlet;
import io.prometheus.client.filter.MetricsFilter;
import io.prometheus.client.hotspot.DefaultExports;
import io.prometheus.client.jetty.JettyStatisticsCollector;
import net.explorviz.shared.config.helper.PropertyHelper;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.StatisticsHandler;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.DispatcherType;
import java.util.EnumSet;

/**
* Main entry point for this Java application.
*
Expand All @@ -34,6 +43,24 @@ public static void main(final String[] args) {
final ServletContextHandler context = new ServletContextHandler(server, getContextPath());
context.addServlet(jerseyServlet, "/*");

// Prometheus
StatisticsHandler stats = new StatisticsHandler();
stats.setHandler(server.getHandler());
server.setHandler(stats);

new JettyStatisticsCollector(stats).register();

context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");

MetricsFilter metricsFilter =
new MetricsFilter("explorviz_request_time",
"Filter to measure and forward request times", 2, null);
FilterHolder filterHolder = new FilterHolder(metricsFilter);
context.addFilter(filterHolder, "/v1/*", EnumSet.of(DispatcherType.REQUEST));

// Collect JVM metrics
DefaultExports.initialize();

try {
server.start();
} catch (final Exception e) { // NOPMD
Expand Down
16 changes: 14 additions & 2 deletions discovery-service/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,19 @@ dependencies {
}

// SSE context for injection
implementation group: 'org.glassfish.jersey.media', name: 'jersey-media-sse', version: '2.27'
implementation group: 'org.glassfish.jersey.media', name: 'jersey-media-sse', version: '2.27'

// Prometheus
// Base
implementation group: 'io.prometheus', name: 'simpleclient', version: '0.8.1'
//implementation group: 'io.prometheus', name: 'simpleclient_httpserver', version: '0.8.1'
// Expose via Jetty
implementation group: 'io.prometheus', name: 'simpleclient_servlet', version: '0.8.1'
// Collect Jetty stats
implementation group: 'io.prometheus', name: 'simpleclient_jetty', version: '0.8.1'
// JVM Metrics
implementation group: 'io.prometheus', name: 'simpleclient_hotspot', version: '0.8.1'

}

// disable integration tests, since there are none
Expand Down Expand Up @@ -118,4 +130,4 @@ task updateEnvPropsInBuildDir {

run.dependsOn updateEnvPropsInBuildDir
updateEnvPropsInBuildDir.shouldRunAfter classes
// END environment task
// END environment task
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
package net.explorviz.discovery.server.main;

import io.prometheus.client.exporter.MetricsServlet;
import io.prometheus.client.filter.MetricsFilter;
import io.prometheus.client.hotspot.DefaultExports;
import io.prometheus.client.jetty.JettyStatisticsCollector;
import net.explorviz.shared.config.helper.PropertyHelper;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.StatisticsHandler;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.DispatcherType;
import java.util.EnumSet;

/**
* Entry point for the web service. This main method will start a web server based on the
* configuration properties inside of the explorviz.properties file.
Expand Down Expand Up @@ -36,6 +45,25 @@ public static void main(final String[] args) {
final ServletContextHandler context = new ServletContextHandler(server, getContextPath());
context.addServlet(jerseyServlet, "/*");


// Prometheus
StatisticsHandler stats = new StatisticsHandler();
stats.setHandler(server.getHandler());
server.setHandler(stats);

new JettyStatisticsCollector(stats).register();

context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");

MetricsFilter metricsFilter =
new MetricsFilter("explorviz_request_time",
"Filter to measure and forward request times", 20, null);
FilterHolder filterHolder = new FilterHolder(metricsFilter);
context.addFilter(filterHolder, "/v1/*", EnumSet.of(DispatcherType.REQUEST));

// JVM Metrics
DefaultExports.initialize();

try {
server.start();
} catch (final Exception e) { // NOPMD
Expand Down
29 changes: 27 additions & 2 deletions docker-compose/docker-compose-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ services:
reverse-proxy:
image: "traefik:v2.1"
container_name: "explorviz-reverse-proxy"
ports:
- "8080:8080"
volumes:
- "./traefik/traefik-static.toml:/etc/traefik/traefik.toml"
- "./traefik/traefik-dynamic-linux.toml:/etc/traefik/traefik-dynamic.toml"
Expand Down Expand Up @@ -69,6 +67,33 @@ services:
env_file:
- apis.env

prometheus:
image: prom/prometheus
ports:
- 9090:9090
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
network_mode: "host"

prom-node-exporter:
image: prom/node-exporter
ports:
- 9100:9100
network_mode: "host"

grafana:
image: grafana/grafana
ports:
- 3000:3000
volumes:
- ./monitoring/grafana/config.ini:/etc/grafana/grafana.ini
- ./monitoring/grafana/provisioning:/etc/grafana/provisioning
- ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards
network_mode: "host"


volumes:
explorviz-auth-mongo-data:
explorviz-auth-mongo-configdb:
Expand Down
23 changes: 23 additions & 0 deletions docker-compose/docker-compose-windows-mac.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,29 @@ services:
env_file:
- apis.env

prometheus:
image: prom/prometheus
ports:
- 9090:9090
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'

prom-node-exporter:
image: prom/node-exporter
ports:
- 9100:9100

grafana:
image: grafana/grafana
ports:
- 3000:3000
volumes:
- ./monitoring/grafana/config.ini:/etc/grafana/grafana.ini
- ./monitoring/grafana/provisioning:/etc/grafana/provisioning
- ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards

volumes:
explorviz-auth-mongo-data:
explorviz-auth-mongo-configdb:
Expand Down
9 changes: 9 additions & 0 deletions docker-compose/monitoring/grafana/config.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[paths]
provisioning = /etc/grafana/provisioning

[server]
enable_gzip = true

[security]
admin_user = admin
admin_password = password
Loading