Skip to content

Dynatrace Extension — Installation

Before starting:

  • A Dynatrace environment (SaaS) with at least one ActiveGate deployed
  • The extension package matching your ActiveGate OS:
    • Linux ActiveGate → custom_teams-observability-agent-linux_X.Y.Z.zip
    • Windows ActiveGate → custom_teams-observability-agent-windows_X.Y.Z.zip
    • Download from the GitHub Releases page
  • Your current configuration values (credentials, features, intervals)
  • Your Phenisys license string — the full JSON content of the license file (not the file path). See License.
  • A Dynatrace API token with the logs.ingest permission

Step 1 — Upload the Phenisys developer certificate

Section titled “Step 1 — Upload the Phenisys developer certificate”

Dynatrace only installs custom extensions that are signed by a trusted root. The MS Teams Observability extension is signed with the Phenisys developer root, so the matching certificate must be registered both at the tenant level (Credential vault) and on every ActiveGate that will run the extension. Without it, the upload in Step 2 will be rejected.

Download the certificate: ca.pem.

1a — Add the certificate to the Credential vault

Section titled “1a — Add the certificate to the Credential vault”
  1. Open the Credential vault on your tenant: https://<your-tenant-id>.apps.dynatrace.com/ui/apps/dynatrace.classic.credential.vault/.

  2. Click Add new credential and fill in:

    • Credential type: Public certificate
    • Credential name: Microsoft Teams Observability Certificate (or any name you prefer)
    • Credential scope: tick Extension validation
    • Certificate file: upload the ca.pem you just downloaded
  3. Click Save.

Dynatrace Credential vault — Public certificate entry with Extension validation scope and ca.pem uploaded
Credential vault entry for the Phenisys developer certificate.

1b — Install the certificate on each ActiveGate

Section titled “1b — Install the certificate on each ActiveGate”

Place the file at:

/var/lib/dynatrace/remotepluginmodule/agent/conf/certificates/ca.pem

It must be readable by the dtuserag user that runs the ActiveGate:

Terminal window
sudo install -o dtuserag -g dtuserag -m 644 ca.pem \
/var/lib/dynatrace/remotepluginmodule/agent/conf/certificates/ca.pem

Restart the ActiveGate service so it picks up the new trust store:

Terminal window
sudo systemctl restart dynatracegate

Step 2 — Upload the extension to Dynatrace

Section titled “Step 2 — Upload the extension to Dynatrace”
  1. Download the correct extension ZIP from GitHub Releases:

    • custom_teams-observability-agent-linux_X.Y.Z.zip for Linux ActiveGate
    • custom_teams-observability-agent-windows_X.Y.Z.zip for Windows ActiveGate
  2. In Dynatrace, navigate to Extensions → Manage → Upload custom extension.

  3. Upload the .zip file.

  4. Once uploaded, the extension appears in the list as custom:teams-observability-agent-linux or custom:teams-observability-agent-windows.


  1. Open the uploaded extension and click Add configuration.

  2. Select the ActiveGate group where the extension will run.

  3. Fill in the configuration fields using the mapping table below.

  4. Click Save.

Use this table to map values from your existing config.yaml to the extension UI fields.

YAML fieldExtension UI fieldNotes
microsoft_authentication.graph.tenant_idMicrosoft Tenant ID
microsoft_authentication.graph.client_idMicrosoft Client IDOr use Credential Vault
microsoft_authentication.graph.client_secretMicrosoft Client SecretOr use Credential Vault
microsoft_authentication.vaac.usernameMicrosoft VAAC UsernameOnly visible when PSTN collection is enabled
microsoft_authentication.vaac.passwordMicrosoft VAAC PasswordOnly visible when PSTN collection is enabled

Credential Vault (optional): Enable Use credential vault and select the vault entry that stores your Client ID (as username) and Client Secret (as password). When enabled, the individual Client ID/Secret fields are hidden.

