3.8 KiB
| title | weight | cSpell:ignore |
|---|---|---|
| Resources | 70 | getenv myhost SIGINT uuidgen WORKDIR |
{{% docs/languages/resources-intro %}}
If you use the Java agent for automatic instrumentation you can learn how to setup resource detection following the Agent Configuration Guide.
For manual instrumentation, you will find some introductions on how to set up resource detection below.
Detecting resources from common environments
You can use ResourceProviders for filling in attributes related to common
environments, like Container,
Host or
Operating System. These can be used with or
without
autoconfiguration.
To use those providers, add the following dependency:
{{< tabpane text=true >}} {{% tab Gradle %}}
dependencies {
implementation("io.opentelemetry.instrumentation:opentelemetry-resources:{{% param vers.otel %}}-alpha");
}
{{% /tab %}} {{% tab Maven %}}
<project>
<dependencies>
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-resources</artifactId>
</dependency>
</dependencies>
</project>
{{< /tab >}} {{< /tabpane>}}
Next you can use them like the following in your code:
import io.opentelemetry.instrumentation.resources.ContainerResource;
import io.opentelemetry.instrumentation.resources.HostResource;
import io.opentelemetry.instrumentation.resources.OsResource;
import io.opentelemetry.instrumentation.resources.ProcessResource;
import io.opentelemetry.instrumentation.resources.ProcessRuntimeResource;
...
Resource resource = Resource.getDefault()
.merge(ContainerResource.get())
.merge(HostResource.get())
.merge(OsResource.get())
.merge(ProcessResource.get())
.merge(ProcessRuntimeResource.get())
.merge(Resource.create(Attributes.builder()
.put(ResourceAttributes.SERVICE_NAME, "dice-service")
...
.build()));
...
Adding resources in code
Custom resources can be configured in your code like the following:
Resource resource = Resource.getDefault()
.merge(Resource.create(Attributes.builder()
.put(ResourceAttributes.SERVICE_NAME, "dice-service")
.put(ResourceAttributes.SERVICE_VERSION, "0.1.0")
.put(ResourceAttributes.SERVICE_INSTANCE_ID, "dice-service-1")
.put(ResourceAttributes.HOST_NAME, System.getenv("HOSTNAME"))
.put(ResourceAttributes.PROCESS_PID, ProcessHandle.current().pid())
.build()));
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
.setResource(resource)
...
.build();
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
.setResource(resource)
...
.build();
SdkLoggerProvider sdkLoggerProvider = SdkLoggerProvider.builder()
.setResource(resource)
...
.build();
Next steps
Besides the Standard OpenTelemetry Resource Providers shown in the samples above, there are more resource providers that you can add to your configuration. These include: