mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-12 01:49:05 +08:00
feat: onboarding flow updates and new flow addition (#4222)
* feat: onboarding flow updates and new flow addition * feat: added reactjs files * feat: added content for reactjs and others * chore: implemented feedback --------- Co-authored-by: Vishal Sharma <makeavish786@gmail.com> Co-authored-by: Yunus M <myounis.ar@live.com>
This commit is contained in:
parent
16b846006a
commit
f2521b4c49
@ -0,0 +1,24 @@
|
||||
## Install otel-collector in your Kubernetes infra
|
||||
|
||||
|
||||
Add the SigNoz Helm Chart repository
|
||||
```bash
|
||||
helm repo add signoz https://charts.signoz.io
|
||||
```
|
||||
|
||||
|
||||
If the chart is already present, update the chart to the latest using:
|
||||
```bash
|
||||
helm repo update
|
||||
```
|
||||
|
||||
|
||||
Install the Kubernetes Infrastructure chart provided by SigNoz
|
||||
```bash
|
||||
helm install my-release signoz/k8s-infra \
|
||||
--set otelCollectorEndpoint=ingest.{{REGION}}.signoz.cloud:443 \
|
||||
--set otelInsecure=false \
|
||||
--set signozApiKey={{SIGNOZ_INGESTION_KEY}} \
|
||||
--set global.clusterName=<CLUSTER_NAME>
|
||||
```
|
||||
- Replace `<CLUSTER_NAME>` with the name of the Kubernetes cluster or a unique identifier of the cluster.
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,71 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'https://ingest.{{REGION}}.signoz.cloud:443/v1/traces',
|
||||
headers: {
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}",
|
||||
},
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,96 @@
|
||||
## Setup OpenTelemetry Binary as an agent
|
||||
|
||||
|
||||
### Step 1: Download otel-collector tar.gz
|
||||
```bash
|
||||
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.79.0/otelcol-contrib_0.79.0_linux_amd64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Extract otel-collector tar.gz to the `otelcol-contrib` folder
|
||||
```bash
|
||||
mkdir otelcol-contrib && tar xvzf otelcol-contrib_0.79.0_linux_amd64.tar.gz -C otelcol-contrib
|
||||
```
|
||||
|
||||
|
||||
### Step 3: Create config.yaml in folder otelcol-contrib with the below content in it
|
||||
```bash
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
endpoint: 0.0.0.0:4317
|
||||
http:
|
||||
endpoint: 0.0.0.0:4318
|
||||
hostmetrics:
|
||||
collection_interval: 60s
|
||||
scrapers:
|
||||
cpu: {}
|
||||
disk: {}
|
||||
load: {}
|
||||
filesystem: {}
|
||||
memory: {}
|
||||
network: {}
|
||||
paging: {}
|
||||
process:
|
||||
mute_process_name_error: true
|
||||
mute_process_exe_error: true
|
||||
mute_process_io_error: true
|
||||
processes: {}
|
||||
prometheus:
|
||||
config:
|
||||
global:
|
||||
scrape_interval: 60s
|
||||
scrape_configs:
|
||||
- job_name: otel-collector-binary
|
||||
static_configs:
|
||||
- targets:
|
||||
# - localhost:8888
|
||||
processors:
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
# Ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md
|
||||
resourcedetection:
|
||||
detectors: [env, system] # Before system detector, include ec2 for AWS, gcp for GCP and azure for Azure.
|
||||
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
|
||||
timeout: 2s
|
||||
system:
|
||||
hostname_sources: [os] # alternatively, use [dns,os] for setting FQDN as host.name and os as fallback
|
||||
extensions:
|
||||
health_check: {}
|
||||
zpages: {}
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: "ingest.{{REGION}}.signoz.cloud:443"
|
||||
tls:
|
||||
insecure: false
|
||||
headers:
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}"
|
||||
logging:
|
||||
verbosity: normal
|
||||
service:
|
||||
telemetry:
|
||||
metrics:
|
||||
address: 0.0.0.0:8888
|
||||
extensions: [health_check, zpages]
|
||||
pipelines:
|
||||
metrics:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
metrics/internal:
|
||||
receivers: [prometheus, hostmetrics]
|
||||
processors: [resourcedetection, batch]
|
||||
exporters: [otlp]
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
logs:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
```
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
Once you are done intrumenting your JavaScript application, you can run it using the below commands
|
||||
|
||||
|
||||
### Step 1: Run OTel Collector
|
||||
Run this command inside the `otelcol-contrib` directory that you created in the install Otel Collector step
|
||||
|
||||
```bash
|
||||
./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid
|
||||
```
|
||||
|
||||
|
||||
#### (Optional Step): View last 50 lines of `otelcol` logs
|
||||
```bash
|
||||
tail -f -n 50 otelcol-output.log
|
||||
```
|
||||
|
||||
#### (Optional Step): Stop `otelcol`
|
||||
```bash
|
||||
kill "$(< otel-pid)"
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Run your application
|
||||
Run your JavaScript application as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,71 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'https://ingest.{{REGION}}.signoz.cloud:443/v1/traces',
|
||||
headers: {
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}",
|
||||
},
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,96 @@
|
||||
## Setup OpenTelemetry Binary as an agent
|
||||
|
||||
|
||||
### Step 1: Download otel-collector tar.gz
|
||||
```bash
|
||||
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.79.0/otelcol-contrib_0.79.0_linux_arm64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Extract otel-collector tar.gz to the `otelcol-contrib` folder
|
||||
```bash
|
||||
mkdir otelcol-contrib && tar xvzf otelcol-contrib_0.79.0_linux_arm64.tar.gz -C otelcol-contrib
|
||||
```
|
||||
|
||||
|
||||
### Step 3: Create config.yaml in folder otelcol-contrib with the below content in it
|
||||
```bash
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
endpoint: 0.0.0.0:4317
|
||||
http:
|
||||
endpoint: 0.0.0.0:4318
|
||||
hostmetrics:
|
||||
collection_interval: 60s
|
||||
scrapers:
|
||||
cpu: {}
|
||||
disk: {}
|
||||
load: {}
|
||||
filesystem: {}
|
||||
memory: {}
|
||||
network: {}
|
||||
paging: {}
|
||||
process:
|
||||
mute_process_name_error: true
|
||||
mute_process_exe_error: true
|
||||
mute_process_io_error: true
|
||||
processes: {}
|
||||
prometheus:
|
||||
config:
|
||||
global:
|
||||
scrape_interval: 60s
|
||||
scrape_configs:
|
||||
- job_name: otel-collector-binary
|
||||
static_configs:
|
||||
- targets:
|
||||
# - localhost:8888
|
||||
processors:
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
# Ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md
|
||||
resourcedetection:
|
||||
detectors: [env, system] # Before system detector, include ec2 for AWS, gcp for GCP and azure for Azure.
|
||||
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
|
||||
timeout: 2s
|
||||
system:
|
||||
hostname_sources: [os] # alternatively, use [dns,os] for setting FQDN as host.name and os as fallback
|
||||
extensions:
|
||||
health_check: {}
|
||||
zpages: {}
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: "ingest.{{REGION}}.signoz.cloud:443"
|
||||
tls:
|
||||
insecure: false
|
||||
headers:
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}"
|
||||
logging:
|
||||
verbosity: normal
|
||||
service:
|
||||
telemetry:
|
||||
metrics:
|
||||
address: 0.0.0.0:8888
|
||||
extensions: [health_check, zpages]
|
||||
pipelines:
|
||||
metrics:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
metrics/internal:
|
||||
receivers: [prometheus, hostmetrics]
|
||||
processors: [resourcedetection, batch]
|
||||
exporters: [otlp]
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
logs:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
```
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
Once you are done intrumenting your JavaScript application, you can run it using the below commands
|
||||
|
||||
|
||||
### Step 1: Run OTel Collector
|
||||
Run this command inside the `otelcol-contrib` directory that you created in the install Otel Collector step
|
||||
|
||||
```bash
|
||||
./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid
|
||||
```
|
||||
|
||||
|
||||
#### (Optional Step): View last 50 lines of `otelcol` logs
|
||||
```bash
|
||||
tail -f -n 50 otelcol-output.log
|
||||
```
|
||||
|
||||
#### (Optional Step): Stop `otelcol`
|
||||
```bash
|
||||
kill "$(< otel-pid)"
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Run your application
|
||||
Run your JavaScript application as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,71 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'https://ingest.{{REGION}}.signoz.cloud:443/v1/traces',
|
||||
headers: {
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}",
|
||||
},
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,96 @@
|
||||
### Setup OpenTelemetry Binary as an agent
|
||||
|
||||
|
||||
### Step 1: Download otel-collector tar.gz
|
||||
```bash
|
||||
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.79.0/otelcol-contrib_0.79.0_darwin_amd64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Extract otel-collector tar.gz to the `otelcol-contrib` folder
|
||||
```bash
|
||||
mkdir otelcol-contrib && tar xvzf otelcol-contrib_0.79.0_darwin_amd64.tar.gz -C otelcol-contrib
|
||||
```
|
||||
|
||||
|
||||
### Step 3: Create config.yaml in folder otelcol-contrib with the below content in it
|
||||
```bash
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
endpoint: 0.0.0.0:4317
|
||||
http:
|
||||
endpoint: 0.0.0.0:4318
|
||||
hostmetrics:
|
||||
collection_interval: 60s
|
||||
scrapers:
|
||||
cpu: {}
|
||||
disk: {}
|
||||
load: {}
|
||||
filesystem: {}
|
||||
memory: {}
|
||||
network: {}
|
||||
paging: {}
|
||||
process:
|
||||
mute_process_name_error: true
|
||||
mute_process_exe_error: true
|
||||
mute_process_io_error: true
|
||||
processes: {}
|
||||
prometheus:
|
||||
config:
|
||||
global:
|
||||
scrape_interval: 60s
|
||||
scrape_configs:
|
||||
- job_name: otel-collector-binary
|
||||
static_configs:
|
||||
- targets:
|
||||
# - localhost:8888
|
||||
processors:
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
# Ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md
|
||||
resourcedetection:
|
||||
detectors: [env, system] # Before system detector, include ec2 for AWS, gcp for GCP and azure for Azure.
|
||||
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
|
||||
timeout: 2s
|
||||
system:
|
||||
hostname_sources: [os] # alternatively, use [dns,os] for setting FQDN as host.name and os as fallback
|
||||
extensions:
|
||||
health_check: {}
|
||||
zpages: {}
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: "ingest.{{REGION}}.signoz.cloud:443"
|
||||
tls:
|
||||
insecure: false
|
||||
headers:
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}"
|
||||
logging:
|
||||
verbosity: normal
|
||||
service:
|
||||
telemetry:
|
||||
metrics:
|
||||
address: 0.0.0.0:8888
|
||||
extensions: [health_check, zpages]
|
||||
pipelines:
|
||||
metrics:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
metrics/internal:
|
||||
receivers: [prometheus, hostmetrics]
|
||||
processors: [resourcedetection, batch]
|
||||
exporters: [otlp]
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
logs:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
```
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
Once you are done intrumenting your JavaScript application, you can run it using the below commands
|
||||
|
||||
|
||||
### Step 1: Run OTel Collector
|
||||
Run this command inside the `otelcol-contrib` directory that you created in the install Otel Collector step
|
||||
|
||||
```bash
|
||||
./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid
|
||||
```
|
||||
|
||||
|
||||
#### (Optional Step): View last 50 lines of `otelcol` logs
|
||||
```bash
|
||||
tail -f -n 50 otelcol-output.log
|
||||
```
|
||||
|
||||
#### (Optional Step): Stop `otelcol`
|
||||
```bash
|
||||
kill "$(< otel-pid)"
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Run your application
|
||||
Run your JavaScript application as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,71 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'https://ingest.{{REGION}}.signoz.cloud:443/v1/traces',
|
||||
headers: {
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}",
|
||||
},
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,96 @@
|
||||
## Setup OpenTelemetry Binary as an agent
|
||||
|
||||
|
||||
### Step 1: Download otel-collector tar.gz
|
||||
```bash
|
||||
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.79.0/otelcol-contrib_0.79.0_darwin_arm64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Extract otel-collector tar.gz to the `otelcol-contrib` folder
|
||||
```bash
|
||||
mkdir otelcol-contrib && tar xvzf otelcol-contrib_0.79.0_darwin_arm64.tar.gz -C otelcol-contrib
|
||||
```
|
||||
|
||||
|
||||
### Step 3: Create config.yaml in folder otelcol-contrib with the below content in it
|
||||
```bash
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
endpoint: 0.0.0.0:4317
|
||||
http:
|
||||
endpoint: 0.0.0.0:4318
|
||||
hostmetrics:
|
||||
collection_interval: 60s
|
||||
scrapers:
|
||||
cpu: {}
|
||||
disk: {}
|
||||
load: {}
|
||||
filesystem: {}
|
||||
memory: {}
|
||||
network: {}
|
||||
paging: {}
|
||||
process:
|
||||
mute_process_name_error: true
|
||||
mute_process_exe_error: true
|
||||
mute_process_io_error: true
|
||||
processes: {}
|
||||
prometheus:
|
||||
config:
|
||||
global:
|
||||
scrape_interval: 60s
|
||||
scrape_configs:
|
||||
- job_name: otel-collector-binary
|
||||
static_configs:
|
||||
- targets:
|
||||
# - localhost:8888
|
||||
processors:
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
# Ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md
|
||||
resourcedetection:
|
||||
detectors: [env, system] # Before system detector, include ec2 for AWS, gcp for GCP and azure for Azure.
|
||||
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
|
||||
timeout: 2s
|
||||
system:
|
||||
hostname_sources: [os] # alternatively, use [dns,os] for setting FQDN as host.name and os as fallback
|
||||
extensions:
|
||||
health_check: {}
|
||||
zpages: {}
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: "ingest.{{REGION}}.signoz.cloud:443"
|
||||
tls:
|
||||
insecure: false
|
||||
headers:
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}"
|
||||
logging:
|
||||
verbosity: normal
|
||||
service:
|
||||
telemetry:
|
||||
metrics:
|
||||
address: 0.0.0.0:8888
|
||||
extensions: [health_check, zpages]
|
||||
pipelines:
|
||||
metrics:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
metrics/internal:
|
||||
receivers: [prometheus, hostmetrics]
|
||||
processors: [resourcedetection, batch]
|
||||
exporters: [otlp]
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
logs:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
```
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
Once you are done intrumenting your JavaScript application, you can run it using the below commands
|
||||
|
||||
|
||||
### Step 1: Run OTel Collector
|
||||
Run this command inside the `otelcol-contrib` directory that you created in the install Otel Collector step
|
||||
|
||||
```bash
|
||||
./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid
|
||||
```
|
||||
|
||||
|
||||
#### (Optional Step): View last 50 lines of `otelcol` logs
|
||||
```bash
|
||||
tail -f -n 50 otelcol-output.log
|
||||
```
|
||||
|
||||
#### (Optional Step): Stop `otelcol`
|
||||
```bash
|
||||
kill "$(< otel-pid)"
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Run your application
|
||||
Run your JavaScript application as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,24 @@
|
||||
## Install otel-collector in your Kubernetes infra
|
||||
|
||||
|
||||
Add the SigNoz Helm Chart repository
|
||||
```bash
|
||||
helm repo add signoz https://charts.signoz.io
|
||||
```
|
||||
|
||||
|
||||
If the chart is already present, update the chart to the latest using:
|
||||
```bash
|
||||
helm repo update
|
||||
```
|
||||
|
||||
|
||||
Install the Kubernetes Infrastructure chart provided by SigNoz
|
||||
```bash
|
||||
helm install my-release signoz/k8s-infra \
|
||||
--set otelCollectorEndpoint=ingest.{{REGION}}.signoz.cloud:443 \
|
||||
--set otelInsecure=false \
|
||||
--set signozApiKey={{SIGNOZ_INGESTION_KEY}} \
|
||||
--set global.clusterName=<CLUSTER_NAME>
|
||||
```
|
||||
- Replace `<CLUSTER_NAME>` with the name of the Kubernetes cluster or a unique identifier of the cluster.
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,71 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'https://ingest.{{REGION}}.signoz.cloud:443/v1/traces',
|
||||
headers: {
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}",
|
||||
},
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,96 @@
|
||||
## Setup OpenTelemetry Binary as an agent
|
||||
|
||||
|
||||
### Step 1: Download otel-collector tar.gz
|
||||
```bash
|
||||
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.79.0/otelcol-contrib_0.79.0_linux_amd64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Extract otel-collector tar.gz to the `otelcol-contrib` folder
|
||||
```bash
|
||||
mkdir otelcol-contrib && tar xvzf otelcol-contrib_0.79.0_linux_amd64.tar.gz -C otelcol-contrib
|
||||
```
|
||||
|
||||
|
||||
### Step 3: Create config.yaml in folder otelcol-contrib with the below content in it
|
||||
```bash
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
endpoint: 0.0.0.0:4317
|
||||
http:
|
||||
endpoint: 0.0.0.0:4318
|
||||
hostmetrics:
|
||||
collection_interval: 60s
|
||||
scrapers:
|
||||
cpu: {}
|
||||
disk: {}
|
||||
load: {}
|
||||
filesystem: {}
|
||||
memory: {}
|
||||
network: {}
|
||||
paging: {}
|
||||
process:
|
||||
mute_process_name_error: true
|
||||
mute_process_exe_error: true
|
||||
mute_process_io_error: true
|
||||
processes: {}
|
||||
prometheus:
|
||||
config:
|
||||
global:
|
||||
scrape_interval: 60s
|
||||
scrape_configs:
|
||||
- job_name: otel-collector-binary
|
||||
static_configs:
|
||||
- targets:
|
||||
# - localhost:8888
|
||||
processors:
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
# Ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md
|
||||
resourcedetection:
|
||||
detectors: [env, system] # Before system detector, include ec2 for AWS, gcp for GCP and azure for Azure.
|
||||
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
|
||||
timeout: 2s
|
||||
system:
|
||||
hostname_sources: [os] # alternatively, use [dns,os] for setting FQDN as host.name and os as fallback
|
||||
extensions:
|
||||
health_check: {}
|
||||
zpages: {}
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: "ingest.{{REGION}}.signoz.cloud:443"
|
||||
tls:
|
||||
insecure: false
|
||||
headers:
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}"
|
||||
logging:
|
||||
verbosity: normal
|
||||
service:
|
||||
telemetry:
|
||||
metrics:
|
||||
address: 0.0.0.0:8888
|
||||
extensions: [health_check, zpages]
|
||||
pipelines:
|
||||
metrics:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
metrics/internal:
|
||||
receivers: [prometheus, hostmetrics]
|
||||
processors: [resourcedetection, batch]
|
||||
exporters: [otlp]
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
logs:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
```
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
Once you are done intrumenting your JavaScript application, you can run it using the below commands
|
||||
|
||||
|
||||
### Step 1: Run OTel Collector
|
||||
Run this command inside the `otelcol-contrib` directory that you created in the install Otel Collector step
|
||||
|
||||
```bash
|
||||
./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid
|
||||
```
|
||||
|
||||
|
||||
#### (Optional Step): View last 50 lines of `otelcol` logs
|
||||
```bash
|
||||
tail -f -n 50 otelcol-output.log
|
||||
```
|
||||
|
||||
#### (Optional Step): Stop `otelcol`
|
||||
```bash
|
||||
kill "$(< otel-pid)"
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Run your application
|
||||
Run your JavaScript application as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,71 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'https://ingest.{{REGION}}.signoz.cloud:443/v1/traces',
|
||||
headers: {
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}",
|
||||
},
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,96 @@
|
||||
## Setup OpenTelemetry Binary as an agent
|
||||
|
||||
|
||||
### Step 1: Download otel-collector tar.gz
|
||||
```bash
|
||||
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.79.0/otelcol-contrib_0.79.0_linux_arm64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Extract otel-collector tar.gz to the `otelcol-contrib` folder
|
||||
```bash
|
||||
mkdir otelcol-contrib && tar xvzf otelcol-contrib_0.79.0_linux_arm64.tar.gz -C otelcol-contrib
|
||||
```
|
||||
|
||||
|
||||
### Step 3: Create config.yaml in folder otelcol-contrib with the below content in it
|
||||
```bash
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
endpoint: 0.0.0.0:4317
|
||||
http:
|
||||
endpoint: 0.0.0.0:4318
|
||||
hostmetrics:
|
||||
collection_interval: 60s
|
||||
scrapers:
|
||||
cpu: {}
|
||||
disk: {}
|
||||
load: {}
|
||||
filesystem: {}
|
||||
memory: {}
|
||||
network: {}
|
||||
paging: {}
|
||||
process:
|
||||
mute_process_name_error: true
|
||||
mute_process_exe_error: true
|
||||
mute_process_io_error: true
|
||||
processes: {}
|
||||
prometheus:
|
||||
config:
|
||||
global:
|
||||
scrape_interval: 60s
|
||||
scrape_configs:
|
||||
- job_name: otel-collector-binary
|
||||
static_configs:
|
||||
- targets:
|
||||
# - localhost:8888
|
||||
processors:
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
# Ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md
|
||||
resourcedetection:
|
||||
detectors: [env, system] # Before system detector, include ec2 for AWS, gcp for GCP and azure for Azure.
|
||||
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
|
||||
timeout: 2s
|
||||
system:
|
||||
hostname_sources: [os] # alternatively, use [dns,os] for setting FQDN as host.name and os as fallback
|
||||
extensions:
|
||||
health_check: {}
|
||||
zpages: {}
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: "ingest.{{REGION}}.signoz.cloud:443"
|
||||
tls:
|
||||
insecure: false
|
||||
headers:
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}"
|
||||
logging:
|
||||
verbosity: normal
|
||||
service:
|
||||
telemetry:
|
||||
metrics:
|
||||
address: 0.0.0.0:8888
|
||||
extensions: [health_check, zpages]
|
||||
pipelines:
|
||||
metrics:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
metrics/internal:
|
||||
receivers: [prometheus, hostmetrics]
|
||||
processors: [resourcedetection, batch]
|
||||
exporters: [otlp]
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
logs:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
```
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
Once you are done intrumenting your JavaScript application, you can run it using the below commands
|
||||
|
||||
|
||||
### Step 1: Run OTel Collector
|
||||
Run this command inside the `otelcol-contrib` directory that you created in the install Otel Collector step
|
||||
|
||||
```bash
|
||||
./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid
|
||||
```
|
||||
|
||||
|
||||
#### (Optional Step): View last 50 lines of `otelcol` logs
|
||||
```bash
|
||||
tail -f -n 50 otelcol-output.log
|
||||
```
|
||||
|
||||
#### (Optional Step): Stop `otelcol`
|
||||
```bash
|
||||
kill "$(< otel-pid)"
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Run your application
|
||||
Run your JavaScript application as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,71 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'https://ingest.{{REGION}}.signoz.cloud:443/v1/traces',
|
||||
headers: {
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}",
|
||||
},
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,96 @@
|
||||
### Setup OpenTelemetry Binary as an agent
|
||||
|
||||
|
||||
### Step 1: Download otel-collector tar.gz
|
||||
```bash
|
||||
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.79.0/otelcol-contrib_0.79.0_darwin_amd64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Extract otel-collector tar.gz to the `otelcol-contrib` folder
|
||||
```bash
|
||||
mkdir otelcol-contrib && tar xvzf otelcol-contrib_0.79.0_darwin_amd64.tar.gz -C otelcol-contrib
|
||||
```
|
||||
|
||||
|
||||
### Step 3: Create config.yaml in folder otelcol-contrib with the below content in it
|
||||
```bash
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
endpoint: 0.0.0.0:4317
|
||||
http:
|
||||
endpoint: 0.0.0.0:4318
|
||||
hostmetrics:
|
||||
collection_interval: 60s
|
||||
scrapers:
|
||||
cpu: {}
|
||||
disk: {}
|
||||
load: {}
|
||||
filesystem: {}
|
||||
memory: {}
|
||||
network: {}
|
||||
paging: {}
|
||||
process:
|
||||
mute_process_name_error: true
|
||||
mute_process_exe_error: true
|
||||
mute_process_io_error: true
|
||||
processes: {}
|
||||
prometheus:
|
||||
config:
|
||||
global:
|
||||
scrape_interval: 60s
|
||||
scrape_configs:
|
||||
- job_name: otel-collector-binary
|
||||
static_configs:
|
||||
- targets:
|
||||
# - localhost:8888
|
||||
processors:
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
# Ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md
|
||||
resourcedetection:
|
||||
detectors: [env, system] # Before system detector, include ec2 for AWS, gcp for GCP and azure for Azure.
|
||||
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
|
||||
timeout: 2s
|
||||
system:
|
||||
hostname_sources: [os] # alternatively, use [dns,os] for setting FQDN as host.name and os as fallback
|
||||
extensions:
|
||||
health_check: {}
|
||||
zpages: {}
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: "ingest.{{REGION}}.signoz.cloud:443"
|
||||
tls:
|
||||
insecure: false
|
||||
headers:
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}"
|
||||
logging:
|
||||
verbosity: normal
|
||||
service:
|
||||
telemetry:
|
||||
metrics:
|
||||
address: 0.0.0.0:8888
|
||||
extensions: [health_check, zpages]
|
||||
pipelines:
|
||||
metrics:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
metrics/internal:
|
||||
receivers: [prometheus, hostmetrics]
|
||||
processors: [resourcedetection, batch]
|
||||
exporters: [otlp]
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
logs:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
```
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
Once you are done intrumenting your JavaScript application, you can run it using the below commands
|
||||
|
||||
|
||||
### Step 1: Run OTel Collector
|
||||
Run this command inside the `otelcol-contrib` directory that you created in the install Otel Collector step
|
||||
|
||||
```bash
|
||||
./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid
|
||||
```
|
||||
|
||||
|
||||
#### (Optional Step): View last 50 lines of `otelcol` logs
|
||||
```bash
|
||||
tail -f -n 50 otelcol-output.log
|
||||
```
|
||||
|
||||
#### (Optional Step): Stop `otelcol`
|
||||
```bash
|
||||
kill "$(< otel-pid)"
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Run your application
|
||||
Run your JavaScript application as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,71 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'https://ingest.{{REGION}}.signoz.cloud:443/v1/traces',
|
||||
headers: {
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}",
|
||||
},
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,18 @@
|
||||
Once you are done intrumenting your JavaScript application, you can run it as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -0,0 +1,96 @@
|
||||
## Setup OpenTelemetry Binary as an agent
|
||||
|
||||
|
||||
### Step 1: Download otel-collector tar.gz
|
||||
```bash
|
||||
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.79.0/otelcol-contrib_0.79.0_darwin_arm64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Extract otel-collector tar.gz to the `otelcol-contrib` folder
|
||||
```bash
|
||||
mkdir otelcol-contrib && tar xvzf otelcol-contrib_0.79.0_darwin_arm64.tar.gz -C otelcol-contrib
|
||||
```
|
||||
|
||||
|
||||
### Step 3: Create config.yaml in folder otelcol-contrib with the below content in it
|
||||
```bash
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
endpoint: 0.0.0.0:4317
|
||||
http:
|
||||
endpoint: 0.0.0.0:4318
|
||||
hostmetrics:
|
||||
collection_interval: 60s
|
||||
scrapers:
|
||||
cpu: {}
|
||||
disk: {}
|
||||
load: {}
|
||||
filesystem: {}
|
||||
memory: {}
|
||||
network: {}
|
||||
paging: {}
|
||||
process:
|
||||
mute_process_name_error: true
|
||||
mute_process_exe_error: true
|
||||
mute_process_io_error: true
|
||||
processes: {}
|
||||
prometheus:
|
||||
config:
|
||||
global:
|
||||
scrape_interval: 60s
|
||||
scrape_configs:
|
||||
- job_name: otel-collector-binary
|
||||
static_configs:
|
||||
- targets:
|
||||
# - localhost:8888
|
||||
processors:
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
# Ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md
|
||||
resourcedetection:
|
||||
detectors: [env, system] # Before system detector, include ec2 for AWS, gcp for GCP and azure for Azure.
|
||||
# Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
|
||||
timeout: 2s
|
||||
system:
|
||||
hostname_sources: [os] # alternatively, use [dns,os] for setting FQDN as host.name and os as fallback
|
||||
extensions:
|
||||
health_check: {}
|
||||
zpages: {}
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: "ingest.{{REGION}}.signoz.cloud:443"
|
||||
tls:
|
||||
insecure: false
|
||||
headers:
|
||||
"signoz-access-token": "{{SIGNOZ_INGESTION_KEY}}"
|
||||
logging:
|
||||
verbosity: normal
|
||||
service:
|
||||
telemetry:
|
||||
metrics:
|
||||
address: 0.0.0.0:8888
|
||||
extensions: [health_check, zpages]
|
||||
pipelines:
|
||||
metrics:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
metrics/internal:
|
||||
receivers: [prometheus, hostmetrics]
|
||||
processors: [resourcedetection, batch]
|
||||
exporters: [otlp]
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
logs:
|
||||
receivers: [otlp]
|
||||
processors: [batch]
|
||||
exporters: [otlp]
|
||||
```
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
### Step 1: Install OpenTelemetry packages
|
||||
|
||||
```bash
|
||||
npm install --save @opentelemetry/context-zone
|
||||
npm install --save @opentelemetry/instrumentation
|
||||
npm install --save @opentelemetry/auto-instrumentations-web
|
||||
npm install --save @opentelemetry/sdk-trace-base
|
||||
npm install --save @opentelemetry/sdk-trace-web
|
||||
npm install --save @opentelemetry/resources
|
||||
npm install --save @opentelemetry/semantic-conventions
|
||||
npm install --save @opentelemetry/exporter-trace-otlp-http
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Create tracing.js file
|
||||
|
||||
```javascript
|
||||
// tracing.js
|
||||
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
||||
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
|
||||
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
||||
import { Resource } from '@opentelemetry/resources';
|
||||
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
||||
|
||||
const provider = new WebTracerProvider({
|
||||
resource: new Resource({
|
||||
[SemanticResourceAttributes.SERVICE_NAME]: '{{MYAPP}}',
|
||||
}),
|
||||
});
|
||||
const exporter = new OTLPTraceExporter({
|
||||
url: 'http://localhost:4318/v1/traces',
|
||||
});
|
||||
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
|
||||
|
||||
provider.register({
|
||||
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations so that traces are not broken
|
||||
contextManager: new ZoneContextManager(),
|
||||
});
|
||||
|
||||
// Registering instrumentations
|
||||
registerInstrumentations({
|
||||
instrumentations: [
|
||||
getWebAutoInstrumentations({
|
||||
|
||||
'@opentelemetry/instrumentation-xml-http-request': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
'@opentelemetry/instrumentation-fetch': {
|
||||
propagateTraceHeaderCorsUrls: [
|
||||
/.+/g, //Regex to match your backend urls.
|
||||
],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
### Step 3: Import tracer in main file
|
||||
|
||||
**Important Note**: The below import should be the first line in the main file of your application (Ex -> `index.js`)
|
||||
```bash
|
||||
import './tracing.js'
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
Once you are done intrumenting your JavaScript application, you can run it using the below commands
|
||||
|
||||
|
||||
### Step 1: Run OTel Collector
|
||||
Run this command inside the `otelcol-contrib` directory that you created in the install Otel Collector step
|
||||
|
||||
```bash
|
||||
./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid
|
||||
```
|
||||
|
||||
|
||||
#### (Optional Step): View last 50 lines of `otelcol` logs
|
||||
```bash
|
||||
tail -f -n 50 otelcol-output.log
|
||||
```
|
||||
|
||||
#### (Optional Step): Stop `otelcol`
|
||||
```bash
|
||||
kill "$(< otel-pid)"
|
||||
```
|
||||
|
||||
|
||||
### Step 2: Run your application
|
||||
Run your JavaScript application as you normally would.
|
||||
|
||||
For example:
|
||||
|
||||
If you're using `npm`
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
|
||||
If you're using `yarn`
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
|
||||
|
||||
|
||||
To view more detailed documentation, checkout this [link](https://signoz.io/docs/instrumentation/javascript/)
|
@ -306,8 +306,72 @@ import APM_javascript_nodejs_macOsARM64_quickStart_runApplication from '../Modul
|
||||
import APM_javascript_nodejs_macOsARM64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/NodeJS/MacOsARM64/Recommended/nodejs-macosarm64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_nodejs_macOsARM64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/NodeJS/MacOsARM64/Recommended/nodejs-macosarm64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_nodejs_macOsARM64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/NodeJS/MacOsARM64/Recommended/nodejs-macosarm64-recommended-runApplication.md';
|
||||
/// // JavaScript Others
|
||||
import APM_javascript_others_kubernetes_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/Others/Kubernetes/others-kubernetes-installOtelCollector.md';
|
||||
import APM_javascript_others_kubernetes_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/Kubernetes/others-kubernetes-instrumentApplication.md';
|
||||
import APM_javascript_others_kubernetes_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/Others/Kubernetes/others-kubernetes-runApplication.md';
|
||||
// Others-JavaScript-LinuxAMD64-quickstart
|
||||
import APM_javascript_others_linuxAMD64_quickStart_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/LinuxAMD64/QuickStart/others-linuxamd64-quickStart-instrumentApplication.md';
|
||||
import APM_javascript_others_linuxAMD64_quickStart_runApplication from '../Modules/APM/Javascript/md-docs/Others/LinuxAMD64/QuickStart/others-linuxamd64-quickStart-runApplication.md';
|
||||
// // Others-JavaScript-LinuxAMD64-recommended
|
||||
import APM_javascript_others_linuxAMD64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/Others/LinuxAMD64/Recommended/others-linuxamd64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_others_linuxAMD64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/LinuxAMD64/Recommended/others-linuxamd64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_others_linuxAMD64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/Others/LinuxAMD64/Recommended/others-linuxamd64-recommended-runApplication.md';
|
||||
// Others-JavaScript-LinuxARM64-quiOthers
|
||||
import APM_javascript_others_linuxARM64_quickStart_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/LinuxARM64/QuickStart/others-linuxarm64-quickStart-instrumentApplication.md';
|
||||
import APM_javascript_others_linuxARM64_quickStart_runApplication from '../Modules/APM/Javascript/md-docs/Others/LinuxARM64/QuickStart/others-linuxarm64-quickStart-runApplication.md';
|
||||
// Others-JavaScript-LinuxARM64-recommended
|
||||
import APM_javascript_others_linuxARM64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/Others/LinuxARM64/Recommended/others-linuxarm64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_others_linuxARM64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/LinuxARM64/Recommended/others-linuxarm64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_others_linuxARM64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/Others/LinuxARM64/Recommended/others-linuxarm64-recommended-runApplication.md';
|
||||
// Others-JavaScript-MacOsAMD64-quickstart
|
||||
import APM_javascript_others_macOsAMD64_quickStart_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/MacOsAMD64/QuickStart/others-macosamd64-quickStart-instrumentApplication.md';
|
||||
import APM_javascript_others_macOsAMD64_quickStart_runApplication from '../Modules/APM/Javascript/md-docs/Others/MacOsAMD64/QuickStart/others-macosamd64-quickStart-runApplication.md';
|
||||
// Others-JavaScript-MacOsAMD64-recommended
|
||||
import APM_javascript_others_macOsAMD64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/Others/MacOsAMD64/Recommended/others-macosamd64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_others_macOsAMD64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/MacOsAMD64/Recommended/others-macosamd64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_others_macOsAMD64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/Others/MacOsAMD64/Recommended/others-macosamd64-recommended-runApplication.md';
|
||||
// Others-JavaScript-MacOsARM64-quickstart
|
||||
import APM_javascript_others_macOsARM64_quickStart_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/MacOsARM64/QuickStart/others-macosarm64-quickStart-instrumentApplication.md';
|
||||
import APM_javascript_others_macOsARM64_quickStart_runApplication from '../Modules/APM/Javascript/md-docs/Others/MacOsARM64/QuickStart/others-macosarm64-quickStart-runApplication.md';
|
||||
// Others-JavaScript-MacOsARM64-recommended
|
||||
import APM_javascript_others_macOsARM64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/Others/MacOsARM64/Recommended/others-macosarm64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_others_macOsARM64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/Others/MacOsARM64/Recommended/others-macosarm64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_others_macOsARM64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/Others/MacOsARM64/Recommended/others-macosarm64-recommended-runApplication.md';
|
||||
// ----------------------------------------------------------------------------
|
||||
/// ////// Java Done
|
||||
// ReactJS-Kubernetes
|
||||
import APM_javascript_reactjs_kubernetes_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/ReactJS/Kubernetes/reactjs-kubernetes-installOtelCollector.md';
|
||||
import APM_javascript_reactjs_kubernetes_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/Kubernetes/reactjs-kubernetes-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_kubernetes_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/Kubernetes/reactjs-kubernetes-runApplication.md';
|
||||
// ReactJS-LinuxAMD64-quickstart
|
||||
import APM_javascript_reactjs_linuxAMD64_quickStart_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxAMD64/QuickStart/reactjs-linuxamd64-quickStart-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_linuxAMD64_quickStart_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxAMD64/QuickStart/reactjs-linuxamd64-quickStart-runApplication.md';
|
||||
// // ReactJS-LinuxAMD64-recommended
|
||||
import APM_javascript_reactjs_linuxAMD64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxAMD64/Recommended/reactjs-linuxamd64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_reactjs_linuxAMD64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxAMD64/Recommended/reactjs-linuxamd64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_linuxAMD64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxAMD64/Recommended/reactjs-linuxamd64-recommended-runApplication.md';
|
||||
// ReactJS-LinuxARM64-quickstart
|
||||
import APM_javascript_reactjs_linuxARM64_quickStart_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxARM64/QuickStart/reactjs-linuxarm64-quickStart-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_linuxARM64_quickStart_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxARM64/QuickStart/reactjs-linuxarm64-quickStart-runApplication.md';
|
||||
// ReactJS-LinuxARM64-recommended
|
||||
import APM_javascript_reactjs_linuxARM64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxARM64/Recommended/reactjs-linuxarm64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_reactjs_linuxARM64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxARM64/Recommended/reactjs-linuxarm64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_linuxARM64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/LinuxARM64/Recommended/reactjs-linuxarm64-recommended-runApplication.md';
|
||||
// ReactJS-MacOsAMD64-quickstart
|
||||
import APM_javascript_reactjs_macOsAMD64_quickStart_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsAMD64/QuickStart/reactjs-macosamd64-quickStart-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_macOsAMD64_quickStart_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsAMD64/QuickStart/reactjs-macosamd64-quickStart-runApplication.md';
|
||||
// ReactJS-MacOsAMD64-recommended
|
||||
import APM_javascript_reactjs_macOsAMD64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsAMD64/Recommended/reactjs-macosamd64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_reactjs_macOsAMD64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsAMD64/Recommended/reactjs-macosamd64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_macOsAMD64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsAMD64/Recommended/reactjs-macosamd64-recommended-runApplication.md';
|
||||
// ReactJS-MacOsARM64-quickstart
|
||||
import APM_javascript_reactjs_macOsARM64_quickStart_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsARM64/QuickStart/reactjs-macosarm64-quickStart-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_macOsARM64_quickStart_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsARM64/QuickStart/reactjs-macosarm64-quickStart-runApplication.md';
|
||||
// ReactJS-MacOsARM64-recommended
|
||||
import APM_javascript_reactjs_macOsARM64_recommendedSteps_setupOtelCollector from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsARM64/Recommended/reactjs-macosarm64-recommended-installOtelCollector.md';
|
||||
import APM_javascript_reactjs_macOsARM64_recommendedSteps_instrumentApplication from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsARM64/Recommended/reactjs-macosarm64-recommended-instrumentApplication.md';
|
||||
import APM_javascript_reactjs_macOsARM64_recommendedSteps_runApplication from '../Modules/APM/Javascript/md-docs/ReactJS/MacOsARM64/Recommended/reactjs-macosarm64-recommended-runApplication.md';
|
||||
/// ////// Javascript Done
|
||||
/// ///// Python Start
|
||||
// Django
|
||||
// Django-Kubernetes
|
||||
@ -1062,6 +1126,91 @@ export const ApmDocFilePaths = {
|
||||
APM_javascript_nodejs_macOsARM64_quickStart_instrumentApplication,
|
||||
APM_javascript_nodejs_macOsARM64_quickStart_runApplication,
|
||||
|
||||
/// React JS
|
||||
|
||||
// ReeactJS-Kubernetes
|
||||
APM_javascript_reactjs_kubernetes_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_reactjs_kubernetes_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_reactjs_kubernetes_recommendedSteps_runApplication,
|
||||
|
||||
// ReactJS-LinuxAMD64-quickstart
|
||||
APM_javascript_reactjs_linuxAMD64_quickStart_instrumentApplication,
|
||||
APM_javascript_reactjs_linuxAMD64_quickStart_runApplication,
|
||||
|
||||
// // ReactJS-LinuxAMD64-recommended
|
||||
APM_javascript_reactjs_linuxAMD64_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_reactjs_linuxAMD64_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_reactjs_linuxAMD64_recommendedSteps_runApplication,
|
||||
|
||||
// ReactJS-LinuxARM64-quickstart
|
||||
APM_javascript_reactjs_linuxARM64_quickStart_instrumentApplication,
|
||||
APM_javascript_reactjs_linuxARM64_quickStart_runApplication,
|
||||
|
||||
// ReactJS-LinuxARM64-recommended
|
||||
APM_javascript_reactjs_linuxARM64_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_reactjs_linuxARM64_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_reactjs_linuxARM64_recommendedSteps_runApplication,
|
||||
|
||||
// ReactJS-MacOsAMD64-quickstart
|
||||
APM_javascript_reactjs_macOsAMD64_quickStart_instrumentApplication,
|
||||
APM_javascript_reactjs_macOsAMD64_quickStart_runApplication,
|
||||
|
||||
// ReactJS-MacOsAMD64-recommended
|
||||
APM_javascript_reactjs_macOsAMD64_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_reactjs_macOsAMD64_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_reactjs_macOsAMD64_recommendedSteps_runApplication,
|
||||
|
||||
// ReactJS-MacOsARM64-quickstart
|
||||
APM_javascript_reactjs_macOsARM64_quickStart_instrumentApplication,
|
||||
APM_javascript_reactjs_macOsARM64_quickStart_runApplication,
|
||||
|
||||
// ReactJS-MacOsARM64-recommended
|
||||
APM_javascript_reactjs_macOsARM64_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_reactjs_macOsARM64_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_reactjs_macOsARM64_recommendedSteps_runApplication,
|
||||
|
||||
/// // JavaScript Others
|
||||
|
||||
APM_javascript_others_kubernetes_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_others_kubernetes_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_others_kubernetes_recommendedSteps_runApplication,
|
||||
|
||||
// Others-JavaScript-LinuxAMD64-quickstart
|
||||
APM_javascript_others_linuxAMD64_quickStart_instrumentApplication,
|
||||
APM_javascript_others_linuxAMD64_quickStart_runApplication,
|
||||
|
||||
// // Others-JavaScript-LinuxAMD64-recommended
|
||||
APM_javascript_others_linuxAMD64_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_others_linuxAMD64_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_others_linuxAMD64_recommendedSteps_runApplication,
|
||||
|
||||
// Others-JavaScript-LinuxARM64-quiOthers
|
||||
APM_javascript_others_linuxARM64_quickStart_instrumentApplication,
|
||||
APM_javascript_others_linuxARM64_quickStart_runApplication,
|
||||
|
||||
// Others-JavaScript-LinuxARM64-recommended
|
||||
APM_javascript_others_linuxARM64_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_others_linuxARM64_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_others_linuxARM64_recommendedSteps_runApplication,
|
||||
|
||||
// Others-JavaScript-MacOsAMD64-quickstart
|
||||
APM_javascript_others_macOsAMD64_quickStart_instrumentApplication,
|
||||
APM_javascript_others_macOsAMD64_quickStart_runApplication,
|
||||
|
||||
// Others-JavaScript-MacOsAMD64-recommended
|
||||
APM_javascript_others_macOsAMD64_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_others_macOsAMD64_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_others_macOsAMD64_recommendedSteps_runApplication,
|
||||
|
||||
// Others-JavaScript-MacOsARM64-quickstart
|
||||
APM_javascript_others_macOsARM64_quickStart_instrumentApplication,
|
||||
APM_javascript_others_macOsARM64_quickStart_runApplication,
|
||||
|
||||
// Others-JavaScript-MacOsARM64-recommended
|
||||
APM_javascript_others_macOsARM64_recommendedSteps_setupOtelCollector,
|
||||
APM_javascript_others_macOsARM64_recommendedSteps_instrumentApplication,
|
||||
APM_javascript_others_macOsARM64_recommendedSteps_runApplication,
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
|
||||
/// //// JavaScript Done
|
||||
|
@ -34,6 +34,14 @@ export const frameworksMap = {
|
||||
value: 'nodejs',
|
||||
label: 'Nodejs',
|
||||
},
|
||||
{
|
||||
value: 'reactjs',
|
||||
label: 'React JS',
|
||||
},
|
||||
{
|
||||
value: 'others',
|
||||
label: 'Other Web Instrumentation',
|
||||
},
|
||||
],
|
||||
python: [
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user