YAML fieldExtension UI fieldNotes
microsoft_authentication.graph.cloud_deploymentMicrosoft Cloud DeploymentSupported values: global, us_gov_gcc_high, us_gov_dod, china
advanced.ca_bundle_pathCustom CA Bundle PathAbsolute PEM path on the ActiveGate host
YAML fieldExtension UI fieldNotes
output.dynatrace.dynatrace_tenant_idDynatrace Tenant IDThe part before .dynatrace.com in your environment URL
output.dynatrace.dynatrace_api_tokenDynatrace API TokenMust have logs.ingest permission
StandaloneExtension UI fieldNotes
Content of .lic / license.jsonLicensePaste the full JSON string — not the file path

Open your license file and copy its entire content into the License field. See License for format details.

YAML fieldExtension UI fieldDefault
collection_config.features.calls_collection.enabledEnable calls data collectiontrue
collection_config.features.pstn_calls_collection.enabledEnable PSTN calls data collectionfalse
collection_config.features.direct_routing_calls_collection.enabledEnable Direct Routing calls data collectionfalse
collection_config.features.autoattendant_collection.enabledEnable Auto Attendant data collectionfalse
collection_config.features.callqueue_collection.enabledEnable Call Queue data collectionfalse
collection_config.features.issues_collection.enabledEnable Issues data collectionfalse
YAML fieldExtension UI fieldValid range
collection_config.interval_collection_minutesInterval (minutes)1–60
collection_config.max_call_duration_hoursMax Call Duration (hours)1–60

Enable Show Advanced options in the extension UI to configure the following controls:

YAML fieldExtension UI fieldDefaultValid range
advanced.scheduler.respect_persisted_backoffAdvanced - Scheduler: Respect persisted backofftrueboolean
advanced.scheduler.backoff_buffer_secondsAdvanced - Scheduler: Backoff buffer (seconds)50–3600
advanced.calls.max_items_per_cycleAdvanced - Calls: Max items per cycleNo default (null)1–10000
advanced.calls.throttle.default_retry_after_secondsAdvanced - Calls throttle: Default Retry-After (seconds)1201–3600
advanced.calls.throttle.max_backoff_secondsAdvanced - Calls throttle: Max backoff (seconds)18001–86400
advanced.calls.throttle.jitter_percentAdvanced - Calls throttle: Jitter (0.0-1.0)0.20.0–1.0
advanced.calls.throttle.escalation_multiplierAdvanced - Calls throttle: Escalation multiplier2.01.0–10.0
advanced.calls.throttle.escalation_max_secondsAdvanced - Calls throttle: Escalation max (seconds)36001–86400
advanced.calls.rate_limits.list_per_secondAdvanced - Calls rate limits: LIST requests per second1.00.01–100.0
advanced.calls.rate_limits.detail_per_secondAdvanced - Calls rate limits: DETAIL requests per second20.00.01–100.0
telemetry.timeout_secondsAdvanced - Telemetry: Timeout (seconds)101–3600

  1. Open the extension configuration in Dynatrace and check the Status — it should show Running within a few minutes.

  2. In Dynatrace, go to Logs and filter by:

    dt.extension.name = "custom:teams-observability-agent-linux"

    (or windows). Ingested log entries from Microsoft Teams should appear.

  3. Confirm the data matches what you were seeing before (calls, PSTN records, etc.).

  4. If the extension shows an error, check the logs on the ActiveGate host.

Extension framework logs (startup errors, activation issues):

/var/lib/dynatrace/remotepluginmodule/log/extensions/datasources/{extension-name}/

Agent logs (collection errors, Microsoft Graph API issues):

/var/lib/dynatrace/remotepluginmodule/agent/runtime/extensions/python_venvs/{extension-name}/lib/{python-version}/site-packages/teams_observability_agent/agent/logs/

Replace {python-version} with the Python version in use (e.g. python3.14).

In both cases, replace {extension-name} with the full extension name (e.g. custom:teams-observability-agent-linux).


  • State is reset on first run. The extension does not import the standalone agent’s previous state file. On the first run it may re-process recent calls (within maxCallDuration hours). Duplicate events are idempotent in Dynatrace Logs, so this is safe.
  • Force full re-collection. If you need to force a complete re-collection, temporarily increase maxCallDuration and restart the extension configuration.
  • Console and Splunk output are not supported. The extension only forwards data to Dynatrace. If you were using Splunk or console output in the standalone agent, those options are not available via the extension.