Skip to main content

Dynatrace API Python client

Project description

dt - Dynatrace Python API Client

dt is a Python client for the Dynatrace Rest API.
It focuses on ease of use and nice type hints, perfect to explore the API and create quick scripts

Install

$ pip install dt

Simple Demo

from dynatrace import Dynatrace
from dynatrace import TOO_MANY_REQUESTS_WAIT
from dynatrace.environment_v2.tokens_api import SCOPE_METRICS_READ, SCOPE_METRICS_INGEST
from dynatrace.configuration_v1.credential_vault import PublicCertificateCredentials
from dynatrace.environment_v2.settings import SettingsObject, SettingsObjectCreate

from datetime import datetime, timedelta

# Create a Dynatrace client
dt = Dynatrace("environment_url", "api_token")

# Create a client that handles too many requests (429)
# dt = Dynatrace("environment_url", "api_token", too_many_requests_strategy=TOO_MANY_REQUESTS_WAIT )

# Create a client that automatically retries on errors, up to 5 times, with a 1 second delay between retries
# dt = Dynatrace("environment_url", "api_token", retries=5, retry_delay_ms=1000 )

# Create a client with a custom HTTP timeout of 10 seconds
# dt = Dynatrace("environment_url", "api_token", timeout=10 )


# Get all hosts and some properties
for entity in dt.entities.list('type("HOST")', fields="properties.memoryTotal,properties.monitoringMode"):
    print(entity.entity_id, entity.display_name, entity.properties)

# Get idle CPU for all hosts
for metric in dt.metrics.query("builtin:host.cpu.idle", resolution="Inf"):
    print(metric)

# Print dimensions, timestamp and values for the AWS Billing Metric
for metric in dt.metrics.query("ext:cloud.aws.billing.estimatedChargesByRegionCurrency"):
    for data in metric.data:
        for timestamp, value in zip(data.timestamps, data.values):
            print(data.dimensions, timestamp, value)

# Get all ActiveGates
for ag in dt.activegates.list():
    print(ag)

# Get metric descriptions for all host metrics
for m in dt.metrics.list("builtin:host.*"):
    print(m)

# Delete endpoints that contain the word test
for plugin in dt.plugins.list():

    # This could also be dt.get_endpoints(plugin.id)
    for endpoint in plugin.endpoints:
        if "test" in endpoint.name:
            endpoint.delete(plugin.id)

# Prints dashboard ID, owner and number of tiles
for dashboard in dt.dashboards.list():
    full_dashboard = dashboard.get_full_dashboard()
    print(full_dashboard.id, dashboard.owner, len(full_dashboard.tiles))

# Delete API Tokens that haven't been used for more than 3 months
for token in dt.tokens.list(fields="+lastUsedDate,+scopes"):
    if token.last_used_date and token.last_used_date < datetime.now() - timedelta(days=90):
        print(f"Deleting token! {token}, last used date: {token.last_used_date}")

# Create an API Token that can read and ingest metrics
new_token = dt.tokens.create("metrics_token", scopes=[SCOPE_METRICS_READ, SCOPE_METRICS_INGEST])
print(new_token.token)

# Upload a public PEM certificate to the Credential Vault
with open("ca.pem", "r") as f:
    ca_cert = f.read()

my_cred = PublicCertificateCredentials(
    name="my_cred",
    description="my_cred description",
    scope="EXTENSION",
    owner_access_only=False,
    certificate=ca_cert,
    password="",
    credential_type="PUBLIC_CERTIFICATE",
    certificate_format="PEM"
)

r = dt.credentials.post(my_cred)
print(r.id)

# Create a new settings 2.0 object
settings_value = {
    "enabled": True,
    "summary": "DT API TEST 1",
    "queryDefinition": {
        "type": "METRIC_KEY",
        "metricKey": "netapp.ontap.node.fru.state",
        "aggregation": "AVG",
        "entityFilter": {
            "dimensionKey": "dt.entity.netapp_ontap:fru",
            "conditions": [],
        },
        "dimensionFilter": [],
    },
    "modelProperties": {
        "type": "STATIC_THRESHOLD",
        "threshold": 100.0,
        "alertOnNoData": False,
        "alertCondition": "BELOW",
        "violatingSamples": 3,
        "samples": 5,
        "dealertingSamples": 5,
    },
    "eventTemplate": {
        "title": "OnTap {dims:type} {dims:fru_id} is in Error State",
        "description": "OnTap field replaceable unit (FRU) {dims:type} with id {dims:fru_id} on node {dims:node} in cluster {dims:cluster} is in an error state.\n",
        "eventType": "RESOURCE",
        "davisMerge": True,
        "metadata": [],
    },
    "eventEntityDimensionKey": "dt.entity.netapp_ontap:fru",
}

settings_object = SettingsObjectCreate(schema_id="builtin:anomaly-detection.metric-events", value=settings_value, scope="environment")
dt.settings.create_object(validate_only=False, body=settings_object)

Implementation Progress

Environment API V2

