Skip to content

Commit 6a397c1

Browse files
Fix/skruk/documentation 093 (#60)
* fixing smaller issues in documentation * Update documentation to include Dynatrace Subscription compatibility details * Update documentation and comments for BizEvents, DavisEvents, and GenericEvents classes to reflect API changes and clarify usage
1 parent 7c1a168 commit 6a397c1

File tree

6 files changed

+91
-57
lines changed

6 files changed

+91
-57
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ LICENSE.md
2626
test/conf/*config-download.yml
2727
dynatrace-snowflake-observability-agent
2828
*.pkg
29+
.github/context/*

docs/ARCHITECTURE.md

Lines changed: 57 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ The main capabilities offered by DSOA are:
3636
- [Sending metrics](#sending-metrics)
3737
- [Sending events](#sending-events)
3838
- [Sending BizEvents](#sending-bizevents)
39+
- [Dynatrace Subscription Compatibility](#dynatrace-subscription-compatibility)
3940
- [Sending custom telemetry](#sending-custom-telemetry)
4041
- [Default data structure](#default-data-structure)
4142
- [Examples of sending custom telemetry](#examples-of-sending-custom-telemetry)
@@ -206,7 +207,8 @@ DSOA offers an internal API to send telemetry as
206207
[OTEL logs](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/environment-api/opentelemetry/post-logs),
207208
[OTEL spans](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/environment-api/opentelemetry/post-traces),
208209
[metrics](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/environment-api/metric-v2),
209-
[events](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/environment-api/events-v2), and
210+
[generic events](https://docs.dynatrace.com/docs/platform/openpipeline/reference/openpipeline-ingest-api/generic-events/events-generic-builtin), and
211+
[Davis events](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/environment-api/events-v2), and
210212
[BizEvents](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/environment-api/business-analytics-v2).
211213

212214
### Sending logs
@@ -225,15 +227,11 @@ traces/spans.
225227

226228
Traces/spans delivery can be adjusted in the configuration:
227229

228-
```json
229-
{
230-
"OTEL": {
231-
"SPANS": {
232-
"EXPORT_TIMEOUT_MILLIS": 10000,
233-
"MAX_EXPORT_BATCH_SIZE": 50
234-
}
235-
}
236-
}
230+
```yaml
231+
otel:
232+
spans:
233+
export_timeout_millis: 10000
234+
max_export_batch_size: 50
237235
```
238236
239237
### Sending metrics
@@ -247,35 +245,29 @@ avoid creating redundant calls.
247245
The internal telemetry API enables for metrics cache to be manually flushed before reaching the maximum payload. The maximum size of payload
248246
and maximum number of retries to send data can be configured:
249247
250-
```json
251-
{
252-
"OTEL": {
253-
"METRICS": {
254-
"MAX_RETRIES": 5,
255-
"MAX_BATCH_SIZE": 1000000
256-
}
257-
}
258-
}
248+
```yaml
249+
otel:
250+
metrics:
251+
max_retries: 5
252+
max_batch_size: 1000000
259253
```
260254
261255
### Sending events
262256
263257
Dynatrace Snowflake Observability Agent enables to send events using the
264-
[Dynatrace Events API v2](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/environment-api/events-v2).
258+
[Dynatrace OpenPipeline Events API](https://docs.dynatrace.com/docs/platform/openpipeline/reference/openpipeline-ingest-api/generic-events/events-generic-builtin) (`/platform/ingest/v1/events`).
259+
260+
> **Note:** The OpenPipeline Events API requires a [Dynatrace Platform Subscription (DPS)](https://www.dynatrace.com/pricing/dynatrace-platform-subscription/). Tenants without DPS cannot receive events sent through this endpoint. See [Dynatrace Subscription Compatibility](#dynatrace-subscription-compatibility) for guidance on configuring DSOA for non-DPS tenants.
265261

266262
Each event has columns specifying the event type and title accompanied by additional attributes describing its details. Dynatrace API for
267263
Events require each event to be send separately. Dynatrace Snowflake Observability Agent enables to configure maximum number of retries and
268264
delay (in milliseconds) between retries, in case event could not be delivered.
269265

270-
```json
271-
{
272-
"OTEL": {
273-
"EVENTS": {
274-
"MAX_RETRIES": 5,
275-
"RETRY_DELAY": 10000
276-
}
277-
}
278-
}
266+
```yaml
267+
otel:
268+
events:
269+
max_retries: 5
270+
retry_delay_ms: 10000
279271
```
280272

281273
### Sending BizEvents
@@ -284,26 +276,42 @@ Dynatrace Snowflake Observability Agent is also capable of sending special type
284276
using the
285277
[Dynatrace Business Events API v2](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/environment-api/business-analytics-v2).
286278

279+
> **Note:** BizEvents are stored in Grail (Dynatrace's data lakehouse) and therefore require a [Dynatrace Platform Subscription (DPS)](https://www.dynatrace.com/pricing/dynatrace-platform-subscription/). Tenants without DPS cannot receive BizEvents. See [Dynatrace Subscription Compatibility](#dynatrace-subscription-compatibility) for guidance on configuring DSOA for non-DPS tenants.
280+
287281
Those events are usually used for tracking execution of actions within Dynatrace Snowflake Observability Agent flow. Each posted business
288282
event is required to have fields specifying its `id`, `source`, `specversion`, and `type`. Dynatrace Snowflake Observability Agent sends
289283
business events as batch of `CloudEvent` objects.
290284

291285
There are multiple parameters of delivering BizEvents can be configured:
292286

293-
```json
294-
{
295-
"OTEL": {
296-
"BIZ_EVENTS": {
297-
"MAX_RETRIES": 5,
298-
"MAX_PAYLOAD_BYTES": 1000 * 1024 * 5,
299-
"MAX_EVENT_COUNT": 400,
300-
"RETRY_DELAY_MS": 10000,
301-
"RETRY_ON_STATUS": [429, 502, 503]
302-
}
303-
}
304-
}
287+
```yaml
288+
otel:
289+
biz_events:
290+
max_retries: 5
291+
max_payload_bytes: 5120000 # 1000 * 1024 * 5
292+
max_event_count: 400
293+
retry_delay_ms: 10000
294+
retry_on_status: [429, 502, 503]
305295
```
306296

297+
### Dynatrace Subscription Compatibility
298+
299+
Not all DSOA telemetry types are available on every Dynatrace deployment. Some signal types depend on
300+
[Dynatrace Platform Subscription (DPS)](https://www.dynatrace.com/pricing/dynatrace-platform-subscription/), which provides access to
301+
Grail (Dynatrace's data lakehouse) and the OpenPipeline ingestion APIs.
302+
303+
| Signal Type | Endpoint | DPS Required | Notes |
304+
| ------------------ | ---------------------------- | ------------ | ----------------------------------------------- |
305+
| **Logs** | `/api/v2/otlp/v1/logs` | No | Available on all tenants |
306+
| **Metrics** | `/api/v2/metrics/ingest` | No | Available on all tenants |
307+
| **Spans** | `/api/v2/otlp/v1/traces` | No | Available on all tenants |
308+
| **Davis Events** | `/api/v2/events/ingest` | No | Classic Events API v2, available on all tenants |
309+
| **BizEvents** | `/api/v2/bizevents/ingest` | **Yes** | Stored in Grail; requires DPS |
310+
| **Generic Events** | `/platform/ingest/v1/events` | **Yes** | OpenPipeline-only; requires DPS |
311+
312+
For guidance on configuring DSOA for a non-DPS Dynatrace tenant, see
313+
[Using DSOA Without a Dynatrace Platform Subscription](INSTALL.md#using-dsoa-without-a-dynatrace-platform-subscription) in INSTALL.md.
314+
307315
## Sending custom telemetry
308316

309317
Apart from sending telemetry prepared by plugins, Dynatrace Snowflake Observability Agent enables sending custom telemetry using the
@@ -401,7 +409,7 @@ call APP.SEND_TELEMETRY(ARRAY_CONSTRUCT(
401409
'value.str', 'test',
402410
'value.bool', true,
403411
'value.list', ARRAY_CONSTRUCT(1, '2', 3),
404-
'value.dict', OBJECT CONSTRUCT('k', 'v', 'k2', 2)
412+
'value.dict', OBJECT_CONSTRUCT('k', 'v', 'k2', 2)
405413
),
406414
OBJECT_CONSTRUCT(
407415
'timestamp', 1732103723000,
@@ -411,8 +419,8 @@ call APP.SEND_TELEMETRY(ARRAY_CONSTRUCT(
411419
'value.int', 10000000,
412420
'value.str', 'test 2',
413421
'value.bool', false,
414-
'value.list', ARRAY CONSTRUCT('1', '2'),
415-
'value.dict', OBJECT CONSTRUCT('k', 1, 'k2', 2)
422+
'value.list', ARRAY_CONSTRUCT('1', '2'),
423+
'value.dict', OBJECT_CONSTRUCT('k', 1, 'k2', 2)
416424
),
417425
OBJECT_CONSTRUCT(
418426
'timestamp', 1732103723000,
@@ -432,15 +440,11 @@ call APP.SEND_TELEMETRY(ARRAY_CONSTRUCT(
432440

433441
Dynatrace Snowflake Observability Agent has configurable self-monitoring capabilities.
434442

435-
```json
436-
{
437-
"PLUGINS": {
438-
"SELF_MONITORING": {
439-
"SEND_BIZEVENTS_ON_DEPLOY": true,
440-
"SEND_BIZEVENTS_ON_RUN": true
441-
}
442-
}
443-
}
443+
```yaml
444+
plugins:
445+
self_monitoring:
446+
send_bizevents_on_deploy: true
447+
send_bizevents_on_run: true
444448
```
445449

446450
With `SEND_BIZEVENTS_ON_RUN` set to `true` Dynatrace Snowflake Observability Agent will provide updates to DT on the statuses of executed

docs/INSTALL.md

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ This approach provides a structured way to have a Snowflake administrator initia
439439
440440
```bash
441441
export HISTCONTROL=ignorespace
442-
export DTAGENT_TOKEN="your-dynatrace-token"
442+
export DTAGENT_TOKEN="your-dynatrace-token"
443443
444444
# If you included admin setup (or do not want to install use the admin role) in your custom init script:
445445
./deploy.sh custom-init --scope=setup,plugins,config,agents,apikey
@@ -821,6 +821,31 @@ The `otel` section allows you to configure OpenTelemetry behavior. By default, y
821821
| `biz_events.retry_on_status` | Array[Integer] | - | HTTP status codes that trigger retry |
822822
| `biz_events.is_disabled` | Boolean | `false` | Disable business events telemetry export |
823823
824+
#### Using DSOA Without a Dynatrace Platform Subscription
825+
826+
Some DSOA telemetry types require a [Dynatrace Platform Subscription (DPS)](https://www.dynatrace.com/pricing/dynatrace-platform-subscription/)
827+
because they rely on Grail or OpenPipeline ingestion APIs that are only available with DPS:
828+
829+
- **Generic (OpenPipeline) Events** (`otel.events`) — require DPS
830+
- **BizEvents** (`otel.biz_events`) — require DPS (stored in Grail)
831+
832+
**Logs, metrics, spans, and Davis Events work on all Dynatrace tenants**, regardless of subscription tier.
833+
834+
If your Dynatrace tenant does not have a DPS subscription, add the following to your profile configuration to disable the
835+
non-compatible signal types:
836+
837+
```yaml
838+
otel:
839+
events:
840+
is_disabled: true
841+
biz_events:
842+
is_disabled: true
843+
```
844+
845+
With this configuration, DSOA delivers full observability coverage through logs, metrics, and spans. Self-monitoring BizEvents
846+
and plugin event alerts will be silently suppressed rather than causing errors. See [ARCHITECTURE.md](ARCHITECTURE.md#dynatrace-subscription-compatibility)
847+
for the full signal compatibility table.
848+
824849
#### Plugin Scheduling
825850
826851
One of the configuration options for each Dynatrace Snowflake Observability Agent plugin is the `schedule`, which determines when the

src/dtagent/otel/events/bizevents.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@
4545

4646

4747
class BizEvents(AbstractEvents):
48-
"""Class parsing and sending bizevents."""
48+
"""Class parsing and sending bizevents via BizEvents API
49+
https://docs.dynatrace.com/docs/observe/business-observability/bo-api-ingest
50+
51+
NOTE: BizEvents are delivered to Dynatrace using CloudEvents batch format.
52+
"""
4953

5054
from dtagent.config import Configuration # COMPILE_REMOVE
5155

src/dtagent/otel/events/davis.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050

5151
class DavisEvents(GenericEvents):
5252
"""Allows for parsing and sending (Davis) Events payloads via Events v2 API
53-
https://docs.dynatrace.com/docs/discover-dynatrace/platform/openpipeline/reference/api-ingestion-reference#davis-events
53+
https://docs.dynatrace.com/docs/dynatrace-api/environment-api/events-v2/post-event
5454
5555
Note: Events API does not support sending multiple events at the same time, as a bulk, like in BizEvents or OpenPipelineEvents.
5656

src/dtagent/otel/events/generic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151

5252
class GenericEvents(AbstractEvents):
5353
"""Enables for parsing and sending Events via OpenPipeline Events API
54-
https://docs.dynatrace.com/docs/discover-dynatrace/platform/openpipeline/reference/api-ingestion-reference
54+
https://docs.dynatrace.com/docs/platform/openpipeline/reference/openpipeline-ingest-api/generic-events/events-generic-builtin
5555
5656
Note: OpenPipeline Events API does support sending multiple events at the same time, similar to BizEvents.
5757
"""

0 commit comments

Comments
 (0)