Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/SDK/Resource/Detectors/Composer.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
use OpenTelemetry\SemConv\ResourceAttributes;

/**
* Detect service name and version of root package. Not included in `all` detectors.
*/
final class Composer implements ResourceDetectorInterface
{
public function getResource(): ResourceInfo
Expand Down
2 changes: 1 addition & 1 deletion src/SDK/Resource/Detectors/Composite.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public function __construct(private readonly iterable $resourceDetectors)

public function getResource(): ResourceInfo
{
$resource = ResourceInfoFactory::emptyResource();
$resource = ResourceInfoFactory::mandatoryResource();
foreach ($this->resourceDetectors as $resourceDetector) {
$resource = $resource->merge($resourceDetector->getResource());
}
Expand Down
8 changes: 0 additions & 8 deletions src/SDK/Resource/Detectors/Environment.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,6 @@ public function getResource(): ResourceInfo
? self::decode(Configuration::getMap(Variables::OTEL_RESOURCE_ATTRIBUTES, []))
: [];

//@see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration
$serviceName = Configuration::has(Variables::OTEL_SERVICE_NAME)
? Configuration::getString(Variables::OTEL_SERVICE_NAME)
: null;
if ($serviceName) {
$attributes[ResourceAttributes::SERVICE_NAME] = $serviceName;
}

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
}

Expand Down
8 changes: 8 additions & 0 deletions src/SDK/Resource/Detectors/Host.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use const PHP_OS;
use const PHP_OS_FAMILY;
use function php_uname;
use function strtolower;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/host.md#host
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/os.md
*/
final class Host implements ResourceDetectorInterface
{
Expand All @@ -31,6 +35,10 @@ public function getResource(): ResourceInfo
ResourceAttributes::HOST_NAME => php_uname('n'),
ResourceAttributes::HOST_ARCH => php_uname('m'),
ResourceAttributes::HOST_ID => $this->getMachineId(),
ResourceAttributes::OS_TYPE => strtolower(PHP_OS_FAMILY),
ResourceAttributes::OS_DESCRIPTION => php_uname('r'),
ResourceAttributes::OS_NAME => PHP_OS,
ResourceAttributes::OS_VERSION => php_uname('v'),
];

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
Expand Down
17 changes: 2 additions & 15 deletions src/SDK/Resource/Detectors/OperatingSystem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,16 @@

namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use const PHP_OS;
use const PHP_OS_FAMILY;
use function php_uname;
use function strtolower;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/os.md
* @deprecated Use Host detector instead.
*/
final class OperatingSystem implements ResourceDetectorInterface
{
public function getResource(): ResourceInfo
{
$attributes = [
ResourceAttributes::OS_TYPE => strtolower(PHP_OS_FAMILY),
ResourceAttributes::OS_DESCRIPTION => php_uname('r'),
ResourceAttributes::OS_NAME => PHP_OS,
ResourceAttributes::OS_VERSION => php_uname('v'),
];

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
return ResourceInfo::emptyResource();
}
}
13 changes: 10 additions & 3 deletions src/SDK/Resource/Detectors/Process.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use const PHP_BINARY;
use function php_sapi_name;
use const PHP_VERSION;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/process.md#process
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/process.md#process-runtimes
*/
final class Process implements ResourceDetectorInterface
{
Expand All @@ -22,9 +25,13 @@ final class Process implements ResourceDetectorInterface
*/
public function getResource(): ResourceInfo
{
$attributes = [];
$attributes[ResourceAttributes::PROCESS_PID] = getmypid();
$attributes[ResourceAttributes::PROCESS_EXECUTABLE_PATH] = PHP_BINARY;
$attributes = [
ResourceAttributes::PROCESS_RUNTIME_NAME => php_sapi_name(),
ResourceAttributes::PROCESS_RUNTIME_VERSION => PHP_VERSION,
ResourceAttributes::PROCESS_PID => getmypid(),
ResourceAttributes::PROCESS_EXECUTABLE_PATH => PHP_BINARY,
];

/**
* @psalm-suppress PossiblyUndefinedArrayOffset
*/
Expand Down
13 changes: 2 additions & 11 deletions src/SDK/Resource/Detectors/ProcessRuntime.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,16 @@

namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use function php_sapi_name;
use const PHP_VERSION;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/process.md#process-runtimes
* @deprecated Use Process detector instead.
*/
final class ProcessRuntime implements ResourceDetectorInterface
{
public function getResource(): ResourceInfo
{
$attributes = [
ResourceAttributes::PROCESS_RUNTIME_NAME => php_sapi_name(),
ResourceAttributes::PROCESS_RUNTIME_VERSION => PHP_VERSION,
];

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
return ResourceInfo::emptyResource();
}
}
3 changes: 2 additions & 1 deletion src/SDK/Resource/Detectors/Sdk.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
use OpenTelemetry\SemConv\ResourceAttributes;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/README.md#telemetry-sdk
* The SDK MUST provide access to a Resource with at least the attributes listed
* at {@see https://github.com/open-telemetry/semantic-conventions/blob/v1.32.0/docs/resource/README.md#semantic-attributes-with-sdk-provided-default-value}
*/
final class Sdk implements ResourceDetectorInterface
{
Expand Down
10 changes: 2 additions & 8 deletions src/SDK/Resource/Detectors/SdkProvided.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,16 @@

namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

/**
* @see https://github.com/open-telemetry/semantic-conventions/blob/main/docs/resource/README.md#semantic-attributes-with-sdk-provided-default-value
* @deprecated Use Service detector instead.
*/
final class SdkProvided implements ResourceDetectorInterface
{
public function getResource(): ResourceInfo
{
$attributes = [
ResourceAttributes::SERVICE_NAME => 'unknown_service:php',
];

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
return ResourceInfo::emptyResource();
}
}
8 changes: 8 additions & 0 deletions src/SDK/Resource/Detectors/Service.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Configuration\Configuration;
use OpenTelemetry\SDK\Common\Configuration\Variables;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
Expand All @@ -19,10 +21,16 @@ public function getResource(): ResourceInfo
{
static $serviceInstanceId;
$serviceInstanceId ??= Uuid::uuid4()->toString();
$serviceName = Configuration::has(Variables::OTEL_SERVICE_NAME)
? Configuration::getString(Variables::OTEL_SERVICE_NAME)
: null;

$attributes = [
ResourceAttributes::SERVICE_INSTANCE_ID => $serviceInstanceId,
];
if ($serviceName !== null) {
$attributes[ResourceAttributes::SERVICE_NAME] = $serviceName;
}

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
}
Expand Down
44 changes: 19 additions & 25 deletions src/SDK/Resource/ResourceInfoFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use OpenTelemetry\SDK\Common\Configuration\KnownValues as Values;
use OpenTelemetry\SDK\Common\Configuration\Variables as Env;
use OpenTelemetry\SDK\Registry;
use OpenTelemetry\SemConv\ResourceAttributes;
use RuntimeException;

class ResourceInfoFactory
Expand All @@ -27,58 +28,38 @@ public static function defaultResource(): ResourceInfo
// ascending priority: keys from later detectors will overwrite earlier
return (new Detectors\Composite([
new Detectors\Host(),
new Detectors\OperatingSystem(),
new Detectors\Process(),
new Detectors\ProcessRuntime(),
new Detectors\Sdk(),
new Detectors\SdkProvided(),
new Detectors\Composer(),
...Registry::resourceDetectors(),
new Detectors\Environment(),
new Detectors\Sdk(),
new Detectors\Service(),
]))->getResource();
}

$resourceDetectors = [];

foreach ($detectors as $detector) {
switch ($detector) {
case Values::VALUE_DETECTORS_SERVICE:
$resourceDetectors[] = new Detectors\Service();

break;
case Values::VALUE_DETECTORS_ENVIRONMENT:
$resourceDetectors[] = new Detectors\Environment();

break;
case Values::VALUE_DETECTORS_HOST:
$resourceDetectors[] = new Detectors\Host();

break;
case Values::VALUE_DETECTORS_OS:
$resourceDetectors[] = new Detectors\OperatingSystem();

break;
case Values::VALUE_DETECTORS_PROCESS:
$resourceDetectors[] = new Detectors\Process();

break;
case Values::VALUE_DETECTORS_PROCESS_RUNTIME:
$resourceDetectors[] = new Detectors\ProcessRuntime();

break;
case Values::VALUE_DETECTORS_SDK:
$resourceDetectors[] = new Detectors\Sdk();

break;
case Values::VALUE_DETECTORS_SDK_PROVIDED:
$resourceDetectors[] = new Detectors\SdkProvided();

break;

case Values::VALUE_DETECTORS_COMPOSER:
$resourceDetectors[] = new Detectors\Composer();

break;
case Values::VALUE_DETECTORS_SDK_PROVIDED: //deprecated
case Values::VALUE_DETECTORS_OS: //deprecated
case Values::VALUE_DETECTORS_PROCESS_RUNTIME: //deprecated
case Values::VALUE_NONE:

break;
Expand All @@ -90,6 +71,8 @@ public static function defaultResource(): ResourceInfo
}
}
}
$resourceDetectors [] = new Detectors\Sdk();
$resourceDetectors [] = new Detectors\Service();

return (new Detectors\Composite($resourceDetectors))->getResource();
}
Expand All @@ -102,4 +85,15 @@ public static function emptyResource(): ResourceInfo

return self::$emptyResource;
}

public static function mandatoryResource(): ResourceInfo
{
return ResourceInfo::create(
Attributes::create(
[
ResourceAttributes::SERVICE_NAME => 'unknown_service:php',
],
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -695,7 +695,7 @@ resource:
- process.command_args
# Configure resource schema URL.
# If omitted or null, no schema URL is used.
schema_url: https://opentelemetry.io/schemas/1.16.0
schema_url: https://opentelemetry.io/schemas/1.30.0
# Configure instrumentation.
instrumentation:
# Configure general SemConv options that may apply to multiple languages and instrumentations.
Expand Down
Loading
Loading