API Level Access
Access Tokens - API tokens :heavy_check_mark: dt.tokens
Access tokens - Tenant tokens :heavy_check_mark: dt.tenant_tokens
ActiveGates :heavy_check_mark: dt.activegates
ActiveGates - Auto-update configuration :heavy_check_mark: dt.activegates_autoupdate_configuration
ActiveGates - Auto-update jobs :heavy_check_mark: dt.activegates_autoupdate_jobs
ActiveGates - Remote configuration :heavy_check_mark: dt.activegates_remote_configuration
Audit Logs :heavy_check_mark: dt.audit_logs
Events :warning: dt.events_v2
Extensions 2.0 :heavy_check_mark: dt.extensions_v2
Logs :warning: dt.logs
Metrics :heavy_check_mark: dt.metrics
Monitored entities :warning: dt.entities
Monitored entities - Custom tags :heavy_check_mark: dt.custom_tags
Network zones :warning: dt.network_zones
OneAgents - Remote configuration :heavy_check_mark: dt.oneagents_remote_configuration
Problems :heavy_check_mark: dt.problems
Security problems :x:
Service-level objectives :heavy_check_mark: dt.slos
Settings :warning: dt.settings

Environment API V1

API Level Access
Anonymization :x:
Cluster time :heavy_check_mark: dt.cluster_time
Cluster version :x:
Custom devices :heavy_check_mark: dt.custom_devices
Deployment :heavy_check_mark: dt.deployment
Events :warning: dt.events
JavaScript tag management :x:
Log monitoring - Custom devices :x:
Log monitoring - Hosts :x:
Log monitoring - Process groups :x:
Maintenance window :x:
OneAgent on a host :warning: dt.oneagents
Problem :x:
Synthetic - Locations and nodes :x:
Synthetic - Monitors :warning: dt.synthetic_monitors
Synthetic - Third party :heavy_check_mark: dt.third_part_synthetic_tests
Threshold :x:
Timeseries :warning: dt.timeseries
Tokens :x:
Topology & Smartscape - Application :x:
Topology & Smartscape - Custom device :warning: dt.custom_devices
Topology & Smartscape - Host :warning: dt.smartscape_hosts
Topology & Smartscape - Process :x:
Topology & Smartscape - Process group :x:
Topology & Smartscape - Service :x:
User sessions :x:

Configuration API V1

API Level Access
Alerting Profiles :warning: dt.alerting_profiles
Anomaly detection - Applications :x:
Anomaly detection - AWS :x:
Anomaly detection - Database services :x:
Anomaly detection - Disk events :x:
Anomaly detection - Hosts :x:
Anomaly detection - Metric events :warning: dt.anomaly_detection_metric_events
Anomaly detection - Process groups :warning: dt.anomaly_detection_process_groups
Anomaly detection - Services :x:
Anomaly detection - VMware :x:
Automatically applied tags :warning: dt.auto_tags
AWS credentials configuration :x:
AWS PrivateLink :x:
Azure credentials configuration :x:
Calculated metrics - Log monitoring :x:
Calculated metrics - Mobile & custom applications :x:
Calculated metrics - Services :x:
Calculated metrics - Synthetic :x:
Calculated metrics - Web applications :x:
Cloud Foundry credentials configuration :x:
Conditional naming :x:
Credential vault :x:
Custom tags :heavy_check_mark: dt.custom_tags
Dashboards :warning: dt.dashboards
Data privacy and security :x:
Extensions :heavy_check_mark: dt.extensions
Frequent issue detection :x:
Kubernetes credentials configuration :x:
Maintenance windows :warning: dt.maintenance_windows
Management zones :warning: dt.management_zones
Notifications :warning: dt.notifications
OneAgent - Environment-wide configuration :heavy_check_mark: dt.oneagents_config_environment
OneAgent in a host group :heavy_check_mark: dt.oneagents_config_hostgroup
OneAgent on a host :heavy_check_mark: dt.oneagents_config_host
Plugins :warning: dt.plugins
Remote environments :x:
Reports :x:
RUM - Allowed beacon origins for CORS :x:
RUM - Application detection rules :x:
RUM - Application detection rules - Host detection :x:
RUM - Content resources :x:
RUM - Geographic regions - custom client IP headers :x:
RUM - Geographic regions - IP address mapping :x:
RUM - Mobile and custom application configuration :x:
RUM - Web application configuration :x:
Service - Custom services :x:
Service - Detection full web request :x:
Service - Detection full web service :x:
Service - Detection opaque and external web request :x:
Service - Detection opaque and external web service :x:
Service - Failure detection parameter sets :x:
Service - Failure detection rules :x:
Service - IBM MQ tracing :x:
Service - Request attributes :x:
Service - Request naming :x:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dt-1.2.1.tar.gz (68.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dt-1.2.1-py3-none-any.whl (110.2 kB view details)

Uploaded Python 3

File details

Details for the file dt-1.2.1.tar.gz.

File metadata

  • Download URL: dt-1.2.1.tar.gz
  • Upload date:
  • Size: 68.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for dt-1.2.1.tar.gz
Algorithm Hash digest
SHA256 3c2c8349f1cda4551abf6cbfde726bf075afc7ece1c429881404dbd974c75272
MD5 ca7cda4d64571c116554728ec3ee000d
BLAKE2b-256 7facf92937e91775aaecb02d27806b9dfd6888118dc002c0ea353571fd9f657b

See more details on using hashes here.

File details

Details for the file dt-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: dt-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 110.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for dt-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f62ea9d451e5c3b7ddca83c9b9ea5e811ec232a3aad57b2fcb3359fd51da80c9
MD5 4eef425f33eb440a251f2f071f8229dd
BLAKE2b-256 b1f0b84e7c52af10e8fd0a79c43b6c468fc2a9178d2b37339ec8354acc6a92ad

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page