From 641a1a0318a6de88ad5e4643258f7165783141e7 Mon Sep 17 00:00:00 2001 From: roger yuan Date: Wed, 19 May 2021 09:42:33 -0600 Subject: [AAI] Export relevant key metrics for monitoring in Prometheus Make the key metrics available to the monitoring system by instrumenting the code. The Key metrics are available via /actuator/prometheus /actuator/info /actuator/health Issue-ID: AAI-3343 Signed-off-by: Roger Yuan Change-Id: I69f7eafb5105a04369526c70902ac7b676038c36 --- .../java/org/onap/aai/rest/BulkAddConsumer.java | 2 + .../org/onap/aai/rest/BulkProcessConsumer.java | 2 + .../java/org/onap/aai/rest/ExampleConsumer.java | 2 + .../java/org/onap/aai/rest/LegacyMoxyConsumer.java | 2 + .../org/onap/aai/rest/URLFromVertexIdConsumer.java | 2 + .../java/org/onap/aai/rest/VertexIdConsumer.java | 2 + .../rest/bulk/BulkSingleTransactionConsumer.java | 2 + .../org/onap/aai/web/MicrometerConfiguration.java | 60 ++++++++++++++++++++++ 8 files changed, 74 insertions(+) create mode 100644 aai-resources/src/main/java/org/onap/aai/web/MicrometerConfiguration.java (limited to 'aai-resources/src/main/java/org') diff --git a/aai-resources/src/main/java/org/onap/aai/rest/BulkAddConsumer.java b/aai-resources/src/main/java/org/onap/aai/rest/BulkAddConsumer.java index 0c316bf..e28cce9 100644 --- a/aai-resources/src/main/java/org/onap/aai/rest/BulkAddConsumer.java +++ b/aai-resources/src/main/java/org/onap/aai/rest/BulkAddConsumer.java @@ -21,9 +21,11 @@ package org.onap.aai.rest; import javax.ws.rs.Path; +import io.micrometer.core.annotation.Timed; import org.onap.aai.restcore.HttpMethod; @Path("{version: v[1-9][0-9]*|latest}/bulkadd") +@Timed public class BulkAddConsumer extends BulkConsumer { @Override diff --git a/aai-resources/src/main/java/org/onap/aai/rest/BulkProcessConsumer.java b/aai-resources/src/main/java/org/onap/aai/rest/BulkProcessConsumer.java index aac2deb..1a03656 100644 --- a/aai-resources/src/main/java/org/onap/aai/rest/BulkProcessConsumer.java +++ b/aai-resources/src/main/java/org/onap/aai/rest/BulkProcessConsumer.java @@ -21,9 +21,11 @@ package org.onap.aai.rest; import javax.ws.rs.Path; +import io.micrometer.core.annotation.Timed; import org.onap.aai.restcore.HttpMethod; @Path("{version: v[1-9][0-9]*|latest}/bulkprocess") +@Timed public class BulkProcessConsumer extends BulkConsumer { @Override diff --git a/aai-resources/src/main/java/org/onap/aai/rest/ExampleConsumer.java b/aai-resources/src/main/java/org/onap/aai/rest/ExampleConsumer.java index 74884e2..8541844 100644 --- a/aai-resources/src/main/java/org/onap/aai/rest/ExampleConsumer.java +++ b/aai-resources/src/main/java/org/onap/aai/rest/ExampleConsumer.java @@ -31,6 +31,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriInfo; +import io.micrometer.core.annotation.Timed; import org.onap.aai.config.SpringContextAware; import org.onap.aai.exceptions.AAIException; import org.onap.aai.introspection.Introspector; @@ -47,6 +48,7 @@ import org.onap.aai.restcore.RESTAPI; * The Class ExampleConsumer. */ @Path("{version: v[1-9][0-9]*|latest}/examples") +@Timed public class ExampleConsumer extends RESTAPI { diff --git a/aai-resources/src/main/java/org/onap/aai/rest/LegacyMoxyConsumer.java b/aai-resources/src/main/java/org/onap/aai/rest/LegacyMoxyConsumer.java index c9991cc..3881b09 100644 --- a/aai-resources/src/main/java/org/onap/aai/rest/LegacyMoxyConsumer.java +++ b/aai-resources/src/main/java/org/onap/aai/rest/LegacyMoxyConsumer.java @@ -19,6 +19,7 @@ */ package org.onap.aai.rest; +import io.micrometer.core.annotation.Timed; import io.swagger.jaxrs.PATCH; import org.apache.commons.lang3.ObjectUtils; import org.javatuples.Pair; @@ -58,6 +59,7 @@ import java.util.stream.Collectors; */ @Controller @Path("{version: v[1-9][0-9]*|latest}") +@Timed public class LegacyMoxyConsumer extends RESTAPI { private static final Logger logger = LoggerFactory.getLogger(LegacyMoxyConsumer.class.getName()); diff --git a/aai-resources/src/main/java/org/onap/aai/rest/URLFromVertexIdConsumer.java b/aai-resources/src/main/java/org/onap/aai/rest/URLFromVertexIdConsumer.java index 9293569..acaec5e 100644 --- a/aai-resources/src/main/java/org/onap/aai/rest/URLFromVertexIdConsumer.java +++ b/aai-resources/src/main/java/org/onap/aai/rest/URLFromVertexIdConsumer.java @@ -19,6 +19,7 @@ */ package org.onap.aai.rest; +import io.micrometer.core.annotation.Timed; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.onap.aai.config.SpringContextAware; import org.onap.aai.exceptions.AAIException; @@ -45,6 +46,7 @@ import java.util.Iterator; * The Class URLFromVertexIdConsumer. */ @Path("{version: v[1-9][0-9]*|latest}/generateurl") +@Timed public class URLFromVertexIdConsumer extends RESTAPI { private ModelType introspectorFactoryType = ModelType.MOXY; diff --git a/aai-resources/src/main/java/org/onap/aai/rest/VertexIdConsumer.java b/aai-resources/src/main/java/org/onap/aai/rest/VertexIdConsumer.java index 6637d41..61853e3 100644 --- a/aai-resources/src/main/java/org/onap/aai/rest/VertexIdConsumer.java +++ b/aai-resources/src/main/java/org/onap/aai/rest/VertexIdConsumer.java @@ -19,6 +19,7 @@ */ package org.onap.aai.rest; +import io.micrometer.core.annotation.Timed; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.javatuples.Pair; import org.onap.aai.config.SpringContextAware; @@ -48,6 +49,7 @@ import java.util.List; * The Class VertexIdConsumer. */ @Path("{version: v[1-9][0-9]*|latest}/resources") +@Timed public class VertexIdConsumer extends RESTAPI { private ModelType introspectorFactoryType = ModelType.MOXY; diff --git a/aai-resources/src/main/java/org/onap/aai/rest/bulk/BulkSingleTransactionConsumer.java b/aai-resources/src/main/java/org/onap/aai/rest/bulk/BulkSingleTransactionConsumer.java index b7b4873..a5e5d7c 100644 --- a/aai-resources/src/main/java/org/onap/aai/rest/bulk/BulkSingleTransactionConsumer.java +++ b/aai-resources/src/main/java/org/onap/aai/rest/bulk/BulkSingleTransactionConsumer.java @@ -23,6 +23,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonParser; +import io.micrometer.core.annotation.Timed; import org.javatuples.Pair; import org.onap.aai.config.SpringContextAware; import org.onap.aai.exceptions.AAIException; @@ -55,6 +56,7 @@ import java.net.URI; import java.util.*; @Path(value = "{version: v[1-9][0-9]*|latest}/bulk/single-transaction") +@Timed public class BulkSingleTransactionConsumer extends RESTAPI { private static final Set validOperations = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("put", "patch", "delete"))); diff --git a/aai-resources/src/main/java/org/onap/aai/web/MicrometerConfiguration.java b/aai-resources/src/main/java/org/onap/aai/web/MicrometerConfiguration.java new file mode 100644 index 0000000..0be4e0b --- /dev/null +++ b/aai-resources/src/main/java/org/onap/aai/web/MicrometerConfiguration.java @@ -0,0 +1,60 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.web; +import io.micrometer.core.instrument.Tag; +import io.micrometer.core.instrument.Tags; +import io.micrometer.jersey2.server.JerseyTags; +import io.micrometer.jersey2.server.JerseyTagsProvider; +import org.glassfish.jersey.server.ContainerResponse; +import org.glassfish.jersey.server.monitoring.RequestEvent; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Configuration Class to add customized tags to http metrics scraped in /actuator/prometheus endpoint + */ +@Configuration +public class MicrometerConfiguration { + private static final String TAG_AAI_URI = "aai_uri"; + private static final String NOT_AVAILABLE = "NOT AVAILABLE"; + + @Bean + public JerseyTagsProvider jerseyTagsProvider() { + return new JerseyTagsProvider() { + @Override + public Iterable httpRequestTags(RequestEvent event) { + ContainerResponse response = event.getContainerResponse(); + return Tags.of(JerseyTags.method(event.getContainerRequest()), + JerseyTags.exception(event), JerseyTags.status(response), JerseyTags.outcome(response), getAaiUriTag(event)); + } + private Tag getAaiUriTag(RequestEvent event) { + String aai_uri = event.getUriInfo().getRequestUri().toString(); + if (aai_uri == null) { + aai_uri = NOT_AVAILABLE; + } + return Tag.of(TAG_AAI_URI, aai_uri); + } + @Override + public Iterable httpLongRequestTags(RequestEvent event) { + return Tags.of(JerseyTags.method(event.getContainerRequest()), JerseyTags.uri(event)); + } + }; + } +} \ No newline at end of file -- cgit 1.2.3-korg