aws-observability / aws-otel-java-instrumentation

AWS Distro for OpenTelemetry Java Instrumentation Library
https://aws-otel.github.io/
Apache License 2.0
76 stars 56 forks source link

Add Application Signals runtime metrics #881

Closed bjrara closed 2 months ago

bjrara commented 2 months ago

Feature request

Add runtime metrics collection into Application Signals.

Description of changes:

  1. Add JMX metrics template.
    1. The JMX template is taken from https://github.com/aws-observability/aws-otel-java-instrumentation/pull/817. The template is updated with bug fixes and added with additional CPU metrics. The author of the original PR is notified with the changes.
  2. Introduce CloudWatchTemporalitySelector to set temporality of Application Signals exporter to alwaysDelta.
  3. Add ScopeBasedPeriodicMetricReader to copy metrics from io.opentelemetry.jmx instrumentation scope to Application Signals exporter.
  4. Set aws.local.service into resource attributes.

Result example

{
  resource=Resource{
    schemaUrl=https: //opentelemetry.io/schemas/1.21.0,
    attributes={
      aws.local.service="ec2-runtime-demo",
      cloud.account.id="633750930120",
      cloud.availability_zone="us-east-1a",
      cloud.platform="aws_ec2",
      cloud.provider="aws",
      cloud.region="us-east-1",
      host.arch="amd64",
      host.id="i-03ff80a878a803e0e",
      host.image.id="ami-0ae8f15ae66fe8cda",
      host.name="ip-172-31-25-215.ec2.internal",
      host.type="t2.medium",
      os.description="Linux 6.1.102-108.177.amzn2023.x86_64",
      os.type="linux",
      process.command_args=[
        /usr/lib/jvm/java-21-amazon-corretto.x86_64/bin/java,
        -Dotel.instrumentation.micrometer.enabled=false,
        -jar,
        spring-petclinic-all-in-one.jar
      ],
      process.executable.path="/usr/lib/jvm/java-21-amazon-corretto.x86_64/bin/java",
      process.pid=445291,
      process.runtime.description="Amazon.com Inc. OpenJDK 64-Bit Server VM 21.0.4+7-LTS",
      process.runtime.name="OpenJDK Runtime Environment",
      process.runtime.version="21.0.4+7-LTS",
      service.name="ec2-runtime-demo",
      service.version="3.1.0-SNAPSHOT",
      telemetry.auto.version="1.33.0-aws-SNAPSHOT",
      telemetry.sdk.language="java",
      telemetry.sdk.name="opentelemetry",
      telemetry.sdk.version="1.34.1"
    }
  },
  instrumentationScopeInfo=InstrumentationScopeInfo{
    name=io.opentelemetry.jmx,
    version=null,
    schemaUrl=null,
    attributes={

    }
  },
  name=jvm.gc.collections.elapsed,
  description=Theapproximateaccumulatedcollectionelapsedtimeinmilliseconds,
  unit=ms,
  type=LONG_SUM,
  data=ImmutableSumData{
    points=[
      ImmutableLongPointData{
        startEpochNanos=1724126549515601332,
        epochNanos=1724126609522082935,
        attributes={
          name="G1 Old Generation"
        },
        value=0,
        exemplars=[

        ]
      },
      ImmutableLongPointData{
        startEpochNanos=1724126549515601332,
        epochNanos=1724126609522082935,
        attributes={
          name="G1 Concurrent GC"
        },
        value=49,
        exemplars=[

        ]
      },
      ImmutableLongPointData{
        startEpochNanos=1724126549515601332,
        epochNanos=1724126609522082935,
        attributes={
          name="G1 Young Generation"
        },
        value=332,
        exemplars=[

        ]
      }
    ],
    monotonic=true,
    aggregationTemporality=CUMULATIVE
  }
}

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

bjrara commented 2 months ago

Closed this PR and track the merge process in https://github.com/aws-observability/aws-otel-java-instrumentation/pull/892.