anchor.diff:  }
   ----
   
  +[id="running-and-using-the-application_{context}"]
   == Running and using the application
   
  -To run the microservice in dev mode, use `./mvnw clean compile quarkus:dev`
  -
  -=== Generate some values for the metrics
  -First, ask the endpoint whether some numbers are prime numbers.
  -
  +To execute the application created in xref:writing-an-application_{context}[], do the following:
  +
  +. Run the microservice in the dev mode:
  ++
  +[source,bash]
  +----
  +./mvnw clean quarkus:dev
  +----
  +
  +. Generate values for the metrics.
  +
  +.. Query the endpoint to determine whether some numbers are prime numbers:
  ++
   [source,bash]
   ----
   curl localhost:8080/350
   ----
  -
  ++
   The application will respond that 350 is not a prime number because it can be divided by 2.
   
  -Now for some large prime number so that the test takes a bit more time:
  -
  +* For large prime numbers, the test takes more time.
  ++
   [source,bash]
   ----
   curl localhost:8080/629521085409773
   ----
  -
  -The application will respond that 629521085409773 is a prime number.
  -If you want, try some more calls with numbers of your choice.
  -
  -=== Review the generated metrics
  -To view the metrics, execute `curl -H"Accept: application/json" localhost:8080/q/metrics/application`
  ++
  +The application will respond that 629521085409773 is a prime number. 
  +
  +.. Perform additional calls with numbers of your choice.
  +
  +. Review the generated metrics:
  ++
  +[source,bash]
  +----
  +curl -H"Accept: application/json" localhost:8080/q/metrics/application
  +----
  ++
   You will receive a response such as:
  -
  ++
   [source,json]
   ----
   {
  -  "org.acme.microprofile.metrics.PrimeNumberChecker.checksTimer" : {
  -    "p50": 217.231273,
  +  "org.acme.microprofile.metrics.PrimeNumberChecker.checksTimer" : {			                    <1>
  +    "p50": 217.231273,										                                        <2>
       "p75": 217.231273,
       "p95": 217.231273,
       "p98": 217.231273,
       "p99": 217.231273,
       "p999": 217.231273,
  -    "min": 0.58961,
  -    "mean": 112.15909190834819,
  -    "max": 217.231273,
  -    "stddev": 108.2721053982776,
  -    "count": 2,
  -    "meanRate": 0.04943519091742238,
  +    "min": 0.58961,										                                            <3>
  +    "mean": 112.15909190834819,								                                        <4>
  +    "max": 217.231273,									                                            <5>
  +    "stddev": 108.2721053982776,							    	                                <6>
  +    "count": 2,											                                            <7>
  +    "meanRate": 0.04943519091742238,							                                    <8>
       "oneMinRate": 0.2232140583080189,
       "fiveMinRate": 0.3559527083952095,
       "fifteenMinRate": 0.38474303050928976
     },
  -  "org.acme.microprofile.metrics.PrimeNumberChecker.performedChecks" : 2,
  -  "org.acme.microprofile.metrics.PrimeNumberChecker.highestPrimeNumberSoFar" : 629521085409773
  +  "org.acme.microprofile.metrics.PrimeNumberChecker.performedChecks" : 2,		                    <9>
  +  "org.acme.microprofile.metrics.PrimeNumberChecker.highestPrimeNumberSoFar" : 629521085409773		<10>
   }
   ----
   
  -Let's explain the meaning of each metric:
  -
  -* `performedChecks`: A counter which is increased by one each time the user asks about a number.
  -* `highestPrimeNumberSoFar`: This is a gauge that stores the highest number that was asked about by the user and which was determined to be prime.
  -* `checksTimer`: This is a timer, therefore a compound metric that benchmarks how much time the primality tests take. All durations are measured in milliseconds. It consists of these values:
  -** `min`: The shortest duration it took to perform a primality test, probably it was performed for a small number.
  -** `max`: The longest duration, probably it was with a large prime number.
  -** `mean`: The mean value of the measured durations.
  -** `stddev`: The standard deviation.
  -** `count`: The number of observations (so it will be the same value as `performedChecks`).
  -** `p50, p75, p95, p99, p999`: Percentiles of the durations. For example the value in `p95` means that 95 % of the measurements were faster than this duration.
  -** `meanRate, oneMinRate, fiveMinRate, fifteenMinRate`: Mean throughput and one-, five-, and fifteen-minute exponentially-weighted moving average throughput.
  -
  -If you prefer an OpenMetrics export rather than the JSON format, remove the `-H"Accept: application/json"` argument from your command line.
  -
  -== Configuration Reference
  +<1> `checksTimer`: A compound metric that benchmarks how much time the primality tests take. All durations are measured in milliseconds. It consists of these values below.
  +<2> `p50, p75, p95, p99, p999`: Percentiles of the durations. For example, the value in `p95` means that 95 % of the measurements were faster than this duration.
  +<3> `min`: The shortest duration it took to perform a primality test was probably performed for a small number.
  +<4> `mean`: The mean value of the measured durations.
  +<5> `max`: The longest duration, probably it was with a large prime number.
  +<6> `stddev`: The standard deviation.
  +<7> `count`: The number of observations, the value of which is the same as `performedChecks`.
  +<8> `meanRate, oneMinRate, fiveMinRate, fifteenMinRate`: Mean throughput and one-, five-, and fifteen-minute exponentially-weighted moving average throughput.
  +<9> `performedChecks`: A counter which is increased by one each time the user asks about a number.
  +<10> `highestPrimeNumberSoFar`: A gauge that stores the highest number that was asked about by the user and which was determined to be prime.
  +
  +NOTE: If you prefer an OpenMetrics export rather than the JSON format, remove the `-H"Accept: application/json"` argument from your command line.
  +
  +.Configuration Reference
   
   include::{generated-dir}/config/quarkus-smallrye-metrics.adoc[opts=optional, leveloffset=+1]
  
positive.code: and pull requests should be submitted there:
  https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc
  ////
  = SmallRye Metrics
  
  include::./attributes.adoc[]
  
  This guide demonstrates how your Quarkus application can use https://github.com/smallrye/smallrye-metrics/[SmallRye Metrics],
  an implementation of the https://github.com/eclipse/microprofile-metrics/[MicroProfile Metrics] specification.
  
  SmallRye Metrics allows applications to gather various metrics and statistics that provide
  insights into what is happening inside the application.
  
  The metrics can be read remotely using JSON format or the OpenMetrics format, so that
  they can be processed by additional tools such as Prometheus, and stored for analysis
  and visualisation.
  
  Apart from application-specific metrics, which are described in this guide, you may also utilize built-in metrics
  exposed by various Quarkus extensions. These are described in the guide for each particular extension that supports
  built-in metrics.
  
  IMPORTANT: link:micrometer[Micrometer] is the recommended approach to metrics for Quarkus.
  Use the SmallRye Metrics extension when it's required to retain MicroProfile specification compatibility.
  
  == Prerequisites
  
  To complete this guide, you need:
  
  * less than 15 minutes
  * an IDE
  * JDK 11+ installed with `JAVA_HOME` configured appropriately
  * Apache Maven {maven-version}
  
  == Architecture
  In this example, we build a very simple microservice which offers one REST endpoint and that endpoint serves
  for determining whether a number is prime. The implementation class is annotated with some metric annotations
  so that while responding to user's requests, some metrics are gathered. The meaning of each metric will be explained later.
  
  == Solution
  
  We recommend that you follow the instructions in the next sections and create the application step by step.
  However, you can go right to the completed example.
  
  Clone the Git repository: `git clone {quickstarts-clone-url}`, or download an {quickstarts-archive-url}[archive].
  
  The solution is located in the `microprofile-metrics-quickstart` {quickstarts-tree-url}/microprofile-metrics-quickstart[directory].
  
  == Creating the Maven Project
  
  First, we need a new project. Create a new project with the following command:
  
  [source,bash,subs=attributes+]
  ----
  mvn io.quarkus.platform:quarkus-maven-plugin:{quarkus-version}:create \
      -DprojectGroupId=org.acme \
      -DprojectArtifactId=microprofile-metrics-quickstart \
      -DclassName="org.acme.microprofile.metrics.PrimeNumberResource" \
      -Dpath="/" \
      -Dextensions="resteasy,smallrye-metrics"
  cd microprofile-metrics-quickstart
  ----
  
  This command generates a Maven project, importing the `smallrye-metrics`.
  
  If you already have your Quarkus project configured, you can add the `smallrye-metrics` extension
  to your project by running the following command in your project base directory:
  
  [source,bash]
  ----
  ./mvnw quarkus:add-extension -Dextensions="smallrye-metrics"
  ----
  
  This will add the following to your `pom.xml`:
  
  [source,xml]
  ----
  <dependency>
  
negative.code: </dependency>
  ----
  
  [id="writing-an-application_{context}"]
  == Writing an application
  
  The following procedures create a Maven-based Quarkus application that consists of a single class that implements an algorithm for checking whether a number is prime. This algorithm is exposed over a REST interface. Additionally, specific annotations are required to ensure that the desired metrics are calculated over time and can be exported for manual analysis or processing by additional tooling.
  
  The application will gather the following metrics:
  
  * `performedChecks`: A counter that increases by one each time the user asks about a number.
  * `highestPrimeNumberSoFar`: A gauge that stores the highest number asked about by the user if the number was determined to be prime.
  * `checksTimer`: A compound metric that benchmarks how much time the primality tests take. Additional details are provided later.
  
  The full source code looks as follows:
  [source,java]
  ----
  package org.acme.microprofile.metrics;
  