Update to OTel 1.1.0 (#2744)

* Update to OTel 1.1.0

* Use transform safe logger

* Finish

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
This commit is contained in:
Anuraag Agrawal 2021-04-08 16:01:16 +09:00 committed by GitHub
parent 38e98ebdad
commit a4ea1c9db2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 106 additions and 40 deletions

View File

@ -8,8 +8,8 @@ configurations.all {
ext {
versions = [
opentelemetry : '1.0.1',
opentelemetryAlpha: "1.0.1-alpha",
opentelemetry : '1.1.0',
opentelemetryAlpha: "1.1.0-alpha",
slf4j : "1.7.30",
guava : "30.1-jre",

View File

@ -40,7 +40,10 @@ public class ApacheCamelInstrumentationModule extends InstrumentationModule {
@Override
public String[] additionalHelperClassNames() {
return new String[] {"io.opentelemetry.extension.aws.AwsXrayPropagator"};
return new String[] {
"io.opentelemetry.extension.aws.AwsXrayPropagator",
"io.opentelemetry.extension.aws.AwsXrayPropagator$1"
};
}
public static class CamelContextInstrumentation implements TypeInstrumentation {

View File

@ -20,7 +20,10 @@ public class AwsLambdaInstrumentationModule extends InstrumentationModule {
@Override
public String[] additionalHelperClassNames() {
return new String[] {"io.opentelemetry.extension.aws.AwsXrayPropagator"};
return new String[] {
"io.opentelemetry.extension.aws.AwsXrayPropagator",
"io.opentelemetry.extension.aws.AwsXrayPropagator$1"
};
}
@Override

View File

@ -20,7 +20,10 @@ public class AwsSdkInstrumentationModule extends InstrumentationModule {
@Override
public String[] additionalHelperClassNames() {
return new String[] {"io.opentelemetry.extension.aws.AwsXrayPropagator"};
return new String[] {
"io.opentelemetry.extension.aws.AwsXrayPropagator",
"io.opentelemetry.extension.aws.AwsXrayPropagator$1"
};
}
@Override

View File

@ -26,7 +26,10 @@ public class AwsSdkInstrumentationModule extends InstrumentationModule {
@Override
public String[] additionalHelperClassNames() {
return new String[] {"io.opentelemetry.extension.aws.AwsXrayPropagator"};
return new String[] {
"io.opentelemetry.extension.aws.AwsXrayPropagator",
"io.opentelemetry.extension.aws.AwsXrayPropagator$1"
};
}
/**

View File

@ -23,7 +23,7 @@ public class OpenTelemetryMetricsInstrumentation implements TypeInstrumentation
@Override
public ElementMatcher<? super TypeDescription> typeMatcher() {
return named("application.io.opentelemetry.api.metrics.GlobalMetricsProvider");
return named("application.io.opentelemetry.api.metrics.GlobalMeterProvider");
}
@Override

View File

@ -15,7 +15,7 @@ public class ApplicationMeterProvider implements MeterProvider {
private final io.opentelemetry.api.metrics.MeterProvider agentMeterProvider;
public ApplicationMeterProvider() {
this.agentMeterProvider = io.opentelemetry.api.metrics.GlobalMetricsProvider.get();
this.agentMeterProvider = io.opentelemetry.api.metrics.GlobalMeterProvider.get();
}
@Override

View File

@ -12,7 +12,7 @@ import static java.util.concurrent.TimeUnit.SECONDS
import com.google.common.base.Stopwatch
import io.opentelemetry.api.metrics.AsynchronousInstrument
import io.opentelemetry.api.metrics.GlobalMetricsProvider
import io.opentelemetry.api.metrics.GlobalMeterProvider
import io.opentelemetry.api.metrics.common.Labels
import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification
import io.opentelemetry.sdk.metrics.data.MetricData
@ -27,7 +27,7 @@ class MeterTest extends AgentInstrumentationSpecification {
def instrumentationName = "test" + new Random().nextLong()
when:
def meter = GlobalMetricsProvider.getMeter(instrumentationName, "1.2.3")
def meter = GlobalMeterProvider.getMeter(instrumentationName, "1.2.3")
def instrument = meter."$builderMethod"("test")
.setDescription("d")
.setUnit("u")
@ -78,7 +78,7 @@ class MeterTest extends AgentInstrumentationSpecification {
def instrumentationName = "test" + new Random().nextLong()
when:
def meter = GlobalMetricsProvider.getMeter(instrumentationName, "1.2.3")
def meter = GlobalMeterProvider.getMeter(instrumentationName, "1.2.3")
def instrument = meter."$builderMethod"("test")
.setDescription("d")
.setUnit("u")
@ -124,7 +124,7 @@ class MeterTest extends AgentInstrumentationSpecification {
def instrumentationName = "test" + new Random().nextLong()
when:
def meter = GlobalMetricsProvider.getMeter(instrumentationName, "1.2.3")
def meter = GlobalMeterProvider.getMeter(instrumentationName, "1.2.3")
def instrument = meter."$builderMethod"("test")
.setDescription("d")
.setUnit("u")
@ -206,7 +206,7 @@ class MeterTest extends AgentInstrumentationSpecification {
def instrumentationName = "test" + new Random().nextLong()
when:
def meter = GlobalMetricsProvider.getMeter(instrumentationName, "1.2.3")
def meter = GlobalMeterProvider.getMeter(instrumentationName, "1.2.3")
def longCounter = meter.longCounterBuilder("test")
.setDescription("d")
.setUnit("u")
@ -264,6 +264,7 @@ class MeterTest extends AgentInstrumentationSpecification {
List<PointData> points(MetricData metricData) {
def points = []
points.addAll(metricData.getDoubleGaugeData().getPoints())
points.addAll(metricData.getDoubleHistogramData().getPoints())
points.addAll(metricData.getDoubleSumData().getPoints())
points.addAll(metricData.getDoubleSummaryData().getPoints())
points.addAll(metricData.getLongGaugeData().getPoints())

View File

@ -5,7 +5,7 @@
package io.opentelemetry.instrumentation.oshi;
import io.opentelemetry.api.metrics.GlobalMetricsProvider;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.common.Labels;
import oshi.SystemInfo;
@ -20,7 +20,7 @@ public class ProcessMetrics {
/** Register observers for java runtime metrics. */
public static void registerObservers() {
Meter meter = GlobalMetricsProvider.get().get(ProcessMetrics.class.getName());
Meter meter = GlobalMeterProvider.get().get(ProcessMetrics.class.getName());
SystemInfo systemInfo = new SystemInfo();
OperatingSystem osInfo = systemInfo.getOperatingSystem();
OSProcess processInfo = osInfo.getProcess(osInfo.getProcessId());

View File

@ -5,7 +5,7 @@
package io.opentelemetry.instrumentation.oshi;
import io.opentelemetry.api.metrics.GlobalMetricsProvider;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.common.Labels;
import oshi.SystemInfo;
@ -25,7 +25,7 @@ public class SystemMetrics {
/** Register observers for system metrics. */
public static void registerObservers() {
Meter meter = GlobalMetricsProvider.get().get("io.opentelemetry.instrumentation.oshi");
Meter meter = GlobalMeterProvider.get().get("io.opentelemetry.instrumentation.oshi");
SystemInfo systemInfo = new SystemInfo();
HardwareAbstractionLayer hal = systemInfo.getHardware();

View File

@ -48,7 +48,7 @@ class AbstractMetricsTest {
.setExportIntervalMillis(100)
.setMetricExporter(testMetricExporter)
.setMetricProducers(Collections.singletonList(meterProvider))
.build();
.buildAndStart();
}
public void verify(

View File

@ -5,7 +5,7 @@
package io.opentelemetry.instrumentation.runtimemetrics;
import io.opentelemetry.api.metrics.GlobalMetricsProvider;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.common.Labels;
import java.lang.management.GarbageCollectorMXBean;
@ -35,7 +35,7 @@ public final class GarbageCollector {
/** Register all observers provided by this module. */
public static void registerObservers() {
List<GarbageCollectorMXBean> garbageCollectors = ManagementFactory.getGarbageCollectorMXBeans();
Meter meter = GlobalMetricsProvider.getMeter(GarbageCollector.class.getName());
Meter meter = GlobalMeterProvider.getMeter(GarbageCollector.class.getName());
List<Labels> labelSets = new ArrayList<>(garbageCollectors.size());
for (final GarbageCollectorMXBean gc : garbageCollectors) {
labelSets.add(Labels.of(GC_LABEL_KEY, gc.getName()));

View File

@ -6,7 +6,7 @@
package io.opentelemetry.instrumentation.runtimemetrics;
import io.opentelemetry.api.metrics.AsynchronousInstrument.LongResult;
import io.opentelemetry.api.metrics.GlobalMetricsProvider;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.LongUpDownSumObserver;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.common.Labels;
@ -59,7 +59,7 @@ public final class MemoryPools {
/** Register only the "area" observers. */
public static void registerMemoryAreaObservers() {
MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
Meter meter = GlobalMetricsProvider.getMeter(MemoryPools.class.getName());
Meter meter = GlobalMeterProvider.getMeter(MemoryPools.class.getName());
final LongUpDownSumObserver areaMetric =
meter
.longUpDownSumObserverBuilder("runtime.jvm.memory.area")
@ -76,7 +76,7 @@ public final class MemoryPools {
/** Register only the "pool" observers. */
public static void registerMemoryPoolObservers() {
List<MemoryPoolMXBean> poolBeans = ManagementFactory.getMemoryPoolMXBeans();
Meter meter = GlobalMetricsProvider.getMeter(MemoryPools.class.getName());
Meter meter = GlobalMeterProvider.getMeter(MemoryPools.class.getName());
List<Labels> usedLabelSets = new ArrayList<>(poolBeans.size());
List<Labels> committedLabelSets = new ArrayList<>(poolBeans.size());
List<Labels> maxLabelSets = new ArrayList<>(poolBeans.size());

View File

@ -52,7 +52,7 @@ dependencies {
implementation deps.autoservice
implementation deps.slf4j
implementation group: 'io.grpc', name: 'grpc-netty', version: '1.34.1'
implementation group: 'io.grpc', name: 'grpc-netty', version: '1.35.1'
testImplementation project(':testing-common')
testImplementation deps.assertj

View File

@ -6,7 +6,7 @@
package io.opentelemetry.javaagent.tooling;
import com.google.auto.service.AutoService;
import io.opentelemetry.api.metrics.GlobalMetricsProvider;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
import io.opentelemetry.instrumentation.api.config.Config;
import io.opentelemetry.javaagent.spi.exporter.MetricExporterFactory;
@ -128,8 +128,8 @@ public class AgentTracerProviderConfigurer implements SdkTracerProviderConfigure
MetricExporter metricExporter = metricExporterFactory.fromConfig(config.asJavaProperties());
IntervalMetricReader.builder()
.setMetricExporter(metricExporter)
.setMetricProducers(Collections.singleton((SdkMeterProvider) GlobalMetricsProvider.get()))
.build();
.setMetricProducers(Collections.singleton((SdkMeterProvider) GlobalMeterProvider.get()))
.buildAndStart();
log.info("Installed metric exporter: " + metricExporter.getClass().getName());
}
}

View File

@ -47,7 +47,8 @@ import org.slf4j.LoggerFactory;
* possible to extend and reuse them in vendor distributions.
*/
public abstract class InstrumentationModule {
private static final Logger log = LoggerFactory.getLogger(InstrumentationModule.class);
private static final TransformSafeLogger log =
TransformSafeLogger.getLogger(InstrumentationModule.class);
private static final Logger muzzleLog = LoggerFactory.getLogger("muzzleMatcher");
private static final String[] EMPTY = new String[0];
@ -233,7 +234,7 @@ public abstract class InstrumentationModule {
}
}
} else {
if (muzzleLog.isDebugEnabled()) {
if (log.isDebugEnabled()) {
log.debug(
"Applying instrumentation: {} -- {} on {}",
mainInstrumentationName(),

View File

@ -7,6 +7,7 @@ package io.opentelemetry.javaagent.tooling;
import static org.slf4j.event.Level.DEBUG;
import static org.slf4j.event.Level.TRACE;
import static org.slf4j.event.Level.WARN;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
@ -103,6 +104,30 @@ public class TransformSafeLogger {
}
}
public void warn(String format, Object arg) {
if (logMessageQueue != null) {
logMessageQueue.offer(new LogMessage(WARN, logger, format, arg));
} else {
logger.warn(format, arg);
}
}
public void warn(String format, Object arg1, Object arg2) {
if (logMessageQueue != null) {
logMessageQueue.offer(new LogMessage(WARN, logger, format, arg1, arg2));
} else {
logger.warn(format, arg1, arg2);
}
}
public void warn(String format, Object... arguments) {
if (logMessageQueue != null) {
logMessageQueue.offer(new LogMessage(WARN, logger, format, arguments));
} else {
logger.warn(format, arguments);
}
}
public boolean isTraceEnabled() {
return logger.isTraceEnabled();
}

View File

@ -32,6 +32,7 @@ import io.opentelemetry.proto.common.v1.StringKeyValue;
import io.opentelemetry.proto.metrics.v1.DoubleDataPoint;
import io.opentelemetry.proto.metrics.v1.DoubleHistogramDataPoint;
import io.opentelemetry.proto.metrics.v1.DoubleSum;
import io.opentelemetry.proto.metrics.v1.DoubleSummaryDataPoint;
import io.opentelemetry.proto.metrics.v1.InstrumentationLibraryMetrics;
import io.opentelemetry.proto.metrics.v1.IntDataPoint;
import io.opentelemetry.proto.metrics.v1.IntSum;
@ -45,6 +46,8 @@ import io.opentelemetry.proto.trace.v1.Status;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoubleGaugeData;
import io.opentelemetry.sdk.metrics.data.DoubleHistogramData;
import io.opentelemetry.sdk.metrics.data.DoubleHistogramPointData;
import io.opentelemetry.sdk.metrics.data.DoublePointData;
import io.opentelemetry.sdk.metrics.data.DoubleSumData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryData;
@ -66,6 +69,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.jetbrains.annotations.NotNull;
public final class AgentTestingExporterAccess {
@ -306,6 +310,16 @@ public final class AgentTestingExporterAccess {
getTemporality(doubleSum.getAggregationTemporality()),
getDoublePointDatas(metric.getDoubleSum().getDataPointsList())));
case DOUBLE_HISTOGRAM:
return MetricData.createDoubleHistogram(
resource,
instrumentationLibraryInfo,
metric.getName(),
metric.getDescription(),
metric.getUnit(),
DoubleHistogramData.create(
getTemporality(metric.getDoubleHistogram().getAggregationTemporality()),
getDoubleHistogramDataPoints(metric.getDoubleHistogram().getDataPointsList())));
case DOUBLE_SUMMARY:
return MetricData.createDoubleSummary(
resource,
instrumentationLibraryInfo,
@ -313,7 +327,7 @@ public final class AgentTestingExporterAccess {
metric.getDescription(),
metric.getUnit(),
DoubleSummaryData.create(
getDoubleHistogramDataPoints(metric.getDoubleHistogram().getDataPointsList())));
getDoubleSummaryDataPoints(metric.getDoubleSummary().getDataPointsList())));
default:
throw new AssertionError("Unexpected metric data: " + metric.getDataCase());
}
@ -351,8 +365,23 @@ public final class AgentTestingExporterAccess {
.collect(toList());
}
private static Collection<DoubleSummaryPointData> getDoubleHistogramDataPoints(
private static Collection<DoubleHistogramPointData> getDoubleHistogramDataPoints(
List<DoubleHistogramDataPoint> dataPointsList) {
return dataPointsList.stream()
.map(
point ->
DoubleHistogramPointData.create(
point.getStartTimeUnixNano(),
point.getTimeUnixNano(),
createLabels(point.getLabelsList()),
point.getSum(),
point.getExplicitBoundsList(),
point.getBucketCountsList()))
.collect(toList());
}
private static Collection<DoubleSummaryPointData> getDoubleSummaryDataPoints(
List<DoubleSummaryDataPoint> dataPointsList) {
return dataPointsList.stream()
.map(
point ->
@ -366,12 +395,10 @@ public final class AgentTestingExporterAccess {
.collect(toList());
}
private static List<ValueAtPercentile> getValues(DoubleHistogramDataPoint point) {
List<ValueAtPercentile> values = new ArrayList<>();
for (int i = 0; i < point.getExplicitBoundsCount(); i++) {
values.add(ValueAtPercentile.create(point.getExplicitBounds(i), point.getBucketCounts(i)));
}
return values;
private static List<ValueAtPercentile> getValues(DoubleSummaryDataPoint point) {
return point.getQuantileValuesList().stream()
.map(v -> ValueAtPercentile.create(v.getQuantile(), v.getValue()))
.collect(Collectors.toList());
}
private static AggregationTemporality getTemporality(

View File

@ -6,7 +6,7 @@
package io.opentelemetry.javaagent.testing.exporter;
import com.google.auto.service.AutoService;
import io.opentelemetry.api.metrics.GlobalMetricsProvider;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.sdk.autoconfigure.spi.SdkTracerProviderConfigurer;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import io.opentelemetry.sdk.metrics.export.IntervalMetricReader;
@ -34,7 +34,7 @@ public class AgentTestingSdkCustomizer implements SdkTracerProviderConfigurer {
IntervalMetricReader.builder()
.setExportIntervalMillis(100)
.setMetricExporter(AgentTestingExporterFactory.metricExporter)
.setMetricProducers(Collections.singleton((SdkMeterProvider) GlobalMetricsProvider.get()))
.build();
.setMetricProducers(Collections.singleton((SdkMeterProvider) GlobalMeterProvider.get()))
.buildAndStart();
}
}