Editar

Partilhar via


Bibliotecas do Azure Monitor para PythonAzure Monitoring libraries for python

Visão geralOverview

O monitoramento fornece dados para garantir que seu aplicativo permaneça ativo e em execução em um estado íntegro.Monitoring provides data to ensure that your application stays up and running in a healthy state. Ele também ajuda a afastar os problemas potenciais ou solucionar problemas antigos.It also helps you to stave off potential problems or troubleshoot past ones. Além disso, você pode usar os dados de monitoramento para obter mais informações sobre seu aplicativo.In addition, you can use monitoring data to gain deep insights about your application. Esse conhecimento pode ajudá-lo a melhorar o desempenho ou a capacidade de manutenção do aplicativo ou automatizar ações que normalmente exigiriam intervenção manual.That knowledge can help you to improve application performance or maintainability, or automate actions that would otherwise require manual intervention.

Saiba mais sobre o Azure Monitor aqui.Learn more about Azure Monitor here.

InstalaçãoInstallation

pip install azure-mgmt-monitor

Exemplo - MétricasExample - Metrics

Este exemplo obtém as métricas de um recurso no Azure (VMs, etc.).This sample obtains the metrics of a resource on Azure (VMs, etc.). Este exemplo requer pelo menos a versão 0.4.0 do pacote do Python.This sample requires version 0.4.0 of the Python package at least.

Uma lista completa das palavras-chave disponíveis para filtros está disponível aqui.A complete list of available keywords for filters is available here.

As métricas suportadas por tipo de recurso estão disponívelis aqui.Supported metrics per resource type is available here.

import datetime
from azure.mgmt.monitor import MonitorManagementClient

# Get the ARM id of your resource. You might chose to do a "get"
# using the according management or to build the URL directly
# Example for a ARM VM
resource_id = (
    "subscriptions/{}/"
    "resourceGroups/{}/"
    "providers/Microsoft.Compute/virtualMachines/{}"
).format(subscription_id, resource_group_name, vm_name)

# create client
client = MonitorManagementClient(
    credentials,
    subscription_id
)

# You can get the available metrics of this specific resource
for metric in client.metric_definitions.list(resource_id):
    # azure.monitor.models.MetricDefinition
    print("{}: id={}, unit={}".format(
        metric.name.localized_value,
        metric.name.value,
        metric.unit
    ))

# Example of result for a VM:
# Percentage CPU: id=Percentage CPU, unit=Unit.percent
# Network In: id=Network In, unit=Unit.bytes
# Network Out: id=Network Out, unit=Unit.bytes
# Disk Read Bytes: id=Disk Read Bytes, unit=Unit.bytes
# Disk Write Bytes: id=Disk Write Bytes, unit=Unit.bytes
# Disk Read Operations/Sec: id=Disk Read Operations/Sec, unit=Unit.count_per_second
# Disk Write Operations/Sec: id=Disk Write Operations/Sec, unit=Unit.count_per_second

# Get CPU total of yesterday for this VM, by hour

today = datetime.datetime.now().date()
yesterday = today - datetime.timedelta(days=1)

metrics_data = client.metrics.list(
    resource_id,
    timespan="{}/{}".format(yesterday, today),
    interval='PT1H',
    metricnames='Percentage CPU',
    aggregation='Total'
)

for item in metrics_data.value:
    # azure.mgmt.monitor.models.Metric
    print("{} ({})".format(item.name.localized_value, item.unit.name))
    for timeserie in item.timeseries:
        for data in timeserie.data:
            # azure.mgmt.monitor.models.MetricData
            print("{}: {}".format(data.time_stamp, data.total))

# Example of result:
# Percentage CPU (percent)
# 2016-11-16 00:00:00+00:00: 72.0
# 2016-11-16 01:00:00+00:00: 90.59
# 2016-11-16 02:00:00+00:00: 60.58
# 2016-11-16 03:00:00+00:00: 65.78
# 2016-11-16 04:00:00+00:00: 43.96
# 2016-11-16 05:00:00+00:00: 43.96
# 2016-11-16 06:00:00+00:00: 114.9
# 2016-11-16 07:00:00+00:00: 45.4

Exemplo - AlertasExample - Alerts

Este exemplo mostra como configurar de modo automático alertas sobre os recursos quando eles são criados para garantir que todos os recursos sejam monitorados corretamente.This example shows how to automatically set up alerts on your resources when they are created to ensure that all resources are monitored correctly.

Criar uma fonte de dados em uma VM para alertar sobre o uso da CPU:Create a data source on a VM to alert on CPU usage:

from azure.mgmt.monitor import MonitorMgmtClient
from azure.mgmt.monitor.models import RuleMetricDataSource

resource_id = (
    "subscriptions/{}/"
    "resourceGroups/MonitorTestsDoNotDelete/"
    "providers/Microsoft.Compute/virtualMachines/MonitorTest"
).format(self.settings.SUBSCRIPTION_ID)

# create client
client = MonitorMgmtClient(
    credentials,
    subscription_id
)

# I need a subclass of "RuleDataSource"
data_source = RuleMetricDataSource(
    resource_uri = resource_id,
    metric_name = 'Percentage CPU'
)

Crie uma condição de limite que dispara quando o uso médio de CPU de uma máquina virtual para os últimos 5 minutos está acima de 90% (usando a fonte de dados anterior):Create a threshold condition that triggers when the average CPU usage of a VM for the last 5 minutes is above 90% (using the preceding data source):

from azure.mgmt.monitor.models import ThresholdRuleCondition

# I need a subclasses of "RuleCondition"
rule_condition = ThresholdRuleCondition(
    data_source = data_source,
    operator = 'GreaterThanOrEqual',
    threshold = 90,
    window_size = 'PT5M',
    time_aggregation = 'Average'
)

Criar uma ação de email:Create an email action:

from azure.mgmt.monitor.models import RuleEmailAction

# I need a subclass of "RuleAction"
rule_action = RuleEmailAction(
    send_to_service_owners = True,
    custom_emails = [
        'monitoringemail@microsoft.com'
    ]
)

Criar o alerta:Create the alert:

rule_name = 'MyPyTestAlertRule'
my_alert = client.alert_rules.create_or_update(
    group_name,
    rule_name,
    {
        'location': 'westus',
        'alert_rule_resource_name': rule_name,
        'description': 'Testing Alert rule creation',
        'is_enabled': True,
        'condition': rule_condition,
        'actions': [
            rule_action
        ]
    }
)