From 6c8f5815f9f147e764ad9cbcb8c08f351e8e7e3a Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Mon, 23 Mar 2020 11:09:26 +0100 Subject: [PATCH 01/15] Setup prometheus and node exporter as containers --- docker-compose/docker-compose-dev.yml | 201 ++++++++++++++++++++++++++ docker-compose/prometheus.yml | 12 ++ 2 files changed, 213 insertions(+) create mode 100644 docker-compose/docker-compose-dev.yml create mode 100644 docker-compose/prometheus.yml diff --git a/docker-compose/docker-compose-dev.yml b/docker-compose/docker-compose-dev.yml new file mode 100644 index 00000000..5d45afd4 --- /dev/null +++ b/docker-compose/docker-compose-dev.yml @@ -0,0 +1,201 @@ +# Start ExplorViz based on the current working directory for development purposes. +# +# - The services don't use persistent volumes, all data is los after containers shut down +# - Services are hidden behind API_GATEWAY, therefore no unnecessary port mapping and production-like conditions +# - Prometheus and SwaggerUI are started +# +# Environment Variables are based on the +# properties file of each service, e.g, +# https://github.com/ExplorViz/explorviz-backend/blob/dev-1/user-service/src/main/resources/explorviz.properties + + +version: "3.3" +services: + + ### ExplorViz Services ### + + user-service: + build: ../user-service + container_name: explorviz-backend-user-service + expose: + - "8082" + environment: + - MONGO_HOST=mongo-user + - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 + labels: + - "traefik.enable=true" + - "traefik.port=8082" + - "traefik.http.routers.user-service.rule=PathPrefix(`/v1/tokens`) || + PathPrefix(`/v1/users`) || PathPrefix(`/v1/roles`) || PathPrefix(`/v1/userbatch`)" + networks: + - explorviz + + settings-service: + build: ../settings-service + container_name: explorviz-backend-settings-service + expose: + - "8087" + environment: + - MONGO_HOST=mongo-settings + - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 + labels: + - "traefik.enable=true" + - "traefik.port=8087" + - "traefik.http.routers.settings-service.rule=PathPrefix(`/v1/settings`) || PathPrefix(`/v1/preferences`)" + networks: + - explorviz + + landscape-service: + build: ../landscape-service + container_name: explorviz-backend-landscape-service + environment: + - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 + - EXCHANGE_KAFKA_TOPIC_NAME=landscape-update + ports: + - "10135:10135" + networks: + - explorviz + + broadcast-service: + build: ../broadcast-service + container_name: explorviz-backend-broadcast-service + expose: + - "8081" + environment: + - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 + - EXCHANGE_KAFKA_TOPIC_NAME=landscape-update + labels: + - "traefik.enable=true" + - "traefik.port=8081" + - "traefik.http.routers.broadcast-service.rule=PathPrefix(`/v1/landscapes/broadcast`)" + - "traefik.http.routers.broadcast-service.priority=200" + networks: + - explorviz + + history-service: + build: ../history-service + container_name: explorviz-backend-history-service + expose: + - "8086" + environment: + - MONGO_HOST=mongo-history + - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 + - EXCHANGE_KAFKA_TOPIC_NAME=landscape-update + labels: + - "traefik.enable=true" + - "traefik.port=8086" + - "traefik.http.routers.history-service.rule=PathPrefix(`/v1/landscapes`) || PathPrefix(`/v1/timestamps`)" + networks: + - explorviz + + analysis-service: + build: ../analysis-service + container_name: explorviz-backend-analysis-service + ports: + - "10133:10133" + networks: + - explorviz + + discovery-service: + build: ../discovery-service + container_name: explorviz-backend-discovery-service + ports: + - "8083:8083" + labels: + - "traefik.enable=true" + - "traefik.port=8083" + - "traefik.http.routers.discovery-service.rule=PathPrefix(`/v1/agents`)" + networks: + - explorviz + + reverse-proxy: + image: "traefik:v2.1" + container_name: explorviz-reverse-proxy + command: + - "--entrypoints.web.address=:8090" + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + #- "--log.level=DEBUG" + ports: + - "8090:8090" + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:ro" + networks: + - explorviz + + ### Software Stack ### + + zookeeper: + container_name: explorviz-zookeeper + image: zookeeper:3.5 + expose: + - "2181" + networks: + - explorviz + + kafka: + container_name: explorviz-kafka + image: wurstmeister/kafka + expose: + - "9092" + environment: + KAFKA_ADVERTISED_HOST_NAME: kafka + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + networks: + - explorviz + + mongo-user: + image: mongo + container_name: explorviz-backend-user-mongo + command: mongod --port 27017 + expose: + - "27017" + networks: + - explorviz + + mongo-history: + image: mongo + container_name: explorviz-backend-landscape-mongo + command: mongod --port 27018 + expose: + - "27018" + networks: + - explorviz + + mongo-settings: + image: mongo + container_name: explorviz-backend-settings-mongo + command: mongod --port 27019 + expose: + - "27019" + networks: + - explorviz + + # Monitoring + + # Todo: Swagger + + prometheus: + image: prom/prometheus + ports: + - 9090:9090 + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml + networks: + - "explorviz" + command: + - '--config.file=/etc/prometheus/prometheus.yml' + + prom-node-exporter: + image: prom/node-exporter + expose: + - "9100" + networks: + - "explorviz" + + + +networks: + explorviz: + driver: bridge + diff --git a/docker-compose/prometheus.yml b/docker-compose/prometheus.yml new file mode 100644 index 00000000..caa5e3d8 --- /dev/null +++ b/docker-compose/prometheus.yml @@ -0,0 +1,12 @@ +scrape_configs: + # Scrape Prometheus itself every 5 seconds. + - job_name: 'prometheus' + scrape_interval: 5s + static_configs: + - targets: ['localhost:9090'] + + # Scrape the Node Exporter every 5 seconds. + - job_name: 'node' + scrape_interval: 5s + static_configs: + - targets: ['prom-node-exporter:9100'] \ No newline at end of file From 7673a30273d84b7d8f75176d196fe7206317bd2d Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Mon, 23 Mar 2020 12:52:56 +0100 Subject: [PATCH 02/15] Expose Jetty metrics of user-service --- docker-compose/docker-compose-dev.yml | 201 ------------------ docker-compose/docker-compose-linux.yml | 17 ++ docker-compose/prometheus.yml | 7 +- user-service/build.gradle | 11 + .../explorviz/security/server/main/Main.java | 12 ++ 5 files changed, 46 insertions(+), 202 deletions(-) delete mode 100644 docker-compose/docker-compose-dev.yml diff --git a/docker-compose/docker-compose-dev.yml b/docker-compose/docker-compose-dev.yml deleted file mode 100644 index 5d45afd4..00000000 --- a/docker-compose/docker-compose-dev.yml +++ /dev/null @@ -1,201 +0,0 @@ -# Start ExplorViz based on the current working directory for development purposes. -# -# - The services don't use persistent volumes, all data is los after containers shut down -# - Services are hidden behind API_GATEWAY, therefore no unnecessary port mapping and production-like conditions -# - Prometheus and SwaggerUI are started -# -# Environment Variables are based on the -# properties file of each service, e.g, -# https://github.com/ExplorViz/explorviz-backend/blob/dev-1/user-service/src/main/resources/explorviz.properties - - -version: "3.3" -services: - - ### ExplorViz Services ### - - user-service: - build: ../user-service - container_name: explorviz-backend-user-service - expose: - - "8082" - environment: - - MONGO_HOST=mongo-user - - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 - labels: - - "traefik.enable=true" - - "traefik.port=8082" - - "traefik.http.routers.user-service.rule=PathPrefix(`/v1/tokens`) || - PathPrefix(`/v1/users`) || PathPrefix(`/v1/roles`) || PathPrefix(`/v1/userbatch`)" - networks: - - explorviz - - settings-service: - build: ../settings-service - container_name: explorviz-backend-settings-service - expose: - - "8087" - environment: - - MONGO_HOST=mongo-settings - - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 - labels: - - "traefik.enable=true" - - "traefik.port=8087" - - "traefik.http.routers.settings-service.rule=PathPrefix(`/v1/settings`) || PathPrefix(`/v1/preferences`)" - networks: - - explorviz - - landscape-service: - build: ../landscape-service - container_name: explorviz-backend-landscape-service - environment: - - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 - - EXCHANGE_KAFKA_TOPIC_NAME=landscape-update - ports: - - "10135:10135" - networks: - - explorviz - - broadcast-service: - build: ../broadcast-service - container_name: explorviz-backend-broadcast-service - expose: - - "8081" - environment: - - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 - - EXCHANGE_KAFKA_TOPIC_NAME=landscape-update - labels: - - "traefik.enable=true" - - "traefik.port=8081" - - "traefik.http.routers.broadcast-service.rule=PathPrefix(`/v1/landscapes/broadcast`)" - - "traefik.http.routers.broadcast-service.priority=200" - networks: - - explorviz - - history-service: - build: ../history-service - container_name: explorviz-backend-history-service - expose: - - "8086" - environment: - - MONGO_HOST=mongo-history - - EXCHANGE_KAFKA_BOOTSTRAP_SERVERS=kafka:9092 - - EXCHANGE_KAFKA_TOPIC_NAME=landscape-update - labels: - - "traefik.enable=true" - - "traefik.port=8086" - - "traefik.http.routers.history-service.rule=PathPrefix(`/v1/landscapes`) || PathPrefix(`/v1/timestamps`)" - networks: - - explorviz - - analysis-service: - build: ../analysis-service - container_name: explorviz-backend-analysis-service - ports: - - "10133:10133" - networks: - - explorviz - - discovery-service: - build: ../discovery-service - container_name: explorviz-backend-discovery-service - ports: - - "8083:8083" - labels: - - "traefik.enable=true" - - "traefik.port=8083" - - "traefik.http.routers.discovery-service.rule=PathPrefix(`/v1/agents`)" - networks: - - explorviz - - reverse-proxy: - image: "traefik:v2.1" - container_name: explorviz-reverse-proxy - command: - - "--entrypoints.web.address=:8090" - - "--providers.docker=true" - - "--providers.docker.exposedbydefault=false" - #- "--log.level=DEBUG" - ports: - - "8090:8090" - volumes: - - "/var/run/docker.sock:/var/run/docker.sock:ro" - networks: - - explorviz - - ### Software Stack ### - - zookeeper: - container_name: explorviz-zookeeper - image: zookeeper:3.5 - expose: - - "2181" - networks: - - explorviz - - kafka: - container_name: explorviz-kafka - image: wurstmeister/kafka - expose: - - "9092" - environment: - KAFKA_ADVERTISED_HOST_NAME: kafka - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - networks: - - explorviz - - mongo-user: - image: mongo - container_name: explorviz-backend-user-mongo - command: mongod --port 27017 - expose: - - "27017" - networks: - - explorviz - - mongo-history: - image: mongo - container_name: explorviz-backend-landscape-mongo - command: mongod --port 27018 - expose: - - "27018" - networks: - - explorviz - - mongo-settings: - image: mongo - container_name: explorviz-backend-settings-mongo - command: mongod --port 27019 - expose: - - "27019" - networks: - - explorviz - - # Monitoring - - # Todo: Swagger - - prometheus: - image: prom/prometheus - ports: - - 9090:9090 - volumes: - - ./prometheus.yml:/etc/prometheus/prometheus.yml - networks: - - "explorviz" - command: - - '--config.file=/etc/prometheus/prometheus.yml' - - prom-node-exporter: - image: prom/node-exporter - expose: - - "9100" - networks: - - "explorviz" - - - -networks: - explorviz: - driver: bridge - diff --git a/docker-compose/docker-compose-linux.yml b/docker-compose/docker-compose-linux.yml index cb1287f4..e5c7c6a0 100644 --- a/docker-compose/docker-compose-linux.yml +++ b/docker-compose/docker-compose-linux.yml @@ -69,6 +69,23 @@ services: env_file: - apis.env + prometheus: + image: prom/prometheus + ports: + - 9090:9090 + volumes: + - ./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" + + volumes: explorviz-auth-mongo-data: explorviz-auth-mongo-configdb: diff --git a/docker-compose/prometheus.yml b/docker-compose/prometheus.yml index caa5e3d8..b397bbb7 100644 --- a/docker-compose/prometheus.yml +++ b/docker-compose/prometheus.yml @@ -9,4 +9,9 @@ scrape_configs: - job_name: 'node' scrape_interval: 5s static_configs: - - targets: ['prom-node-exporter:9100'] \ No newline at end of file + - targets: ['localhost:9100'] + + - job_name: 'user-service' + scrape_interval: 5s + static_configs: + - targets: ['localhost:8082'] \ No newline at end of file diff --git a/user-service/build.gradle b/user-service/build.gradle index 5046c889..0a18614b 100644 --- a/user-service/build.gradle +++ b/user-service/build.gradle @@ -80,6 +80,17 @@ dependencies { implementation group: 'io.swagger.core.v3', name: 'swagger-core', version: '2.0.8' implementation group: 'io.swagger.core.v3', name: 'swagger-jaxrs2', version: '2.0.8' + // 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' + + + apiTestImplementation 'io.rest-assured:rest-assured:4.0.0' } diff --git a/user-service/src/main/java/net/explorviz/security/server/main/Main.java b/user-service/src/main/java/net/explorviz/security/server/main/Main.java index 3da3c7f9..f40d78c2 100644 --- a/user-service/src/main/java/net/explorviz/security/server/main/Main.java +++ b/user-service/src/main/java/net/explorviz/security/server/main/Main.java @@ -1,7 +1,10 @@ package net.explorviz.security.server.main; +import io.prometheus.client.exporter.MetricsServlet; +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.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.glassfish.jersey.server.ResourceConfig; @@ -36,6 +39,15 @@ public static void main(final String[] args) { final ServletContextHandler context = new ServletContextHandler(server, getContextPath()); context.addServlet(jerseyServlet, "/*"); + + StatisticsHandler stats = new StatisticsHandler(); + stats.setHandler(server.getHandler()); + server.setHandler(stats); + + new JettyStatisticsCollector(stats).register(); + + context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); + try { server.start(); } catch (final Exception e) { // NOPMD From 3d89e80a3f0774545d535a2d1b5695990191dd7f Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Mon, 23 Mar 2020 13:05:17 +0100 Subject: [PATCH 03/15] WIP: Setup grafana --- docker-compose/docker-compose-linux.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker-compose/docker-compose-linux.yml b/docker-compose/docker-compose-linux.yml index e5c7c6a0..1203c3c2 100644 --- a/docker-compose/docker-compose-linux.yml +++ b/docker-compose/docker-compose-linux.yml @@ -85,6 +85,12 @@ services: - 9100:9100 network_mode: "host" + grafana: + image: grafana/grafana + ports: + - 3000:3000 + network_mode: "host" + volumes: explorviz-auth-mongo-data: From 71f522d07b6a08aa8837513e0d054a14db1a1577 Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Wed, 25 Mar 2020 09:22:49 +0100 Subject: [PATCH 04/15] Enable grafana provisioning --- docker-compose/docker-compose-linux.yml | 6 +++++- docker-compose/monitoring/grafana/config.ini | 9 +++++++++ .../grafana/provisioning/dashboards/default.yaml | 8 ++++++++ .../grafana/provisioning/datasources/prom.yaml | 10 ++++++++++ docker-compose/{ => monitoring}/prometheus.yml | 0 5 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 docker-compose/monitoring/grafana/config.ini create mode 100644 docker-compose/monitoring/grafana/provisioning/dashboards/default.yaml create mode 100644 docker-compose/monitoring/grafana/provisioning/datasources/prom.yaml rename docker-compose/{ => monitoring}/prometheus.yml (100%) diff --git a/docker-compose/docker-compose-linux.yml b/docker-compose/docker-compose-linux.yml index 1203c3c2..ed92000a 100644 --- a/docker-compose/docker-compose-linux.yml +++ b/docker-compose/docker-compose-linux.yml @@ -74,7 +74,7 @@ services: ports: - 9090:9090 volumes: - - ./prometheus.yml:/etc/prometheus/prometheus.yml + - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' network_mode: "host" @@ -89,6 +89,10 @@ services: 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" diff --git a/docker-compose/monitoring/grafana/config.ini b/docker-compose/monitoring/grafana/config.ini new file mode 100644 index 00000000..353cbd58 --- /dev/null +++ b/docker-compose/monitoring/grafana/config.ini @@ -0,0 +1,9 @@ +[paths] +provisioning = /etc/grafana/provisioning + +[server] +enable_gzip = true + +[security] +admin_user = admin +admin_password = password diff --git a/docker-compose/monitoring/grafana/provisioning/dashboards/default.yaml b/docker-compose/monitoring/grafana/provisioning/dashboards/default.yaml new file mode 100644 index 00000000..0090a285 --- /dev/null +++ b/docker-compose/monitoring/grafana/provisioning/dashboards/default.yaml @@ -0,0 +1,8 @@ +apiVersion: 1 + +providers: +- name: 'default' + folder: '' + type: file + options: + path: '/var/lib/grafana/dashboards' \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/provisioning/datasources/prom.yaml b/docker-compose/monitoring/grafana/provisioning/datasources/prom.yaml new file mode 100644 index 00000000..df2b2e7d --- /dev/null +++ b/docker-compose/monitoring/grafana/provisioning/datasources/prom.yaml @@ -0,0 +1,10 @@ +apiVersion: 1 + +datasources: + - name: Prometheus + type: prometheus + access: proxy + url: http://localhost:9090 + is_default: true + version: 1 + diff --git a/docker-compose/prometheus.yml b/docker-compose/monitoring/prometheus.yml similarity index 100% rename from docker-compose/prometheus.yml rename to docker-compose/monitoring/prometheus.yml From d6b96430df11bebacf8a08d96ebcea12cffdd367 Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 25 Mar 2020 10:36:14 +0100 Subject: [PATCH 05/15] Monitor Jetty servers of all services --- broadcast-service/build.gradle | 9 ++ .../explorviz/broadcast/server/main/Main.java | 12 ++ discovery-service/build.gradle | 14 ++- .../explorviz/discovery/server/main/Main.java | 13 ++ docker-compose/monitoring/prometheus.yml | 23 +++- history-service/build.gradle | 113 ++++++++++-------- .../explorviz/history/server/main/Main.java | 12 ++ settings-service/build.gradle | 8 ++ .../explorviz/settings/server/main/Main.java | 12 ++ .../explorviz/security/server/main/Main.java | 1 + 10 files changed, 162 insertions(+), 55 deletions(-) diff --git a/broadcast-service/build.gradle b/broadcast-service/build.gradle index 768ad654..3c627d29 100644 --- a/broadcast-service/build.gradle +++ b/broadcast-service/build.gradle @@ -41,6 +41,15 @@ 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' } // disable integration tests, since there are none diff --git a/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java b/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java index c0dc49dc..11dbbc2d 100644 --- a/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java +++ b/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java @@ -1,7 +1,10 @@ package net.explorviz.broadcast.server.main; +import io.prometheus.client.exporter.MetricsServlet; +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.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.glassfish.jersey.server.ResourceConfig; @@ -34,6 +37,15 @@ 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"); + try { server.start(); } catch (final Exception e) { // NOPMD diff --git a/discovery-service/build.gradle b/discovery-service/build.gradle index ddfe99bf..1926bd75 100644 --- a/discovery-service/build.gradle +++ b/discovery-service/build.gradle @@ -33,7 +33,17 @@ 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' + } // disable integration tests, since there are none @@ -118,4 +128,4 @@ task updateEnvPropsInBuildDir { run.dependsOn updateEnvPropsInBuildDir updateEnvPropsInBuildDir.shouldRunAfter classes -// END environment task \ No newline at end of file +// END environment task diff --git a/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java b/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java index 42b054cd..3f7441fd 100644 --- a/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java +++ b/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java @@ -1,7 +1,10 @@ package net.explorviz.discovery.server.main; +import io.prometheus.client.exporter.MetricsServlet; +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.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.glassfish.jersey.server.ResourceConfig; @@ -36,6 +39,16 @@ 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"); + try { server.start(); } catch (final Exception e) { // NOPMD diff --git a/docker-compose/monitoring/prometheus.yml b/docker-compose/monitoring/prometheus.yml index b397bbb7..a3841fee 100644 --- a/docker-compose/monitoring/prometheus.yml +++ b/docker-compose/monitoring/prometheus.yml @@ -14,4 +14,25 @@ scrape_configs: - job_name: 'user-service' scrape_interval: 5s static_configs: - - targets: ['localhost:8082'] \ No newline at end of file + - targets: ['localhost:8082'] + + - job_name: 'settings-service' + scrape_interval: 5s + static_configs: + - targets: ['localhost:8087'] + + - job_name: 'history-service' + scrape_interval: 5s + static_configs: + - targets: ['localhost:8086'] + + - job_name: 'discovery-service' + scrape_interval: 5s + static_configs: + - targets: ['localhost:8083'] + + - job_name: 'broadcast-service' + scrape_interval: 5s + static_configs: + - targets: ['localhost:8081'] + \ No newline at end of file diff --git a/history-service/build.gradle b/history-service/build.gradle index f8ee8c6c..cfda3403 100644 --- a/history-service/build.gradle +++ b/history-service/build.gradle @@ -1,13 +1,13 @@ plugins { - id "application" - id "com.github.johnrengelman.shadow" version "5.1.0" - id "com.github.spotbugs" version "1.6.10" - id "maven" + id "application" + id "com.github.johnrengelman.shadow" version "5.1.0" + id "com.github.spotbugs" version "1.6.10" + id "maven" } // Force new Dependencies configurations.all { - resolutionStrategy.cacheChangingModulesFor 0, 'seconds' + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' } repositories { @@ -27,34 +27,43 @@ dockerCompose { dependencies { - // Swagger - implementation group: 'io.swagger.core.v3', name: 'swagger-core', version: '2.0.8' - implementation group: 'io.swagger.core.v3', name: 'swagger-jaxrs2', version: '2.0.8' - implementation project(':landscape-service:landscape-model') - implementation project(':user-service:user-model') + // Swagger + implementation group: 'io.swagger.core.v3', name: 'swagger-core', version: '2.0.8' + implementation group: 'io.swagger.core.v3', name: 'swagger-jaxrs2', version: '2.0.8' + implementation project(':landscape-service:landscape-model') + implementation project(':user-service:user-model') // ExplorViz Shared Dependencies - if(useRemoteSharedProject.toBoolean()) { - implementation group: 'net.explorviz', name: 'config-injection', version: "${sharedProjectVersion}" - implementation group: 'net.explorviz', name: 'security', version: "${sharedProjectVersion}" - implementation group: 'net.explorviz', name: 'exception-handling', version: "${sharedProjectVersion}" - implementation group: 'net.explorviz', name: 'common-concerns', version: "${sharedProjectVersion}" - implementation group: 'net.explorviz', name: 'query', version: "${sharedProjectVersion}" - } - else { + if (useRemoteSharedProject.toBoolean()) { + implementation group: 'net.explorviz', name: 'config-injection', version: "${sharedProjectVersion}" + implementation group: 'net.explorviz', name: 'security', version: "${sharedProjectVersion}" + implementation group: 'net.explorviz', name: 'exception-handling', version: "${sharedProjectVersion}" + implementation group: 'net.explorviz', name: 'common-concerns', version: "${sharedProjectVersion}" + implementation group: 'net.explorviz', name: 'query', version: "${sharedProjectVersion}" + } else { implementation project(':config-injection') implementation project(':security') implementation project(':exception-handling') implementation project(':common-concerns') implementation project(':query') - } - - // multipart/form-data type - implementation group: 'org.glassfish.jersey.media', name:'jersey-media-multipart', version:'2.26' - - implementation group: 'commons-io', name: 'commons-io', version: '2.6' - - 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' + + // multipart/form-data type + implementation group: 'org.glassfish.jersey.media', name: 'jersey-media-multipart', version: '2.26' + + implementation group: 'commons-io', name: 'commons-io', version: '2.6' + + implementation group: 'org.apache.kafka', name: 'kafka_2.12', version: '2.2.0' } assemble.dependsOn shadowJar @@ -63,13 +72,13 @@ jar.enabled = false jar { manifest { attributes( - 'Main-Class': 'net.explorviz.history.server.main.Main' + 'Main-Class': 'net.explorviz.history.server.main.Main' ) } } application { - mainClassName = 'net.explorviz.history.server.main.Main' + mainClassName = 'net.explorviz.history.server.main.Main' } shadowJar { @@ -98,7 +107,7 @@ tasks.withType(com.github.spotbugs.SpotBugsTask) { task spotbugs { group 'Quality Assurance' description 'Run SpotBugs' - + dependsOn 'spotbugsMain' dependsOn 'spotbugsTest' } @@ -106,29 +115,29 @@ task spotbugs { // START environment task task updateEnvPropsInBuildDir { - // run with: - // .././gradlew run -Penvironment=production - - doLast { - if (project.hasProperty("environment")) { - def environment = project.findProperty("environment") - - if(environment.equals("production")) { - println("Using the production properties file") - delete("${buildDir}/resources/main/explorviz.properties") - - copy { - from "${buildDir}/resources/main" - into "${buildDir}/resources/main" - rename "explorviz.production.properties", "explorviz.properties" - } - - delete("${buildDir}/resources/main/explorviz.production.properties") - } - } else { - println("Using default properties file") - } - } + // run with: + // .././gradlew run -Penvironment=production + + doLast { + if (project.hasProperty("environment")) { + def environment = project.findProperty("environment") + + if (environment.equals("production")) { + println("Using the production properties file") + delete("${buildDir}/resources/main/explorviz.properties") + + copy { + from "${buildDir}/resources/main" + into "${buildDir}/resources/main" + rename "explorviz.production.properties", "explorviz.properties" + } + + delete("${buildDir}/resources/main/explorviz.production.properties") + } + } else { + println("Using default properties file") + } + } } run.dependsOn updateEnvPropsInBuildDir diff --git a/history-service/src/main/java/net/explorviz/history/server/main/Main.java b/history-service/src/main/java/net/explorviz/history/server/main/Main.java index d828362d..762d590b 100644 --- a/history-service/src/main/java/net/explorviz/history/server/main/Main.java +++ b/history-service/src/main/java/net/explorviz/history/server/main/Main.java @@ -1,7 +1,10 @@ package net.explorviz.history.server.main; +import io.prometheus.client.exporter.MetricsServlet; +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.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.glassfish.jersey.server.ResourceConfig; @@ -36,6 +39,15 @@ 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"); + try { server.start(); } catch (final Exception e) { // NOPMD diff --git a/settings-service/build.gradle b/settings-service/build.gradle index cc516388..301486ea 100644 --- a/settings-service/build.gradle +++ b/settings-service/build.gradle @@ -79,6 +79,14 @@ dependencies { implementation project(':query') } + // 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' apiTestImplementation project(':user-service') // For login apiTestImplementation 'io.rest-assured:rest-assured:4.0.0' diff --git a/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java b/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java index 0b44163d..9acf6ef7 100644 --- a/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java +++ b/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java @@ -1,7 +1,10 @@ package net.explorviz.settings.server.main; +import io.prometheus.client.exporter.MetricsServlet; +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.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.glassfish.jersey.server.ResourceConfig; @@ -32,6 +35,15 @@ 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"); + try { server.start(); } catch (final Exception e) { // NOPMD diff --git a/user-service/src/main/java/net/explorviz/security/server/main/Main.java b/user-service/src/main/java/net/explorviz/security/server/main/Main.java index f40d78c2..73b9be31 100644 --- a/user-service/src/main/java/net/explorviz/security/server/main/Main.java +++ b/user-service/src/main/java/net/explorviz/security/server/main/Main.java @@ -40,6 +40,7 @@ public static void main(final String[] args) { context.addServlet(jerseyServlet, "/*"); + // Prometheus StatisticsHandler stats = new StatisticsHandler(); stats.setHandler(server.getHandler()); server.setHandler(stats); From 85fc3ab574b13d1077249f3493c6017b6ff8ff12 Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 25 Mar 2020 11:03:27 +0100 Subject: [PATCH 06/15] Create summary dashboard --- .../dashboards/Overview-1585128752830.json | 412 ++++++++++++++++++ 1 file changed, 412 insertions(+) create mode 100644 docker-compose/monitoring/grafana/dashboards/Overview-1585128752830.json diff --git a/docker-compose/monitoring/grafana/dashboards/Overview-1585128752830.json b/docker-compose/monitoring/grafana/dashboards/Overview-1585128752830.json new file mode 100644 index 00000000..ef6d3ef7 --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/Overview-1585128752830.json @@ -0,0 +1,412 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:7", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 1, + "links": [], + "panels": [ + { + "cacheTimeout": null, + "datasource": "Prometheus", + "description": "Displays which services are currently up and running", + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 8, + "links": [], + "options": { + "fieldOptions": { + "calcs": [ + "last" + ], + "defaults": { + "decimals": 0, + "mappings": [ + { + "from": "", + "id": 1, + "operator": "", + "text": "Down", + "to": "", + "type": 1, + "value": "0" + }, + { + "from": "", + "id": 2, + "operator": "", + "text": "Up", + "to": "", + "type": 1, + "value": "1" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + } + ] + }, + "title": "", + "unit": "short" + }, + "overrides": [], + "values": false + }, + "orientation": "auto", + "showThresholdLabels": false, + "showThresholdMarkers": false + }, + "pluginVersion": "6.7.1", + "repeat": null, + "targets": [ + { + "expr": "up{job=~\"broadcast-service|user-service|settings-service|analysis-service|history-service|landscape-service|discovery-service\"}", + "interval": "", + "legendFormat": "{{job}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Up/Down", + "type": "gauge" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Average amount of Requests inbound at a service per minute. ", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "hiddenSeries": false, + "id": 2, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(jetty_requests_total[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{job}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Average HTTP-Requests per Minute", + "tooltip": { + "shared": true, + "sort": 1, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:62", + "decimals": null, + "format": "short", + "label": "Requests", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "$$hashKey": "object:63", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 9 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pluginVersion": "6.7.1", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Host CPU Usage", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:342", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:343", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 9 + }, + "hiddenSeries": false, + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_MemTotal_bytes - node_memory_MemFree_bytes", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Host Memory Usage", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:526", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:527", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": "", + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Overview", + "uid": "wuUJ4FrZk", + "variables": { + "list": [] + }, + "version": 13 +} \ No newline at end of file From 03a36d9dafe4dfd68fbd598bf96d0954b18cfe35 Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Thu, 26 Mar 2020 11:55:42 +0100 Subject: [PATCH 07/15] Monitor JVM metrics of each service --- analysis-service/build.gradle | 12 +++++++++- .../java/net/explorviz/analysis/Main.java | 23 +++++++++++++++++++ broadcast-service/build.gradle | 2 ++ .../explorviz/broadcast/server/main/Main.java | 4 ++++ discovery-service/build.gradle | 2 ++ .../explorviz/discovery/server/main/Main.java | 4 ++++ docker-compose/monitoring/prometheus.yml | 10 ++++++++ history-service/build.gradle | 3 ++- .../explorviz/history/server/main/Main.java | 4 ++++ kiekeradapter/build.gradle | 4 +++- landscape-service/build.gradle | 9 ++++++++ .../explorviz/landscape/server/main/Main.java | 20 ++++++++++++++++ settings-service/build.gradle | 3 ++- .../explorviz/settings/server/main/Main.java | 3 +++ user-service/build.gradle | 3 +++ .../explorviz/security/server/main/Main.java | 3 +++ 16 files changed, 105 insertions(+), 4 deletions(-) diff --git a/analysis-service/build.gradle b/analysis-service/build.gradle index 751ec05a..9f124458 100644 --- a/analysis-service/build.gradle +++ b/analysis-service/build.gradle @@ -24,6 +24,16 @@ dependencies { // 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 @@ -76,4 +86,4 @@ task spotbugs { dependsOn 'spotbugsMain' dependsOn 'spotbugsTest' -} \ No newline at end of file +} diff --git a/analysis-service/src/main/java/net/explorviz/analysis/Main.java b/analysis-service/src/main/java/net/explorviz/analysis/Main.java index 9871f9fb..63578706 100644 --- a/analysis-service/src/main/java/net/explorviz/analysis/Main.java +++ b/analysis-service/src/main/java/net/explorviz/analysis/Main.java @@ -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(); } diff --git a/broadcast-service/build.gradle b/broadcast-service/build.gradle index 3c627d29..785538f9 100644 --- a/broadcast-service/build.gradle +++ b/broadcast-service/build.gradle @@ -50,6 +50,8 @@ dependencies { 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 diff --git a/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java b/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java index 11dbbc2d..52bd5d92 100644 --- a/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java +++ b/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java @@ -1,6 +1,7 @@ package net.explorviz.broadcast.server.main; import io.prometheus.client.exporter.MetricsServlet; +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; @@ -46,6 +47,9 @@ public static void main(final String[] args) { context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); + // Collect JVM metrics + DefaultExports.initialize(); + try { server.start(); } catch (final Exception e) { // NOPMD diff --git a/discovery-service/build.gradle b/discovery-service/build.gradle index 1926bd75..54cf16a5 100644 --- a/discovery-service/build.gradle +++ b/discovery-service/build.gradle @@ -43,6 +43,8 @@ dependencies { 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' } diff --git a/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java b/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java index 3f7441fd..7f6f0a0d 100644 --- a/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java +++ b/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java @@ -1,6 +1,7 @@ package net.explorviz.discovery.server.main; import io.prometheus.client.exporter.MetricsServlet; +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; @@ -49,6 +50,9 @@ public static void main(final String[] args) { context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); + // JVM Metrics + DefaultExports.initialize(); + try { server.start(); } catch (final Exception e) { // NOPMD diff --git a/docker-compose/monitoring/prometheus.yml b/docker-compose/monitoring/prometheus.yml index a3841fee..2bf75d2f 100644 --- a/docker-compose/monitoring/prometheus.yml +++ b/docker-compose/monitoring/prometheus.yml @@ -15,6 +15,16 @@ scrape_configs: scrape_interval: 5s static_configs: - targets: ['localhost:8082'] + + - job_name: 'analysis-service' + scrape_interval: 5s + static_configs: + - targets: ['localhost:1234'] + + - job_name: 'landscape-service' + scrape_interval: 5s + static_configs: + - targets: ['localhost:1235'] - job_name: 'settings-service' scrape_interval: 5s diff --git a/history-service/build.gradle b/history-service/build.gradle index cfda3403..20c9d52f 100644 --- a/history-service/build.gradle +++ b/history-service/build.gradle @@ -52,11 +52,12 @@ dependencies { // 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' // multipart/form-data type implementation group: 'org.glassfish.jersey.media', name: 'jersey-media-multipart', version: '2.26' diff --git a/history-service/src/main/java/net/explorviz/history/server/main/Main.java b/history-service/src/main/java/net/explorviz/history/server/main/Main.java index 762d590b..2fe5b521 100644 --- a/history-service/src/main/java/net/explorviz/history/server/main/Main.java +++ b/history-service/src/main/java/net/explorviz/history/server/main/Main.java @@ -1,6 +1,7 @@ package net.explorviz.history.server.main; import io.prometheus.client.exporter.MetricsServlet; +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; @@ -48,6 +49,9 @@ public static void main(final String[] args) { context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); + // JVM Metrics + DefaultExports.initialize(); + try { server.start(); } catch (final Exception e) { // NOPMD diff --git a/kiekeradapter/build.gradle b/kiekeradapter/build.gradle index a806d5c5..f24b412f 100644 --- a/kiekeradapter/build.gradle +++ b/kiekeradapter/build.gradle @@ -18,6 +18,8 @@ dependencies { // Kieker Monitoring Framework implementation group: 'net.kieker-monitoring', name: 'kieker', version: '1.14-SNAPSHOT' + + } // disable integration tests, since there are none @@ -76,4 +78,4 @@ task spotbugs { dependsOn 'spotbugsMain' dependsOn 'spotbugsTest' -} \ No newline at end of file +} diff --git a/landscape-service/build.gradle b/landscape-service/build.gradle index 497868fb..37e16863 100644 --- a/landscape-service/build.gradle +++ b/landscape-service/build.gradle @@ -51,6 +51,15 @@ dependencies { implementation project(':landscape-service:landscape-model') implementation group: 'com.github.jasminb', name: 'jsonapi-converter', version:'0.8' + + // 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 api tests, since there are none diff --git a/landscape-service/src/main/java/net/explorviz/landscape/server/main/Main.java b/landscape-service/src/main/java/net/explorviz/landscape/server/main/Main.java index 22839d89..b9d9ced4 100644 --- a/landscape-service/src/main/java/net/explorviz/landscape/server/main/Main.java +++ b/landscape-service/src/main/java/net/explorviz/landscape/server/main/Main.java @@ -1,15 +1,24 @@ package net.explorviz.landscape.server.main; +import io.prometheus.client.exporter.HTTPServer; +import io.prometheus.client.hotspot.DefaultExports; import net.explorviz.landscape.model.helper.TypeProvider; import net.explorviz.shared.common.provider.GenericTypeFinder; import org.glassfish.hk2.api.ServiceLocator; import org.glassfish.hk2.utilities.ServiceLocatorUtilities; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; /** * Starts the Java application. */ public final class Main { + private static final Logger LOGGER = LoggerFactory.getLogger(Main.class); + private static final int PROM_PORT = 1235; + private Main() { // no instantiation } @@ -20,6 +29,17 @@ private Main() { * */ 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 prometheus HTTP server", e); + } + // register landscape model classes // this must happen before initializing the ServiceLocator TypeProvider.getExplorVizCoreTypesAsMap().forEach((classname, classRef) -> { diff --git a/settings-service/build.gradle b/settings-service/build.gradle index 301486ea..f5a82b47 100644 --- a/settings-service/build.gradle +++ b/settings-service/build.gradle @@ -82,11 +82,12 @@ dependencies { // 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' apiTestImplementation project(':user-service') // For login apiTestImplementation 'io.rest-assured:rest-assured:4.0.0' diff --git a/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java b/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java index 9acf6ef7..eb741ff6 100644 --- a/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java +++ b/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java @@ -1,6 +1,7 @@ package net.explorviz.settings.server.main; import io.prometheus.client.exporter.MetricsServlet; +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; @@ -44,6 +45,8 @@ public static void main(final String[] args) { context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); + DefaultExports.initialize(); + try { server.start(); } catch (final Exception e) { // NOPMD diff --git a/user-service/build.gradle b/user-service/build.gradle index 0a18614b..b6290111 100644 --- a/user-service/build.gradle +++ b/user-service/build.gradle @@ -80,6 +80,7 @@ dependencies { implementation group: 'io.swagger.core.v3', name: 'swagger-core', version: '2.0.8' implementation group: 'io.swagger.core.v3', name: 'swagger-jaxrs2', version: '2.0.8' + // Prometheus // Base implementation group: 'io.prometheus', name: 'simpleclient', version: '0.8.1' @@ -88,6 +89,8 @@ dependencies { 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' diff --git a/user-service/src/main/java/net/explorviz/security/server/main/Main.java b/user-service/src/main/java/net/explorviz/security/server/main/Main.java index 73b9be31..5e502854 100644 --- a/user-service/src/main/java/net/explorviz/security/server/main/Main.java +++ b/user-service/src/main/java/net/explorviz/security/server/main/Main.java @@ -1,6 +1,7 @@ package net.explorviz.security.server.main; import io.prometheus.client.exporter.MetricsServlet; +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; @@ -49,6 +50,8 @@ public static void main(final String[] args) { context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); + DefaultExports.initialize(); + try { server.start(); } catch (final Exception e) { // NOPMD From af85e95e0d2d22d543373169d118ab694ea0634a Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Thu, 26 Mar 2020 11:57:32 +0100 Subject: [PATCH 08/15] Add dashboard per service --- .../grafana/dashboards/analysis-service.json | 186 +++++++++++ .../grafana/dashboards/broadcast-service.json | 297 ++++++++++++++++++ .../grafana/dashboards/discovery-service.json | 297 ++++++++++++++++++ .../grafana/dashboards/history-service.json | 297 ++++++++++++++++++ .../grafana/dashboards/landscape-service.json | 297 ++++++++++++++++++ ...rview-1585128752830.json => overview.json} | 12 +- .../grafana/dashboards/settings-service.json | 297 ++++++++++++++++++ .../grafana/dashboards/user-service.json | 272 ++++++++++++++++ 8 files changed, 1949 insertions(+), 6 deletions(-) create mode 100644 docker-compose/monitoring/grafana/dashboards/analysis-service.json create mode 100644 docker-compose/monitoring/grafana/dashboards/broadcast-service.json create mode 100644 docker-compose/monitoring/grafana/dashboards/discovery-service.json create mode 100644 docker-compose/monitoring/grafana/dashboards/history-service.json create mode 100644 docker-compose/monitoring/grafana/dashboards/landscape-service.json rename docker-compose/monitoring/grafana/dashboards/{Overview-1585128752830.json => overview.json} (98%) create mode 100644 docker-compose/monitoring/grafana/dashboards/settings-service.json create mode 100644 docker-compose/monitoring/grafana/dashboards/user-service.json diff --git a/docker-compose/monitoring/grafana/dashboards/analysis-service.json b/docker-compose/monitoring/grafana/dashboards/analysis-service.json new file mode 100644 index 00000000..86d3cb9f --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/analysis-service.json @@ -0,0 +1,186 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:1587", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 10, + "iteration": 1585219915911, + "links": [], + "panels": [ + { + "aliasColors": { + "Max Heap Size": "rgb(255, 255, 255)" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:2612" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", + "interval": "", + "legendFormat": "Used Bytes (Heap) ", + "refId": "B" + } + ], + "thresholds": [ + { + "$$hashKey": "object:2620", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": null, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2377", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2378", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "landscape-service", + "value": "landscape-service" + }, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "service", + "options": [ + { + "selected": true, + "text": "analysis-service", + "value": "analysis-service" + } + ], + "query": "analysis-service", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Analysis-Service", + "uid": "7ueP6t9Zz", + "variables": { + "list": [] + }, + "version": 2 +} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/broadcast-service.json b/docker-compose/monitoring/grafana/dashboards/broadcast-service.json new file mode 100644 index 00000000..9a3f85a7 --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/broadcast-service.json @@ -0,0 +1,297 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:1587", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 6, + "iteration": 1585219935133, + "links": [], + "panels": [ + { + "aliasColors": { + "Max Heap Size": "rgb(255, 255, 255)" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:2612" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", + "interval": "", + "legendFormat": "Used Bytes (Heap) ", + "refId": "B" + } + ], + "thresholds": [ + { + "$$hashKey": "object:2620", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": null, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2377", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2378", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "1xx Response": "semi-dark-purple", + "2xx Response": "green", + "5xx Response": "purple", + "Answered": "green", + "Inbound Requests": "blue" + }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "hiddenSeries": false, + "hideTimeOverride": false, + "id": 2, + "interval": "", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inbound Requests", + "refId": "A" + }, + { + "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{code}} Response", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "HTTP Requests/Responses", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1767", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1768", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "settings-service", + "value": "settings-service" + }, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "service", + "options": [ + { + "selected": true, + "text": "settings-service", + "value": "settings-service" + } + ], + "query": "settings-service", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Broadcast-Service", + "uid": "YxyoetrWz", + "variables": { + "list": [] + }, + "version": 1 +} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/discovery-service.json b/docker-compose/monitoring/grafana/dashboards/discovery-service.json new file mode 100644 index 00000000..7b66b755 --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/discovery-service.json @@ -0,0 +1,297 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:1587", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 8, + "iteration": 1585219954529, + "links": [], + "panels": [ + { + "aliasColors": { + "Max Heap Size": "rgb(255, 255, 255)" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:2612" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", + "interval": "", + "legendFormat": "Used Bytes (Heap) ", + "refId": "B" + } + ], + "thresholds": [ + { + "$$hashKey": "object:2620", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": null, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2377", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2378", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "1xx Response": "semi-dark-purple", + "2xx Response": "green", + "5xx Response": "purple", + "Answered": "green", + "Inbound Requests": "blue" + }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "hiddenSeries": false, + "hideTimeOverride": false, + "id": 2, + "interval": "", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inbound Requests", + "refId": "A" + }, + { + "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{code}} Response", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "HTTP Requests/Responses", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1767", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1768", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "history-service", + "value": "history-service" + }, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "service", + "options": [ + { + "selected": true, + "text": "history-service", + "value": "history-service" + } + ], + "query": "history-service", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Discovery-Service", + "uid": "kLGa6prZk", + "variables": { + "list": [] + }, + "version": 1 +} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/history-service.json b/docker-compose/monitoring/grafana/dashboards/history-service.json new file mode 100644 index 00000000..011f2b80 --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/history-service.json @@ -0,0 +1,297 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:1587", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 7, + "iteration": 1585219978423, + "links": [], + "panels": [ + { + "aliasColors": { + "Max Heap Size": "rgb(255, 255, 255)" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:2612" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", + "interval": "", + "legendFormat": "Used Bytes (Heap) ", + "refId": "B" + } + ], + "thresholds": [ + { + "$$hashKey": "object:2620", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": null, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2377", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2378", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "1xx Response": "semi-dark-purple", + "2xx Response": "green", + "5xx Response": "purple", + "Answered": "green", + "Inbound Requests": "blue" + }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "hiddenSeries": false, + "hideTimeOverride": false, + "id": 2, + "interval": "", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inbound Requests", + "refId": "A" + }, + { + "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{code}} Response", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "HTTP Requests/Responses", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1767", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1768", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "broadcast-service", + "value": "broadcast-service" + }, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "service", + "options": [ + { + "selected": true, + "text": "broadcast-service", + "value": "broadcast-service" + } + ], + "query": "broadcast-service", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "History-Service", + "uid": "kdgb6t9Wk", + "variables": { + "list": [] + }, + "version": 1 +} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/landscape-service.json b/docker-compose/monitoring/grafana/dashboards/landscape-service.json new file mode 100644 index 00000000..965b3dbf --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/landscape-service.json @@ -0,0 +1,297 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:1587", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 9, + "iteration": 1585219999441, + "links": [], + "panels": [ + { + "aliasColors": { + "Max Heap Size": "rgb(255, 255, 255)" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:2612" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", + "interval": "", + "legendFormat": "Used Bytes (Heap) ", + "refId": "B" + } + ], + "thresholds": [ + { + "$$hashKey": "object:2620", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": null, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2377", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2378", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "1xx Response": "semi-dark-purple", + "2xx Response": "green", + "5xx Response": "purple", + "Answered": "green", + "Inbound Requests": "blue" + }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "hiddenSeries": false, + "hideTimeOverride": false, + "id": 2, + "interval": "", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inbound Requests", + "refId": "A" + }, + { + "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{code}} Response", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "HTTP Requests/Responses", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1767", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1768", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "discovery-service", + "value": "discovery-service" + }, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "service", + "options": [ + { + "selected": true, + "text": "discovery-service", + "value": "discovery-service" + } + ], + "query": "discovery-service", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Landscape-Service", + "uid": "dNKB6t9Zz", + "variables": { + "list": [] + }, + "version": 1 +} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/Overview-1585128752830.json b/docker-compose/monitoring/grafana/dashboards/overview.json similarity index 98% rename from docker-compose/monitoring/grafana/dashboards/Overview-1585128752830.json rename to docker-compose/monitoring/grafana/dashboards/overview.json index ef6d3ef7..d33f3e44 100644 --- a/docker-compose/monitoring/grafana/dashboards/Overview-1585128752830.json +++ b/docker-compose/monitoring/grafana/dashboards/overview.json @@ -16,7 +16,7 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "id": 1, + "id": 2, "links": [], "panels": [ { @@ -100,7 +100,7 @@ }, { "aliasColors": {}, - "bars": false, + "bars": true, "dashLength": 10, "dashes": false, "datasource": "Prometheus", @@ -127,7 +127,7 @@ "total": false, "values": false }, - "lines": true, + "lines": false, "linewidth": 1, "nullPointMode": "null", "options": { @@ -135,7 +135,7 @@ }, "percentage": false, "pointradius": 1, - "points": true, + "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, @@ -143,7 +143,7 @@ "steppedLine": false, "targets": [ { - "expr": "rate(jetty_requests_total[1m])", + "expr": "sum(rate(jetty_requests_total[1m]))", "format": "time_series", "interval": "", "intervalFactor": 1, @@ -408,5 +408,5 @@ "variables": { "list": [] }, - "version": 13 + "version": 1 } \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/settings-service.json b/docker-compose/monitoring/grafana/dashboards/settings-service.json new file mode 100644 index 00000000..2e2a4962 --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/settings-service.json @@ -0,0 +1,297 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:1587", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 5, + "iteration": 1585220033656, + "links": [], + "panels": [ + { + "aliasColors": { + "Max Heap Size": "rgb(255, 255, 255)" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:2612" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", + "interval": "", + "legendFormat": "Used Bytes (Heap) ", + "refId": "B" + } + ], + "thresholds": [ + { + "$$hashKey": "object:2620", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": null, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2377", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2378", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "1xx Response": "semi-dark-purple", + "2xx Response": "green", + "5xx Response": "purple", + "Answered": "green", + "Inbound Requests": "blue" + }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "hiddenSeries": false, + "hideTimeOverride": false, + "id": 2, + "interval": "", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inbound Requests", + "refId": "A" + }, + { + "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{code}} Response", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "HTTP Requests/Responses", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1767", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1768", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "settings-service", + "value": "settings-service" + }, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "service", + "options": [ + { + "selected": true, + "text": "settings-service", + "value": "settings-service" + } + ], + "query": "settings-service", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Settings-Service", + "uid": "8H1Net9Wz", + "variables": { + "list": [] + }, + "version": 2 +} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/user-service.json b/docker-compose/monitoring/grafana/dashboards/user-service.json new file mode 100644 index 00000000..99535a12 --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/user-service.json @@ -0,0 +1,272 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:1587", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "aliasColors": { + "Max Heap Size": "rgb(255, 255, 255)" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:2612" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{job=\"user-service\", area=\"heap\"}", + "interval": "", + "legendFormat": "Used Bytes (Heap)", + "refId": "B" + } + ], + "thresholds": [ + { + "$$hashKey": "object:2620", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": null, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2377", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2378", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "1xx Response": "semi-dark-purple", + "2xx Response": "green", + "5xx Response": "purple", + "Answered": "green", + "Inbound Requests": "blue" + }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "fillGradient": 6, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "hiddenSeries": false, + "hideTimeOverride": false, + "id": 2, + "interval": "", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "floor(increase(jetty_requests_total{job=\"user-service\"}[$__interval] offset $__interval))", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inbound Requests", + "refId": "A" + }, + { + "expr": "floor(increase(jetty_responses_total{job=\"user-service\"}[$__interval] offset $__interval))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{code}} Response", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "HTTP Requests/Responses", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1767", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1768", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "User-Service", + "uid": "yKqsrprWk", + "variables": { + "list": [] + }, + "version": 7 +} \ No newline at end of file From f76690533b4012549c953ae98f19fce7d019c3a4 Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Thu, 26 Mar 2020 14:30:30 +0100 Subject: [PATCH 09/15] Track response times per api route --- .../explorviz/broadcast/server/main/Main.java | 11 ++ .../explorviz/discovery/server/main/Main.java | 11 ++ .../grafana/dashboards/broadcast-service.json | 71 +++++++++++- .../grafana/dashboards/discovery-service.json | 71 +++++++++++- .../grafana/dashboards/history-service.json | 71 +++++++++++- .../grafana/dashboards/settings-service.json | 73 ++++++++++++- .../grafana/dashboards/user-service.json | 102 ++++++++++++++++-- .../explorviz/history/server/main/Main.java | 11 ++ .../explorviz/settings/server/main/Main.java | 11 ++ .../explorviz/security/server/main/Main.java | 16 +++ 10 files changed, 424 insertions(+), 24 deletions(-) diff --git a/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java b/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java index 52bd5d92..d6798980 100644 --- a/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java +++ b/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java @@ -1,11 +1,13 @@ 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; @@ -13,6 +15,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.DispatcherType; +import java.util.EnumSet; + /** * Main entry point for this Java application. * @@ -47,6 +52,12 @@ public static void main(final String[] args) { 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)); + // Collect JVM metrics DefaultExports.initialize(); diff --git a/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java b/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java index 7f6f0a0d..e9a55262 100644 --- a/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java +++ b/discovery-service/src/main/java/net/explorviz/discovery/server/main/Main.java @@ -1,11 +1,13 @@ 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; @@ -13,6 +15,9 @@ 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. @@ -50,6 +55,12 @@ public static void main(final String[] args) { 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(); diff --git a/docker-compose/monitoring/grafana/dashboards/broadcast-service.json b/docker-compose/monitoring/grafana/dashboards/broadcast-service.json index 9a3f85a7..4df0344c 100644 --- a/docker-compose/monitoring/grafana/dashboards/broadcast-service.json +++ b/docker-compose/monitoring/grafana/dashboards/broadcast-service.json @@ -16,10 +16,73 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "id": 6, - "iteration": 1585219935133, + "iteration": 1585225319717, "links": [], "panels": [ + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateRdYlGn", + "exponent": 0.5, + "min": 0, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": "Prometheus", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 0 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 6, + "legend": { + "show": true + }, + "pluginVersion": "6.7.1", + "reverseYBuckets": false, + "targets": [ + { + "expr": "explorviz_request_time_count{job=\"$service\"}", + "interval": "", + "legendFormat": "{{method}} {{path}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "API Calls Heatmap", + "tooltip": { + "show": true, + "showHistogram": true + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "middle", + "yBucketNumber": null, + "yBucketSize": null + }, { "aliasColors": { "Max Heap Size": "rgb(255, 255, 255)" @@ -34,7 +97,7 @@ "h": 9, "w": 12, "x": 0, - "y": 0 + "y": 8 }, "hiddenSeries": false, "id": 4, @@ -144,7 +207,7 @@ "h": 9, "w": 12, "x": 12, - "y": 0 + "y": 8 }, "hiddenSeries": false, "hideTimeOverride": false, diff --git a/docker-compose/monitoring/grafana/dashboards/discovery-service.json b/docker-compose/monitoring/grafana/dashboards/discovery-service.json index 7b66b755..83b47aae 100644 --- a/docker-compose/monitoring/grafana/dashboards/discovery-service.json +++ b/docker-compose/monitoring/grafana/dashboards/discovery-service.json @@ -16,10 +16,73 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "id": 8, - "iteration": 1585219954529, + "iteration": 1585225262157, "links": [], "panels": [ + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateRdYlGn", + "exponent": 0.5, + "min": 0, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": "Prometheus", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 0 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 6, + "legend": { + "show": true + }, + "pluginVersion": "6.7.1", + "reverseYBuckets": false, + "targets": [ + { + "expr": "explorviz_request_time_count{job=\"$service\"}", + "interval": "", + "legendFormat": "{{method}} {{path}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "API Calls Heatmap", + "tooltip": { + "show": true, + "showHistogram": true + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "middle", + "yBucketNumber": null, + "yBucketSize": null + }, { "aliasColors": { "Max Heap Size": "rgb(255, 255, 255)" @@ -34,7 +97,7 @@ "h": 9, "w": 12, "x": 0, - "y": 0 + "y": 8 }, "hiddenSeries": false, "id": 4, @@ -144,7 +207,7 @@ "h": 9, "w": 12, "x": 12, - "y": 0 + "y": 8 }, "hiddenSeries": false, "hideTimeOverride": false, diff --git a/docker-compose/monitoring/grafana/dashboards/history-service.json b/docker-compose/monitoring/grafana/dashboards/history-service.json index 011f2b80..d8e2d81e 100644 --- a/docker-compose/monitoring/grafana/dashboards/history-service.json +++ b/docker-compose/monitoring/grafana/dashboards/history-service.json @@ -16,10 +16,73 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "id": 7, - "iteration": 1585219978423, + "iteration": 1585225377461, "links": [], "panels": [ + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateRdYlGn", + "exponent": 0.5, + "min": 0, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": "Prometheus", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 0 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 6, + "legend": { + "show": true + }, + "pluginVersion": "6.7.1", + "reverseYBuckets": false, + "targets": [ + { + "expr": "explorviz_request_time_count{job=\"$service\"}", + "interval": "", + "legendFormat": "{{method}} {{path}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "API Calls Heatmap", + "tooltip": { + "show": true, + "showHistogram": true + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "middle", + "yBucketNumber": null, + "yBucketSize": null + }, { "aliasColors": { "Max Heap Size": "rgb(255, 255, 255)" @@ -34,7 +97,7 @@ "h": 9, "w": 12, "x": 0, - "y": 0 + "y": 8 }, "hiddenSeries": false, "id": 4, @@ -144,7 +207,7 @@ "h": 9, "w": 12, "x": 12, - "y": 0 + "y": 8 }, "hiddenSeries": false, "hideTimeOverride": false, diff --git a/docker-compose/monitoring/grafana/dashboards/settings-service.json b/docker-compose/monitoring/grafana/dashboards/settings-service.json index 2e2a4962..36f5322f 100644 --- a/docker-compose/monitoring/grafana/dashboards/settings-service.json +++ b/docker-compose/monitoring/grafana/dashboards/settings-service.json @@ -16,10 +16,73 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "id": 5, - "iteration": 1585220033656, + "iteration": 1585225412659, "links": [], "panels": [ + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateRdYlGn", + "exponent": 0.5, + "min": 0, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": "Prometheus", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 0 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 6, + "legend": { + "show": true + }, + "pluginVersion": "6.7.1", + "reverseYBuckets": false, + "targets": [ + { + "expr": "explorviz_request_time_count{job=\"$service\"}", + "interval": "", + "legendFormat": "{{method}} {{path}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "API Calls Heatmap", + "tooltip": { + "show": true, + "showHistogram": true + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "middle", + "yBucketNumber": null, + "yBucketSize": null + }, { "aliasColors": { "Max Heap Size": "rgb(255, 255, 255)" @@ -34,7 +97,7 @@ "h": 9, "w": 12, "x": 0, - "y": 0 + "y": 8 }, "hiddenSeries": false, "id": 4, @@ -144,7 +207,7 @@ "h": 9, "w": 12, "x": 12, - "y": 0 + "y": 8 }, "hiddenSeries": false, "hideTimeOverride": false, @@ -293,5 +356,5 @@ "variables": { "list": [] }, - "version": 2 + "version": 1 } \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/user-service.json b/docker-compose/monitoring/grafana/dashboards/user-service.json index 99535a12..d8d01080 100644 --- a/docker-compose/monitoring/grafana/dashboards/user-service.json +++ b/docker-compose/monitoring/grafana/dashboards/user-service.json @@ -16,7 +16,6 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "id": 3, "links": [], "panels": [ { @@ -66,7 +65,7 @@ "steppedLine": false, "targets": [ { - "expr": "jvm_memory_bytes_used{job=\"user-service\", area=\"heap\"}", + "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", "interval": "", "legendFormat": "Used Bytes (Heap)", "refId": "B" @@ -129,7 +128,8 @@ "aliasColors": { "1xx Response": "semi-dark-purple", "2xx Response": "green", - "5xx Response": "purple", + "3xx Response": "purple", + "5xx Response": "red", "Answered": "green", "Inbound Requests": "blue" }, @@ -174,7 +174,7 @@ "steppedLine": true, "targets": [ { - "expr": "floor(increase(jetty_requests_total{job=\"user-service\"}[$__interval] offset $__interval))", + "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", "format": "time_series", "instant": false, "interval": "", @@ -183,7 +183,7 @@ "refId": "A" }, { - "expr": "floor(increase(jetty_responses_total{job=\"user-service\"}[$__interval] offset $__interval))", + "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", "format": "time_series", "hide": false, "instant": false, @@ -235,6 +235,70 @@ "align": false, "alignLevel": null } + }, + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateRdYlGn", + "exponent": 0.5, + "min": 0, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": "Prometheus", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 9 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 6, + "legend": { + "show": true + }, + "pluginVersion": "6.7.1", + "reverseYBuckets": false, + "targets": [ + { + "expr": "explorviz_request_time_count{job=\"$service\"}", + "interval": "", + "legendFormat": "{{method}} {{path}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "API Calls Heatmap", + "tooltip": { + "show": true, + "showHistogram": true + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "middle", + "yBucketNumber": null, + "yBucketSize": null } ], "refresh": false, @@ -242,7 +306,31 @@ "style": "dark", "tags": [], "templating": { - "list": [] + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "user-service", + "value": "user-service" + }, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "service", + "options": [ + { + "selected": true, + "text": "user-service", + "value": "user-service" + } + ], + "query": "user-service", + "skipUrlSync": false, + "type": "custom" + } + ] }, "time": { "from": "now-5m", @@ -268,5 +356,5 @@ "variables": { "list": [] }, - "version": 7 + "version": 1 } \ No newline at end of file diff --git a/history-service/src/main/java/net/explorviz/history/server/main/Main.java b/history-service/src/main/java/net/explorviz/history/server/main/Main.java index 2fe5b521..8bb406f2 100644 --- a/history-service/src/main/java/net/explorviz/history/server/main/Main.java +++ b/history-service/src/main/java/net/explorviz/history/server/main/Main.java @@ -1,11 +1,13 @@ package net.explorviz.history.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; @@ -13,6 +15,9 @@ 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. @@ -49,6 +54,12 @@ public static void main(final String[] args) { 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(); diff --git a/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java b/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java index eb741ff6..0bd3e4bc 100644 --- a/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java +++ b/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java @@ -1,11 +1,13 @@ package net.explorviz.settings.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; @@ -13,6 +15,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.DispatcherType; +import java.util.EnumSet; + public class Main { private static final Logger LOGGER = LoggerFactory.getLogger(Main.class); @@ -45,6 +50,12 @@ public static void main(final String[] args) { 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)); + DefaultExports.initialize(); try { diff --git a/user-service/src/main/java/net/explorviz/security/server/main/Main.java b/user-service/src/main/java/net/explorviz/security/server/main/Main.java index 5e502854..3d45ad22 100644 --- a/user-service/src/main/java/net/explorviz/security/server/main/Main.java +++ b/user-service/src/main/java/net/explorviz/security/server/main/Main.java @@ -1,11 +1,13 @@ package net.explorviz.security.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; @@ -13,6 +15,9 @@ 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 @@ -41,6 +46,7 @@ public static void main(final String[] args) { context.addServlet(jerseyServlet, "/*"); + // Prometheus StatisticsHandler stats = new StatisticsHandler(); stats.setHandler(server.getHandler()); @@ -50,8 +56,16 @@ public static void main(final String[] args) { context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); + // JVM Metrics DefaultExports.initialize(); + 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)); + + try { server.start(); } catch (final Exception e) { // NOPMD @@ -95,4 +109,6 @@ private static ResourceConfig createJaxRsApp() { return new ResourceConfig(new Application()); } + + } From 5c2c37411e2acd0450daeb34f9e2c136d2747799 Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Fri, 27 Mar 2020 14:41:53 +0100 Subject: [PATCH 10/15] Visualize response times and unify dashboards --- .../explorviz/broadcast/server/main/Main.java | 2 +- .../grafana/dashboards/analysis-service.json | 186 --------- .../grafana/dashboards/broadcast-service.json | 360 ------------------ .../grafana/dashboards/discovery-service.json | 360 ------------------ .../grafana/dashboards/history-service.json | 360 ------------------ .../{user-service.json => http-apis.json} | 170 +++++---- .../grafana/dashboards/landscape-service.json | 297 --------------- .../grafana/dashboards/overview.json | 141 ++++--- .../grafana/dashboards/settings-service.json | 360 ------------------ docker-compose/monitoring/prometheus.yml | 6 +- .../explorviz/history/server/main/Main.java | 3 +- .../explorviz/settings/server/main/Main.java | 2 +- .../explorviz/security/server/main/Main.java | 2 +- 13 files changed, 178 insertions(+), 2071 deletions(-) delete mode 100644 docker-compose/monitoring/grafana/dashboards/analysis-service.json delete mode 100644 docker-compose/monitoring/grafana/dashboards/broadcast-service.json delete mode 100644 docker-compose/monitoring/grafana/dashboards/discovery-service.json delete mode 100644 docker-compose/monitoring/grafana/dashboards/history-service.json rename docker-compose/monitoring/grafana/dashboards/{user-service.json => http-apis.json} (78%) delete mode 100644 docker-compose/monitoring/grafana/dashboards/landscape-service.json delete mode 100644 docker-compose/monitoring/grafana/dashboards/settings-service.json diff --git a/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java b/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java index d6798980..d1c3177e 100644 --- a/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java +++ b/broadcast-service/src/main/java/net/explorviz/broadcast/server/main/Main.java @@ -54,7 +54,7 @@ public static void main(final String[] args) { MetricsFilter metricsFilter = new MetricsFilter("explorviz_request_time", - "Filter to measure and forward request times", 20, null); + "Filter to measure and forward request times", 2, null); FilterHolder filterHolder = new FilterHolder(metricsFilter); context.addFilter(filterHolder, "/v1/*", EnumSet.of(DispatcherType.REQUEST)); diff --git a/docker-compose/monitoring/grafana/dashboards/analysis-service.json b/docker-compose/monitoring/grafana/dashboards/analysis-service.json deleted file mode 100644 index 86d3cb9f..00000000 --- a/docker-compose/monitoring/grafana/dashboards/analysis-service.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "annotations": { - "list": [ - { - "$$hashKey": "object:1587", - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": 10, - "iteration": 1585219915911, - "links": [], - "panels": [ - { - "aliasColors": { - "Max Heap Size": "rgb(255, 255, 255)" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 3, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 0 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "$$hashKey": "object:2612" - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", - "interval": "", - "legendFormat": "Used Bytes (Heap) ", - "refId": "B" - } - ], - "thresholds": [ - { - "$$hashKey": "object:2620", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": null, - "yaxis": "left" - } - ], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "JVM Memory", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:2377", - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:2378", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 22, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "allValue": null, - "current": { - "selected": false, - "text": "landscape-service", - "value": "landscape-service" - }, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "service", - "options": [ - { - "selected": true, - "text": "analysis-service", - "value": "analysis-service" - } - ], - "query": "analysis-service", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "Analysis-Service", - "uid": "7ueP6t9Zz", - "variables": { - "list": [] - }, - "version": 2 -} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/broadcast-service.json b/docker-compose/monitoring/grafana/dashboards/broadcast-service.json deleted file mode 100644 index 4df0344c..00000000 --- a/docker-compose/monitoring/grafana/dashboards/broadcast-service.json +++ /dev/null @@ -1,360 +0,0 @@ -{ - "annotations": { - "list": [ - { - "$$hashKey": "object:1587", - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "iteration": 1585225319717, - "links": [], - "panels": [ - { - "cards": { - "cardPadding": null, - "cardRound": null - }, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateRdYlGn", - "exponent": 0.5, - "min": 0, - "mode": "spectrum" - }, - "dataFormat": "tsbuckets", - "datasource": "Prometheus", - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 0 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 6, - "legend": { - "show": true - }, - "pluginVersion": "6.7.1", - "reverseYBuckets": false, - "targets": [ - { - "expr": "explorviz_request_time_count{job=\"$service\"}", - "interval": "", - "legendFormat": "{{method}} {{path}}", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "API Calls Heatmap", - "tooltip": { - "show": true, - "showHistogram": true - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "xBucketNumber": null, - "xBucketSize": null, - "yAxis": { - "decimals": null, - "format": "short", - "logBase": 1, - "max": null, - "min": null, - "show": true, - "splitFactor": null - }, - "yBucketBound": "middle", - "yBucketNumber": null, - "yBucketSize": null - }, - { - "aliasColors": { - "Max Heap Size": "rgb(255, 255, 255)" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 3, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "$$hashKey": "object:2612" - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", - "interval": "", - "legendFormat": "Used Bytes (Heap) ", - "refId": "B" - } - ], - "thresholds": [ - { - "$$hashKey": "object:2620", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": null, - "yaxis": "left" - } - ], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "JVM Memory", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:2377", - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:2378", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": { - "1xx Response": "semi-dark-purple", - "2xx Response": "green", - "5xx Response": "purple", - "Answered": "green", - "Inbound Requests": "blue" - }, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 4, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "hideTimeOverride": false, - "id": 2, - "interval": "", - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "Inbound Requests", - "refId": "A" - }, - { - "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{code}} Response", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "HTTP Requests/Responses", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1767", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1768", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 22, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "allValue": null, - "current": { - "selected": false, - "text": "settings-service", - "value": "settings-service" - }, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "service", - "options": [ - { - "selected": true, - "text": "settings-service", - "value": "settings-service" - } - ], - "query": "settings-service", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "Broadcast-Service", - "uid": "YxyoetrWz", - "variables": { - "list": [] - }, - "version": 1 -} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/discovery-service.json b/docker-compose/monitoring/grafana/dashboards/discovery-service.json deleted file mode 100644 index 83b47aae..00000000 --- a/docker-compose/monitoring/grafana/dashboards/discovery-service.json +++ /dev/null @@ -1,360 +0,0 @@ -{ - "annotations": { - "list": [ - { - "$$hashKey": "object:1587", - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "iteration": 1585225262157, - "links": [], - "panels": [ - { - "cards": { - "cardPadding": null, - "cardRound": null - }, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateRdYlGn", - "exponent": 0.5, - "min": 0, - "mode": "spectrum" - }, - "dataFormat": "tsbuckets", - "datasource": "Prometheus", - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 0 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 6, - "legend": { - "show": true - }, - "pluginVersion": "6.7.1", - "reverseYBuckets": false, - "targets": [ - { - "expr": "explorviz_request_time_count{job=\"$service\"}", - "interval": "", - "legendFormat": "{{method}} {{path}}", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "API Calls Heatmap", - "tooltip": { - "show": true, - "showHistogram": true - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "xBucketNumber": null, - "xBucketSize": null, - "yAxis": { - "decimals": null, - "format": "short", - "logBase": 1, - "max": null, - "min": null, - "show": true, - "splitFactor": null - }, - "yBucketBound": "middle", - "yBucketNumber": null, - "yBucketSize": null - }, - { - "aliasColors": { - "Max Heap Size": "rgb(255, 255, 255)" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 3, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "$$hashKey": "object:2612" - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", - "interval": "", - "legendFormat": "Used Bytes (Heap) ", - "refId": "B" - } - ], - "thresholds": [ - { - "$$hashKey": "object:2620", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": null, - "yaxis": "left" - } - ], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "JVM Memory", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:2377", - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:2378", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": { - "1xx Response": "semi-dark-purple", - "2xx Response": "green", - "5xx Response": "purple", - "Answered": "green", - "Inbound Requests": "blue" - }, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 4, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "hideTimeOverride": false, - "id": 2, - "interval": "", - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "Inbound Requests", - "refId": "A" - }, - { - "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{code}} Response", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "HTTP Requests/Responses", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1767", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1768", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 22, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "allValue": null, - "current": { - "selected": false, - "text": "history-service", - "value": "history-service" - }, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "service", - "options": [ - { - "selected": true, - "text": "history-service", - "value": "history-service" - } - ], - "query": "history-service", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "Discovery-Service", - "uid": "kLGa6prZk", - "variables": { - "list": [] - }, - "version": 1 -} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/history-service.json b/docker-compose/monitoring/grafana/dashboards/history-service.json deleted file mode 100644 index d8e2d81e..00000000 --- a/docker-compose/monitoring/grafana/dashboards/history-service.json +++ /dev/null @@ -1,360 +0,0 @@ -{ - "annotations": { - "list": [ - { - "$$hashKey": "object:1587", - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "iteration": 1585225377461, - "links": [], - "panels": [ - { - "cards": { - "cardPadding": null, - "cardRound": null - }, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateRdYlGn", - "exponent": 0.5, - "min": 0, - "mode": "spectrum" - }, - "dataFormat": "tsbuckets", - "datasource": "Prometheus", - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 0 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 6, - "legend": { - "show": true - }, - "pluginVersion": "6.7.1", - "reverseYBuckets": false, - "targets": [ - { - "expr": "explorviz_request_time_count{job=\"$service\"}", - "interval": "", - "legendFormat": "{{method}} {{path}}", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "API Calls Heatmap", - "tooltip": { - "show": true, - "showHistogram": true - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "xBucketNumber": null, - "xBucketSize": null, - "yAxis": { - "decimals": null, - "format": "short", - "logBase": 1, - "max": null, - "min": null, - "show": true, - "splitFactor": null - }, - "yBucketBound": "middle", - "yBucketNumber": null, - "yBucketSize": null - }, - { - "aliasColors": { - "Max Heap Size": "rgb(255, 255, 255)" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 3, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "$$hashKey": "object:2612" - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", - "interval": "", - "legendFormat": "Used Bytes (Heap) ", - "refId": "B" - } - ], - "thresholds": [ - { - "$$hashKey": "object:2620", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": null, - "yaxis": "left" - } - ], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "JVM Memory", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:2377", - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:2378", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": { - "1xx Response": "semi-dark-purple", - "2xx Response": "green", - "5xx Response": "purple", - "Answered": "green", - "Inbound Requests": "blue" - }, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 4, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "hideTimeOverride": false, - "id": 2, - "interval": "", - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "Inbound Requests", - "refId": "A" - }, - { - "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{code}} Response", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "HTTP Requests/Responses", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1767", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1768", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 22, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "allValue": null, - "current": { - "selected": false, - "text": "broadcast-service", - "value": "broadcast-service" - }, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "service", - "options": [ - { - "selected": true, - "text": "broadcast-service", - "value": "broadcast-service" - } - ], - "query": "broadcast-service", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "History-Service", - "uid": "kdgb6t9Wk", - "variables": { - "list": [] - }, - "version": 1 -} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/user-service.json b/docker-compose/monitoring/grafana/dashboards/http-apis.json similarity index 78% rename from docker-compose/monitoring/grafana/dashboards/user-service.json rename to docker-compose/monitoring/grafana/dashboards/http-apis.json index d8d01080..3121f48a 100644 --- a/docker-compose/monitoring/grafana/dashboards/user-service.json +++ b/docker-compose/monitoring/grafana/dashboards/http-apis.json @@ -16,26 +16,34 @@ "editable": true, "gnetId": null, "graphTooltip": 0, + "iteration": 1585316576289, "links": [], "panels": [ { "aliasColors": { - "Max Heap Size": "rgb(255, 255, 255)" + "1xx Response": "semi-dark-purple", + "2xx Response": "green", + "3xx Response": "purple", + "5xx Response": "red", + "Answered": "green", + "Inbound Requests": "blue" }, - "bars": false, + "bars": true, "dashLength": 10, "dashes": false, "datasource": "Prometheus", - "fill": 3, + "fill": 4, "fillGradient": 6, "gridPos": { - "h": 9, + "h": 8, "w": 12, "x": 0, "y": 0 }, "hiddenSeries": false, - "id": 4, + "hideTimeOverride": false, + "id": 2, + "interval": "", "legend": { "avg": false, "current": false, @@ -45,8 +53,8 @@ "total": false, "values": false }, - "lines": true, - "linewidth": 2, + "lines": false, + "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] @@ -55,37 +63,36 @@ "pointradius": 2, "points": false, "renderer": "flot", - "seriesOverrides": [ - { - "$$hashKey": "object:2612" - } - ], + "seriesOverrides": [], "spaceLength": 10, "stack": false, - "steppedLine": false, + "steppedLine": true, "targets": [ { - "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", + "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inbound Requests", + "refId": "A" + }, + { + "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", + "format": "time_series", + "hide": false, + "instant": false, "interval": "", - "legendFormat": "Used Bytes (Heap)", + "intervalFactor": 1, + "legendFormat": "{{code}} Response", "refId": "B" } ], - "thresholds": [ - { - "$$hashKey": "object:2620", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": null, - "yaxis": "left" - } - ], + "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "JVM Memory", + "title": "HTTP Requests/Responses", "tooltip": { "shared": true, "sort": 0, @@ -101,8 +108,8 @@ }, "yaxes": [ { - "$$hashKey": "object:2377", - "format": "bytes", + "$$hashKey": "object:1767", + "format": "short", "label": null, "logBase": 1, "max": null, @@ -110,7 +117,7 @@ "show": true }, { - "$$hashKey": "object:2378", + "$$hashKey": "object:1768", "format": "short", "label": null, "logBase": 1, @@ -125,30 +132,21 @@ } }, { - "aliasColors": { - "1xx Response": "semi-dark-purple", - "2xx Response": "green", - "3xx Response": "purple", - "5xx Response": "red", - "Answered": "green", - "Inbound Requests": "blue" - }, - "bars": true, + "aliasColors": {}, + "bars": false, "dashLength": 10, "dashes": false, "datasource": "Prometheus", - "fill": 4, - "fillGradient": 6, + "fill": 0, + "fillGradient": 0, "gridPos": { - "h": 9, + "h": 8, "w": 12, "x": 12, "y": 0 }, "hiddenSeries": false, - "hideTimeOverride": false, - "id": 2, - "interval": "", + "id": 8, "legend": { "avg": false, "current": false, @@ -158,46 +156,34 @@ "total": false, "values": false }, - "lines": false, + "lines": true, "linewidth": 1, - "nullPointMode": "null", + "nullPointMode": "connected", "options": { "dataLinks": [] }, "percentage": false, + "pluginVersion": "6.7.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, - "steppedLine": true, + "steppedLine": false, "targets": [ { - "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "instant": false, + "expr": "rate(explorviz_request_time_sum{job=\"$service\"}[$__interval])/rate(explorviz_request_time_count{job=\"$service\"}[$__interval])", "interval": "", - "intervalFactor": 1, - "legendFormat": "Inbound Requests", + "legendFormat": "{{method}} {{path}}", "refId": "A" - }, - { - "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{code}} Response", - "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "HTTP Requests/Responses", + "title": "Average Request Duration", "tooltip": { "shared": true, "sort": 0, @@ -213,8 +199,8 @@ }, "yaxes": [ { - "$$hashKey": "object:1767", - "format": "short", + "$$hashKey": "object:2341", + "format": "s", "label": null, "logBase": 1, "max": null, @@ -222,13 +208,13 @@ "show": true }, { - "$$hashKey": "object:1768", + "$$hashKey": "object:2342", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, - "show": false + "show": true } ], "yaxis": { @@ -239,7 +225,7 @@ { "cards": { "cardPadding": null, - "cardRound": null + "cardRound": 5 }, "color": { "cardColor": "#b4ff00", @@ -252,15 +238,16 @@ "dataFormat": "tsbuckets", "datasource": "Prometheus", "gridPos": { - "h": 8, + "h": 6, "w": 24, "x": 0, - "y": 9 + "y": 8 }, "heatmap": {}, "hideZeroBuckets": false, "highlightCards": true, "id": 6, + "interval": "", "legend": { "show": true }, @@ -268,7 +255,7 @@ "reverseYBuckets": false, "targets": [ { - "expr": "explorviz_request_time_count{job=\"$service\"}", + "expr": "increase(explorviz_request_time_count{job=\"$service\"}[$__interval])", "interval": "", "legendFormat": "{{method}} {{path}}", "refId": "A" @@ -276,11 +263,12 @@ ], "timeFrom": null, "timeShift": null, - "title": "API Calls Heatmap", + "title": "API Calls per Minute", "tooltip": { "show": true, - "showHistogram": true + "showHistogram": false }, + "tooltipDecimals": null, "type": "heatmap", "xAxis": { "show": true @@ -301,7 +289,7 @@ "yBucketSize": null } ], - "refresh": false, + "refresh": "", "schemaVersion": 22, "style": "dark", "tags": [], @@ -310,7 +298,8 @@ { "allValue": null, "current": { - "selected": false, + "$$hashKey": "object:3976", + "selected": true, "text": "user-service", "value": "user-service" }, @@ -321,12 +310,37 @@ "name": "service", "options": [ { + "$$hashKey": "object:3972", + "selected": false, + "text": "broadcast-service", + "value": "broadcast-service" + }, + { + "$$hashKey": "object:3973", + "selected": false, + "text": "discovery-service", + "value": "discovery-service" + }, + { + "$$hashKey": "object:3974", + "selected": false, + "text": "history-service", + "value": "history-service" + }, + { + "$$hashKey": "object:3975", + "selected": false, + "text": "settings-service", + "value": "settings-service" + }, + { + "$$hashKey": "object:3976", "selected": true, "text": "user-service", "value": "user-service" } ], - "query": "user-service", + "query": "broadcast-service, discovery-service, history-service, settings-service, user-service,", "skipUrlSync": false, "type": "custom" } @@ -351,7 +365,7 @@ ] }, "timezone": "", - "title": "User-Service", + "title": "HTTP APIs", "uid": "yKqsrprWk", "variables": { "list": [] diff --git a/docker-compose/monitoring/grafana/dashboards/landscape-service.json b/docker-compose/monitoring/grafana/dashboards/landscape-service.json deleted file mode 100644 index 965b3dbf..00000000 --- a/docker-compose/monitoring/grafana/dashboards/landscape-service.json +++ /dev/null @@ -1,297 +0,0 @@ -{ - "annotations": { - "list": [ - { - "$$hashKey": "object:1587", - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": 9, - "iteration": 1585219999441, - "links": [], - "panels": [ - { - "aliasColors": { - "Max Heap Size": "rgb(255, 255, 255)" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 3, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 0 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "$$hashKey": "object:2612" - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", - "interval": "", - "legendFormat": "Used Bytes (Heap) ", - "refId": "B" - } - ], - "thresholds": [ - { - "$$hashKey": "object:2620", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": null, - "yaxis": "left" - } - ], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "JVM Memory", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:2377", - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:2378", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": { - "1xx Response": "semi-dark-purple", - "2xx Response": "green", - "5xx Response": "purple", - "Answered": "green", - "Inbound Requests": "blue" - }, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 4, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 0 - }, - "hiddenSeries": false, - "hideTimeOverride": false, - "id": 2, - "interval": "", - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "Inbound Requests", - "refId": "A" - }, - { - "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{code}} Response", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "HTTP Requests/Responses", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1767", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1768", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 22, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "allValue": null, - "current": { - "selected": false, - "text": "discovery-service", - "value": "discovery-service" - }, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "service", - "options": [ - { - "selected": true, - "text": "discovery-service", - "value": "discovery-service" - } - ], - "query": "discovery-service", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "Landscape-Service", - "uid": "dNKB6t9Zz", - "variables": { - "list": [] - }, - "version": 1 -} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/overview.json b/docker-compose/monitoring/grafana/dashboards/overview.json index d33f3e44..764c20d9 100644 --- a/docker-compose/monitoring/grafana/dashboards/overview.json +++ b/docker-compose/monitoring/grafana/dashboards/overview.json @@ -16,87 +16,106 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "id": 2, "links": [], "panels": [ { "cacheTimeout": null, + "columns": [ + { + "$$hashKey": "object:453", + "text": "Current", + "value": "current" + } + ], "datasource": "Prometheus", "description": "Displays which services are currently up and running", + "fontSize": "100%", "gridPos": { "h": 9, - "w": 12, + "w": 6, "x": 0, "y": 0 }, "id": 8, "links": [], - "options": { - "fieldOptions": { - "calcs": [ - "last" - ], - "defaults": { - "decimals": 0, - "mappings": [ - { - "from": "", - "id": 1, - "operator": "", - "text": "Down", - "to": "", - "type": 1, - "value": "0" - }, - { - "from": "", - "id": 2, - "operator": "", - "text": "Up", - "to": "", - "type": 1, - "value": "1" - } - ], - "max": 1, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 0.1 - } - ] - }, - "title": "", - "unit": "short" - }, - "overrides": [], - "values": false - }, - "orientation": "auto", - "showThresholdLabels": false, - "showThresholdMarkers": false - }, + "pageSize": null, "pluginVersion": "6.7.1", "repeat": null, + "showHeader": true, + "sort": { + "col": 0, + "desc": true + }, + "styles": [ + { + "$$hashKey": "object:86", + "alias": "Service", + "align": "right", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "decimals": 2, + "link": false, + "pattern": "Metric", + "preserveFormat": false, + "sanitize": false, + "thresholds": [ + "0", + "1" + ], + "type": "string", + "unit": "short" + }, + { + "$$hashKey": "object:1889", + "alias": "", + "align": "auto", + "colorMode": "value", + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "Current", + "thresholds": [ + "0.1", + "1" + ], + "type": "string", + "unit": "short", + "valueMaps": [ + { + "$$hashKey": "object:1973", + "text": "Up", + "value": "1" + }, + { + "$$hashKey": "object:1996", + "text": "Down", + "value": "0" + } + ] + } + ], "targets": [ { "expr": "up{job=~\"broadcast-service|user-service|settings-service|analysis-service|history-service|landscape-service|discovery-service\"}", "interval": "", - "legendFormat": "{{job}}", + "legendFormat": "{{job}} ({{instance}})", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Up/Down", - "type": "gauge" + "transform": "timeseries_aggregations", + "type": "table" }, { "aliasColors": {}, @@ -109,8 +128,8 @@ "fillGradient": 0, "gridPos": { "h": 9, - "w": 12, - "x": 12, + "w": 18, + "x": 6, "y": 0 }, "hiddenSeries": false, @@ -143,11 +162,11 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate(jetty_requests_total[1m]))", + "expr": "sum(rate(jetty_requests_total[$__interval]))", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "{{job}}", + "legendFormat": "Total Inbound Requests", "refId": "A" } ], @@ -237,7 +256,7 @@ "steppedLine": false, "targets": [ { - "expr": "100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)", + "expr": "100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[$__interval])) * 100)", "interval": "", "legendFormat": "{{instance}}", "refId": "A" diff --git a/docker-compose/monitoring/grafana/dashboards/settings-service.json b/docker-compose/monitoring/grafana/dashboards/settings-service.json deleted file mode 100644 index 36f5322f..00000000 --- a/docker-compose/monitoring/grafana/dashboards/settings-service.json +++ /dev/null @@ -1,360 +0,0 @@ -{ - "annotations": { - "list": [ - { - "$$hashKey": "object:1587", - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "iteration": 1585225412659, - "links": [], - "panels": [ - { - "cards": { - "cardPadding": null, - "cardRound": null - }, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateRdYlGn", - "exponent": 0.5, - "min": 0, - "mode": "spectrum" - }, - "dataFormat": "tsbuckets", - "datasource": "Prometheus", - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 0 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 6, - "legend": { - "show": true - }, - "pluginVersion": "6.7.1", - "reverseYBuckets": false, - "targets": [ - { - "expr": "explorviz_request_time_count{job=\"$service\"}", - "interval": "", - "legendFormat": "{{method}} {{path}}", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "API Calls Heatmap", - "tooltip": { - "show": true, - "showHistogram": true - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "xBucketNumber": null, - "xBucketSize": null, - "yAxis": { - "decimals": null, - "format": "short", - "logBase": 1, - "max": null, - "min": null, - "show": true, - "splitFactor": null - }, - "yBucketBound": "middle", - "yBucketNumber": null, - "yBucketSize": null - }, - { - "aliasColors": { - "Max Heap Size": "rgb(255, 255, 255)" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 3, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "$$hashKey": "object:2612" - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "jvm_memory_bytes_used{job=\"$service\", area=\"heap\"}", - "interval": "", - "legendFormat": "Used Bytes (Heap) ", - "refId": "B" - } - ], - "thresholds": [ - { - "$$hashKey": "object:2620", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": null, - "yaxis": "left" - } - ], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "JVM Memory", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:2377", - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:2378", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": { - "1xx Response": "semi-dark-purple", - "2xx Response": "green", - "5xx Response": "purple", - "Answered": "green", - "Inbound Requests": "blue" - }, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 4, - "fillGradient": 6, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "hideTimeOverride": false, - "id": 2, - "interval": "", - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "floor(increase(jetty_requests_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "Inbound Requests", - "refId": "A" - }, - { - "expr": "floor(increase(jetty_responses_total{job=\"$service\"}[$__interval] offset $__interval))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{code}} Response", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "HTTP Requests/Responses", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1767", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1768", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 22, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "allValue": null, - "current": { - "selected": false, - "text": "settings-service", - "value": "settings-service" - }, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "service", - "options": [ - { - "selected": true, - "text": "settings-service", - "value": "settings-service" - } - ], - "query": "settings-service", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "Settings-Service", - "uid": "8H1Net9Wz", - "variables": { - "list": [] - }, - "version": 1 -} \ No newline at end of file diff --git a/docker-compose/monitoring/prometheus.yml b/docker-compose/monitoring/prometheus.yml index 2bf75d2f..246355ad 100644 --- a/docker-compose/monitoring/prometheus.yml +++ b/docker-compose/monitoring/prometheus.yml @@ -1,9 +1,4 @@ scrape_configs: - # Scrape Prometheus itself every 5 seconds. - - job_name: 'prometheus' - scrape_interval: 5s - static_configs: - - targets: ['localhost:9090'] # Scrape the Node Exporter every 5 seconds. - job_name: 'node' @@ -11,6 +6,7 @@ scrape_configs: static_configs: - targets: ['localhost:9100'] + # Scrape all ExplorViz services every 5 seconds. - job_name: 'user-service' scrape_interval: 5s static_configs: diff --git a/history-service/src/main/java/net/explorviz/history/server/main/Main.java b/history-service/src/main/java/net/explorviz/history/server/main/Main.java index 8bb406f2..d8b562ea 100644 --- a/history-service/src/main/java/net/explorviz/history/server/main/Main.java +++ b/history-service/src/main/java/net/explorviz/history/server/main/Main.java @@ -56,8 +56,9 @@ public static void main(final String[] args) { MetricsFilter metricsFilter = new MetricsFilter("explorviz_request_time", - "Filter to measure and forward request times", 20, null); + "Filter to measure and forward request times", 2, null); FilterHolder filterHolder = new FilterHolder(metricsFilter); + context.addFilter(filterHolder, "/v1/*", EnumSet.of(DispatcherType.REQUEST)); // JVM Metrics diff --git a/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java b/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java index 0bd3e4bc..cbabe993 100644 --- a/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java +++ b/settings-service/src/main/java/net/explorviz/settings/server/main/Main.java @@ -52,7 +52,7 @@ public static void main(final String[] args) { MetricsFilter metricsFilter = new MetricsFilter("explorviz_request_time", - "Filter to measure and forward request times", 20, null); + "Filter to measure and forward request times", 2, null); FilterHolder filterHolder = new FilterHolder(metricsFilter); context.addFilter(filterHolder, "/v1/*", EnumSet.of(DispatcherType.REQUEST)); diff --git a/user-service/src/main/java/net/explorviz/security/server/main/Main.java b/user-service/src/main/java/net/explorviz/security/server/main/Main.java index 3d45ad22..a76d9610 100644 --- a/user-service/src/main/java/net/explorviz/security/server/main/Main.java +++ b/user-service/src/main/java/net/explorviz/security/server/main/Main.java @@ -61,7 +61,7 @@ public static void main(final String[] args) { MetricsFilter metricsFilter = new MetricsFilter("explorviz_request_time", - "Filter to measure and forward request times", 20, null); + "Filter to measure and forward request times", 2, null); FilterHolder filterHolder = new FilterHolder(metricsFilter); context.addFilter(filterHolder, "/v1/*", EnumSet.of(DispatcherType.REQUEST)); From e02dc6717b889eeb3a54d735bf3c84619082f2f9 Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Mon, 30 Mar 2020 09:57:55 +0200 Subject: [PATCH 11/15] Fix kieker version --- analysis-service/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analysis-service/build.gradle b/analysis-service/build.gradle index 9f124458..f5f26b08 100644 --- a/analysis-service/build.gradle +++ b/analysis-service/build.gradle @@ -19,7 +19,7 @@ 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 From 87b33f9ca95ea116b6d3963c0434486cf31633ff Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Tue, 31 Mar 2020 10:18:40 +0200 Subject: [PATCH 12/15] Fix traefik setup to listen to port 8080 --- docker-compose/docker-compose-linux.yml | 2 -- docker-compose/traefik/traefik-static.toml | 9 ++++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docker-compose/docker-compose-linux.yml b/docker-compose/docker-compose-linux.yml index ed92000a..7f771277 100644 --- a/docker-compose/docker-compose-linux.yml +++ b/docker-compose/docker-compose-linux.yml @@ -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" diff --git a/docker-compose/traefik/traefik-static.toml b/docker-compose/traefik/traefik-static.toml index 0218fc17..19df4c91 100644 --- a/docker-compose/traefik/traefik-static.toml +++ b/docker-compose/traefik/traefik-static.toml @@ -7,4 +7,11 @@ [api] insecure = true - dashboard = true \ No newline at end of file + dashboard = true + +[entryPoints] + [entryPoints.web] + address = ":8080" + + [entryPoints.traefik] + address=":8081" \ No newline at end of file From 054a24c3b7fb862e7575a86935e98e2611ab06e3 Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Tue, 31 Mar 2020 10:19:18 +0200 Subject: [PATCH 13/15] Monitor record processing times --- .../grafana/dashboards/landscape.json | 162 ++++++++++++++++++ .../grafana/dashboards/resource-usage.json | 136 +++++++++++++++ .../repository/InsertionRepositoryPart.java | 19 +- 3 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 docker-compose/monitoring/grafana/dashboards/landscape.json create mode 100644 docker-compose/monitoring/grafana/dashboards/resource-usage.json diff --git a/docker-compose/monitoring/grafana/dashboards/landscape.json b/docker-compose/monitoring/grafana/dashboards/landscape.json new file mode 100644 index 00000000..3382c2d7 --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/landscape.json @@ -0,0 +1,162 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:36", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Amount of calls and duration of `InsertionRepositoryPart.insertIntoModel(...)`", + "fill": 2, + "fillGradient": 6, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 2, + "interval": "", + "legend": { + "alignAsTable": false, + "avg": true, + "current": false, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null as zero", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:85", + "alias": "Total Processed Records", + "yaxis": 2 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "idelta(explorviz_landscape_insertion_time_sum[$__interval])", + "interval": "", + "legendFormat": "Insertion Time", + "refId": "B" + }, + { + "expr": "idelta(explorviz_landscape_insertion_time_count[$__interval])", + "interval": "", + "legendFormat": "Total Processed Records", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Record Insertion", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:98", + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:99", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Landscape Processing", + "uid": "OW0-2l9Wz", + "variables": { + "list": [] + }, + "version": 2 +} \ No newline at end of file diff --git a/docker-compose/monitoring/grafana/dashboards/resource-usage.json b/docker-compose/monitoring/grafana/dashboards/resource-usage.json new file mode 100644 index 00000000..53d6268c --- /dev/null +++ b/docker-compose/monitoring/grafana/dashboards/resource-usage.json @@ -0,0 +1,136 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:229", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 4, + "links": [], + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "fillGradient": 2, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 2, + "interval": "", + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null as zero", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{area=\"heap\"}", + "interval": "", + "legendFormat": "{{job}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Heap Memory Used", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:294", + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:295", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "schemaVersion": 22, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Resource Usage", + "uid": "uqeFT_9Zk", + "variables": { + "list": [] + }, + "version": 1 +} \ No newline at end of file diff --git a/landscape-service/src/main/java/net/explorviz/landscape/repository/InsertionRepositoryPart.java b/landscape-service/src/main/java/net/explorviz/landscape/repository/InsertionRepositoryPart.java index 624587a6..960e3355 100644 --- a/landscape-service/src/main/java/net/explorviz/landscape/repository/InsertionRepositoryPart.java +++ b/landscape-service/src/main/java/net/explorviz/landscape/repository/InsertionRepositoryPart.java @@ -18,6 +18,9 @@ import java.util.List; import java.util.Map; import java.util.Stack; + +import io.prometheus.client.Gauge; +import io.prometheus.client.Summary; import net.explorviz.landscape.model.application.Application; import net.explorviz.landscape.model.application.Clazz; import net.explorviz.landscape.model.application.Component; @@ -38,8 +41,17 @@ */ public class InsertionRepositoryPart { + + private static final Summary TIMER = Summary.build() + .name("explorviz_landscape_insertion_time") + .help("Time it took to insert a new record") + .register(); + private static final String DEFAULT_COMPONENT_NAME = "(default)"; + + private static long c = 0; + private final Map nodeCache = new HashMap<>(); private final Map applicationCache = new HashMap<>(); private final Map> clazzCache = new HashMap<>(); @@ -61,12 +73,15 @@ public InsertionRepositoryPart(final IdGenerator idGen) { public void insertIntoModel(final IRecord inputIRecord, final Landscape landscape, final RemoteCallRepositoryPart remoteCallRepositoryPart) { + Summary.Timer insertionTimer = TIMER.startTimer(); + if (inputIRecord instanceof Trace) { final Trace trace = (Trace) inputIRecord; final List hostApplicationMetadataList = trace.getTraceEvents().get(0).getHostApplicationMetadataList(); + synchronized (landscape) { for (int i = 0; i < hostApplicationMetadataList.size(); i++) { final HostApplicationMetaDataRecord hostApplicationRecord = @@ -128,7 +143,6 @@ public void insertIntoModel(final IRecord inputIRecord, final Landscape landscap } } else if (inputIRecord instanceof SystemMonitoringRecord) { final SystemMonitoringRecord systemMonitoringRecord = (SystemMonitoringRecord) inputIRecord; - for (final Node node : this.nodeCache.values()) { if (node.getName() .equalsIgnoreCase(systemMonitoringRecord.getHostApplicationMetadata().getHostname()) @@ -142,8 +156,11 @@ public void insertIntoModel(final IRecord inputIRecord, final Landscape landscap node.setUsedRAM(systemMonitoringRecord.getUsedRAM()); } } + } + insertionTimer.observeDuration(); + insertionTimer.close(); } /** From d8c023b1532ba17bd62409aad4eb2921f85460dc Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Tue, 31 Mar 2020 12:15:09 +0200 Subject: [PATCH 14/15] Monitor CPU time per service --- .../grafana/dashboards/resource-usage.json | 103 +++++++++++++++++- docker-compose/traefik/traefik-static.toml | 2 +- 2 files changed, 99 insertions(+), 6 deletions(-) diff --git a/docker-compose/monitoring/grafana/dashboards/resource-usage.json b/docker-compose/monitoring/grafana/dashboards/resource-usage.json index 53d6268c..fce3c097 100644 --- a/docker-compose/monitoring/grafana/dashboards/resource-usage.json +++ b/docker-compose/monitoring/grafana/dashboards/resource-usage.json @@ -16,7 +16,6 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "id": 4, "links": [], "panels": [ { @@ -25,15 +24,109 @@ "dashLength": 10, "dashes": false, "datasource": "Prometheus", - "fill": 1, + "description": "Amount of time (in %) of each service's process spent in \"user\" or \"system\". Relative to the CPU of the host a service runs on", + "fill": 2, "fillGradient": 2, "gridPos": { - "h": 9, + "h": 11, "w": 24, "x": 0, "y": 0 }, "hiddenSeries": false, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null as zero", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "(irate(process_cpu_seconds_total{job=~\".*-service\"}[10s])) * 100", + "interval": "", + "legendFormat": "{{job}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU Time per Service in %", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:224", + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:225", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "fillGradient": 2, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 11 + }, + "hiddenSeries": false, "id": 2, "interval": "", "legend": { @@ -42,7 +135,7 @@ "current": true, "max": true, "min": false, - "rightSide": false, + "rightSide": true, "show": true, "sort": null, "sortDesc": null, @@ -132,5 +225,5 @@ "variables": { "list": [] }, - "version": 1 + "version": 2 } \ No newline at end of file diff --git a/docker-compose/traefik/traefik-static.toml b/docker-compose/traefik/traefik-static.toml index 19df4c91..f34b980b 100644 --- a/docker-compose/traefik/traefik-static.toml +++ b/docker-compose/traefik/traefik-static.toml @@ -14,4 +14,4 @@ address = ":8080" [entryPoints.traefik] - address=":8081" \ No newline at end of file + address=":8181" \ No newline at end of file From 72bc3aea5882788d6c359e37196bc64369853d95 Mon Sep 17 00:00:00 2001 From: Kevin Lotz Date: Wed, 8 Apr 2020 09:56:52 +0200 Subject: [PATCH 15/15] Add add services to mac/windows docker compose file --- docker-compose/docker-compose-windows-mac.yml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docker-compose/docker-compose-windows-mac.yml b/docker-compose/docker-compose-windows-mac.yml index dfbeeee5..ef49ccc3 100644 --- a/docker-compose/docker-compose-windows-mac.yml +++ b/docker-compose/docker-compose-windows-mac.yml @@ -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: