Skip to content

Install the Dynatrace Extension

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
  • Extension source repository: microsoft-teams-observability-dynatrace-extension
  • 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
  • The Phenisys root certificate (ca.pem) — Download ca.pem

Dynatrace verifies the authenticity of extensions using the publisher’s root certificate. This certificate must be present on each ActiveGate host in the target group, and uploaded to the Dynatrace Credential Vault.

  1. Download the Phenisys root certificate: Download ca.pem

  2. Copy the certificate to each ActiveGate host in the target group.

    /var/lib/dynatrace/remotepluginmodule/agent/conf/certificates/
  3. Upload the certificate to the Dynatrace Credential Vault:

    • Navigate to Settings → Credential Vault → Add new credential
    • Set Credential type to Public Certificate
    • Under Credential scope, check Extension validation
    • In Certificate file, upload the certificate

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.microsoft_tenant_idMicrosoft Tenant ID
microsoft_authentication.microsoft_client_idMicrosoft Client IDOr use Credential Vault
microsoft_authentication.microsoft_client_secretMicrosoft Client SecretOr use Credential Vault
microsoft_authentication.microsoft_usernameMicrosoft VAAC UsernameOnly visible when PSTN collection is enabled
microsoft_authentication.microsoft_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
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
features.ms_teams_calls_collection.enabledEnable calls data collectiontrue
features.ms_teams_pstn_calls_collection.enabledEnable PSTN calls data collectionfalse
features.ms_teams_direct_routing_calls_collection.enabledEnable Direct Routing calls data collectionfalse
features.ms_teams_autoattendant_collection.enabledEnable Auto Attendant data collectionfalse
features.ms_teams_callqueue_collection.enabledEnable Call Queue data collectionfalse
features.ms_teams_issues_collection.enabledEnable Issues data collectionfalse
YAML fieldExtension UI fieldValid range
collection_config.interval_collection_minutesInterval (minutes)1–60
collection_config.microsoft_max_call_duration_hoursMax Call Duration (hours)1–60

  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.