diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md
index 20e3fbfdab3..b64ffd79a54 100644
--- a/experimental/CHANGELOG.md
+++ b/experimental/CHANGELOG.md
@@ -20,8 +20,9 @@ All notable changes to experimental packages in this project will be documented
### :rocket: (Enhancement)
+* refactor(instrumentation-fetch): move fetch to use SEMATRR [#4632](https://github.com/open-telemetry/opentelemetry-js/pull/4632)
* feat(instrumentation): add util to execute span customization hook in base class [#4663](https://github.com/open-telemetry/opentelemetry-js/pull/4663) @blumamir
-* feat(instrumentation): generic config type in instrumentation base [#4659](https://github.com/open-telemetry/opentelemetry-js/pull/4659) @blumamir
+* feat(instrumentation): generic config type in instrumentation base [#4659](https://github.com/open-telemetry/opentelemetry-js/pull/4659) @blumamirs
* feat: support node 22 [#4666](https://github.com/open-telemetry/opentelemetry-js/pull/4666) @dyladan
* feat(propagator-aws-xray-lambda): add AWS Xray Lambda propagator [4554](https://github.com/open-telemetry/opentelemetry-js/pull/4554)
diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/README.md b/experimental/packages/opentelemetry-instrumentation-fetch/README.md
index b12c0f11632..bc784ce5f1e 100644
--- a/experimental/packages/opentelemetry-instrumentation-fetch/README.md
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/README.md
@@ -72,6 +72,21 @@ Fetch instrumentation plugin has few options available to choose from. You can s
| [`applyCustomAttributesOnSpan`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-fetch/src/fetch.ts#L64) | `HttpCustomAttributeFunction` | Function for adding custom attributes |
| [`ignoreNetworkEvents`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-fetch/src/fetch.ts#L67) | `boolean` | Disable network events being added as span events (network events are added by default) |
+## Semantic Conventions
+
+This package uses `@opentelemetry/semantic-conventions` version `1.22+`, which implements Semantic Convention [Version 1.7.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.7.0/semantic_conventions/README.md)
+
+Attributes collected:
+
+| Attribute | Short Description |
+| ------------------------------------------- | ------------------------------------------------------------------------------ |
+| `HTTP_STATUS_CODE` | HTTP response status cod |
+| `HTTP_HOST` | The value of the HTTP host header |
+| `HTTP_USER_AGENT` | Value of the HTTP User-Agent header sent by the client |
+| `HTTP_SCHEME` | The URI scheme identifying the used protocol |
+| `HTTP_URL` | Full HTTP request URL |
+| `HTTP_METHOD` | HTTP request method |
+
## Useful links
- For more information on OpenTelemetry, visit:
diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/src/fetch.ts b/experimental/packages/opentelemetry-instrumentation-fetch/src/fetch.ts
index d459d3884f4..6c0c6f95c4d 100644
--- a/experimental/packages/opentelemetry-instrumentation-fetch/src/fetch.ts
+++ b/experimental/packages/opentelemetry-instrumentation-fetch/src/fetch.ts
@@ -24,7 +24,14 @@ import {
import * as core from '@opentelemetry/core';
import * as web from '@opentelemetry/sdk-trace-web';
import { AttributeNames } from './enums/AttributeNames';
-import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
+import {
+ SEMATTRS_HTTP_STATUS_CODE,
+ SEMATTRS_HTTP_HOST,
+ SEMATTRS_HTTP_USER_AGENT,
+ SEMATTRS_HTTP_SCHEME,
+ SEMATTRS_HTTP_URL,
+ SEMATTRS_HTTP_METHOD,
+} from '@opentelemetry/semantic-conventions';
import { FetchError, FetchResponse, SpanData } from './types';
import { VERSION } from './version';
import { _globalThis } from '@opentelemetry/core';
@@ -119,20 +126,17 @@ export class FetchInstrumentation extends InstrumentationBase {
assert.strictEqual(
attributes[keys[1]],
'GET',
- `attributes ${SemanticAttributes.HTTP_METHOD} is wrong`
+ `attributes ${SEMATTRS_HTTP_METHOD} is wrong`
);
assert.strictEqual(
attributes[keys[2]],
url,
- `attributes ${SemanticAttributes.HTTP_URL} is wrong`
+ `attributes ${SEMATTRS_HTTP_URL} is wrong`
);
assert.strictEqual(
attributes[keys[3]],
200,
- `attributes ${SemanticAttributes.HTTP_STATUS_CODE} is wrong`
+ `attributes ${SEMATTRS_HTTP_STATUS_CODE} is wrong`
);
assert.ok(
attributes[keys[4]] === 'OK' || attributes[keys[4]] === '',
@@ -392,19 +400,19 @@ describe('fetch', () => {
);
assert.ok(
(attributes[keys[5]] as string).indexOf('localhost') === 0,
- `attributes ${SemanticAttributes.HTTP_HOST} is wrong`
+ `attributes ${SEMATTRS_HTTP_HOST} is wrong`
);
assert.ok(
attributes[keys[6]] === 'http' || attributes[keys[6]] === 'https',
- `attributes ${SemanticAttributes.HTTP_SCHEME} is wrong`
+ `attributes ${SEMATTRS_HTTP_SCHEME} is wrong`
);
assert.ok(
attributes[keys[7]] !== '',
- `attributes ${SemanticAttributes.HTTP_USER_AGENT} is not defined`
+ `attributes ${SEMATTRS_HTTP_USER_AGENT} is not defined`
);
assert.ok(
(attributes[keys[8]] as number) > 0,
- `attributes ${SemanticAttributes.HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
+ `attributes ${SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH} is <= 0`
);
assert.strictEqual(keys.length, 9, 'number of attributes is wrong');
@@ -865,9 +873,9 @@ describe('fetch', () => {
const attributes = span.attributes;
assert.strictEqual(
- attributes[SemanticAttributes.HTTP_URL],
+ attributes[SEMATTRS_HTTP_URL],
location.origin + '/get',
- `attributes ${SemanticAttributes.HTTP_URL} is wrong`
+ `attributes ${SEMATTRS_HTTP_URL} is wrong`
);
});
});
@@ -934,7 +942,7 @@ describe('fetch', () => {
assert.strictEqual(
attributes[keys[3]],
200,
- `Missing basic attribute ${SemanticAttributes.HTTP_STATUS_CODE}`
+ `Missing basic attribute ${SEMATTRS_HTTP_STATUS_CODE}`
);
});
});