Aggiunta di avvisi e di ricerche salvate di Log Analytics alla soluzione di gestione in OMS (anteprima)Adding Log Analytics saved searches and alerts to OMS management solution (Preview)

Nota

Questa è una documentazione preliminare per la creazione di soluzioni di gestione in OMS attualmente disponibili in versione di anteprima.This is preliminary documentation for creating management solutions in OMS which are currently in preview. Qualsiasi schema descritto di seguito è soggetto a modifiche.Any schema described below is subject to change.

Le soluzioni di gestione in OMS includeranno in genere ricerche salvate di Log Analytics per l'analisi dei dati raccolti dalla soluzione.Management solutions in OMS will typically include saved searches in Log Analytics to analyze data collected by the solution. Potranno anche definire avvisi per la notifica all'utente o per eseguire automaticamente un'azione in risposta a un problema critico.They may also define alerts to notify the user or automatically take action in response to a critical issue. Questo articolo descrive come definire le ricerche salvate e gli avvisi di Log Analytics in un modello di Resource Manager in modo da consentirne l'inclusione nelle soluzioni di gestione.This article describes how to define Log Analytics saved searches and alerts in a Resource Management template so they can be included in management solutions.

Nota

Gli esempi in questo articolo usano parametri e variabili che sono richiesti o comuni nelle soluzioni di gestione e che sono descritti in Creazione di soluzioni di gestione in Operations Management Suite (OMS)The samples in this article use parameters and variables that are either required or common to management solutions and described in Creating management solutions in Operations Management Suite (OMS)

PrerequisitiPrerequisites

Questo articolo presuppone che si abbia già familiarità con la creazione di una soluzione di gestione e la struttura di un modello di Resource Manager e un file di soluzione.This article assumes that you're already familiar with how to create a management solution and the structure of a Resource Manager template and solution file.

Area di lavoro di Log AnalyticsLog Analytics Workspace

Tutte le risorse in Log Analytics sono contenute in un'area di lavoro.All resources in Log Analytics are contained in a workspace. Come descritto in Area di lavoro OMS e account di Automazione, l'area di lavoro non è inclusa nella soluzione di gestione, ma deve essere presente prima che la soluzione venga installata.As described in OMS workspace and Automation account, the workspace isn't included in the management solution but must exist before the solution is installed. Se non è disponibile, l'installazione della soluzione non riesce.If it isn't available, then the solution install fails.

Il nome dell'area di lavoro è il nome di ogni risorsa di Log Analytics.The name of the workspace is in the name of each Log Analytics resource. A questo scopo, nella soluzione viene usato il parametro workspace come nell'esempio seguente di una risorsa savedsearch.This is done in the solution with the workspace parameter as in the following example of a savedsearch resource.

"name": "[concat(parameters('workspaceName'), '/', variables('SavedSearchId'))]"

Versione API di Log AnalyticsLog Analytics API version

Tutte le risorse di Log Analytics definite in un modello di Resource Manager hanno una proprietà apiVersion che definisce la versione dell'API che la risorsa deve usare.All Log Analytics resources defined in a Resource Manager template have a property apiVersion that defines the version of the API the resource should use. Questa versione è diversa per le risorse che usano il linguaggio di query legacy e quello aggiornato.This version is different for resources that use the legacy and the upgraded query language.

La tabella seguente specifica le versioni API di Log Analytics per le aree di lavoro legacy e quelle aggiornate, con una query di esempio che illustra la diversa sintassi per ogni caso.The following table specifies the Log Analytics API versions for legacy and upgraded workspaces and a sample query to specify the different syntax for each.

Versione dell'area di lavoroWorkspace version Versione dell'APIAPI version Query di esempioSample query
v1 (legacy)v1 (legacy) 2015-11-01-preview2015-11-01-preview Type=Event EventLevelName = ErrorType=Event EventLevelName = Error
v2 (aggiornata)v2 (upgraded) 2017-03-15-preview2017-03-15-preview Event | where EventLevelName == "Error"Event | where EventLevelName == "Error"

Si noti quanto segue in relazione alle aree di lavoro supportate dalle diverse versioni.Note the following for which workspaces are supported by different versions.

  • I modelli che usano il linguaggio di query legacy possono essere installati in un'area di lavoro legacy o aggiornata.Templates that use the legacy query language can be installed in a legacy or upgraded workspace. Se l'installazione avviene in un'area di lavoro aggiornata, le query vengono convertite all'istante nel nuovo linguaggio quando vengono eseguite dall'utente.If installed in an upgraded workspace, then queries are converted on the fly to the new language when they are run by the user.
  • I modelli che usano il linguaggio di query aggiornato possono essere installati solo in un'area di lavoro aggiornata.Templates that use the upgraded query language can only be installed in an upgraded workspace.

Ricerche salvateSaved Searches

Includere ricerche salvate in una soluzione per consentire agli utenti di eseguire query sui dati raccolti dalla soluzione.Include saved searches in a solution to allow users to query data collected by your solution. Le ricerche salvate vengono visualizzate in Preferiti nel portale di OMS e in Ricerche salvate nel portale di Azure.Saved searches appear under Favorites in the OMS portal and Saved Searches in the Azure portal. È necessaria una ricerca salvata anche per ogni avviso.A saved search is also required for each alert.

Le risorse ricerca salvata di Log Analytics sono di tipo Microsoft.OperationalInsights/workspaces/savedSearches e hanno la struttura seguente.Log Analytics saved search resources have a type of Microsoft.OperationalInsights/workspaces/savedSearches and have the following structure. Nella struttura sono inclusi parametri e variabili comuni ed è quindi possibile copiare e incollare questo frammento di codice nel file della soluzione e, se necessario, modificare i nomi dei parametri.This includes common variables and parameters so that you can copy and paste this code snippet into your solution file and change the parameter names.

{
    "name": "[concat(parameters('workspaceName'), '/', variables('SavedSearch').Name)]",
    "type": "Microsoft.OperationalInsights/workspaces/savedSearches",
    "apiVersion": "[variables('LogAnalyticsApiVersion')]",
    "dependsOn": [
    ],
    "tags": { },
    "properties": {
        "etag": "*",
        "query": "[variables('SavedSearch').Query]",
        "displayName": "[variables('SavedSearch').DisplayName]",
        "category": "[variables('SavedSearch').Category]"
    }
}

Le singole proprietà di una ricerca salvata sono descritte nella tabella seguente.Each property of a saved search are described in the following table.

ProprietàProperty DescrizioneDescription
categorycategory Categoria della ricerca salvata.The category for the saved search. Tutte le ricerche salvate nella stessa soluzione condivideranno in genere una singola categoria in modo da essere raggruppate nella console.Any saved searches in the same solution will often share a single category so they are grouped together in the console.
displaynamedisplayname Nome da visualizzare per la ricerca salvata nel portale.Name to display for the saved search in the portal.
queryquery Query da eseguire.Query to run.

Nota

Potrebbe essere necessario usare caratteri di escape, se la query include caratteri che potrebbero essere interpretati come JSON.You may need to use escape characters in the query if it includes characters that could be interpreted as JSON. La query Type:AzureActivity OperationName:"Microsoft.Compute/virtualMachines/write", ad esempio, dovrà essere scritta nel file di soluzione nel modo seguente: Type:AzureActivity OperationName:"Microsoft.Compute/virtualMachines/write".For example, if your query was Type:AzureActivity OperationName:"Microsoft.Compute/virtualMachines/write", it should be written in the solution file as Type:AzureActivity OperationName:"Microsoft.Compute/virtualMachines/write".

AvvisiAlerts

Gli avvisi di Log Analytics vengono creati da regole di avviso che eseguono una ricerca salvata a intervalli regolari.Log Analytics alerts are created by alert rules that run a saved search on a regular interval. Se i risultati della query corrispondono ai criteri specificati, viene creato un record di avviso e vengono eseguite una o più azioni.If the results of the query match specified criteria, an alert record is created and one or more actions are run.

Le regole di avviso in una soluzione di gestione sono costituite dalle tre diverse risorse riportate di seguito.Alert rules in a management solution are made up of the following three different resources.

  • Ricerca salvata.Saved search. Definisce la ricerca log che viene eseguita.Defines the log search that is run. Una singola ricerca salvata può essere condivisa da più regole di avviso.Multiple alert rules can share a single saved search.
  • Pianificazione.Schedule. Definisce la frequenza di esecuzione della ricerca log.Defines how often the log search is run. Ogni regola di avviso ha una sola pianificazione.Each alert rule has one and only one schedule.
  • Azione di avviso.Alert action. Ogni regola di avviso ha una risorsa azione di tipo Alert che definisce i dettagli dell'avviso, come i criteri per la creazione di un record di avviso e la gravità dell'avviso.Each alert rule has one action resource with a type of Alert that defines the details of the alert such as the criteria for when an alert record is created and the alert's severity. La risorsa azione definirà facoltativamente una risposta tramite posta elettronica e runbook.The action resource will optionally define a mail and runbook response.
  • Azione webhook (facoltativa).Webhook action (optional). Se la regola di avviso chiama un webhook, è necessaria una risorsa azione aggiuntiva di tipo Webhook.If the alert rule calls a webhook, then it requires an additional action resource with a type of Webhook.

Le risorse ricerca salvata sono illustrate sopra.Saved search resources are described above. Di seguito sono descritte le altre risorse.The other resources are described below.

Risorsa pianificazioneSchedule resource

Una ricerca salvata può avere una o più pianificazioni, ognuna delle quali rappresenta una regola di avviso separata.A saved search can have one or more schedules with each schedule representing a separate alert rule. La pianificazione definisce la frequenza con cui viene eseguita la ricerca e l'intervallo di tempo per cui vengono recuperati i dati.The schedule defines how often the search is run and the time interval over which the data is retrieved. Le risorse pianificazione sono di tipo Microsoft.OperationalInsights/workspaces/savedSearches/schedules/ e hanno la struttura seguente.Schedule resources have a type of Microsoft.OperationalInsights/workspaces/savedSearches/schedules/ and have the following structure. Nella struttura sono inclusi parametri e variabili comuni ed è quindi possibile copiare e incollare questo frammento di codice nel file della soluzione e, se necessario, modificare i nomi dei parametri.This includes common variables and parameters so that you can copy and paste this code snippet into your solution file and change the parameter names.

{
    "name": "[concat(parameters('workspaceName'), '/', variables('SavedSearch').Name, '/', variables('Schedule').Name)]",
    "type": "Microsoft.OperationalInsights/workspaces/savedSearches/schedules/",
    "apiVersion": "[variables('LogAnalyticsApiVersion')]",
    "dependsOn": [
        "[concat('Microsoft.OperationalInsights/workspaces/', parameters('workspaceName'), '/savedSearches/', variables('SavedSearch').Name)]"
    ],
    "properties": {
        "etag": "*",
        "interval": "[variables('Schedule').Interval]",
        "queryTimeSpan": "[variables('Schedule').TimeSpan]",
        "enabled": "[variables('Schedule').Enabled]"
    }
}

Le proprietà delle risorse pianificazione sono descritte nella tabella seguente.The properties for schedule resources are described in the following table.

Nome dell'elementoElement name ObbligatorioRequired DescrizioneDescription
Enabledenabled Yes Specifica se l'avviso viene abilitato al momento della creazione.Specifies whether the alert is enabled when it's created.
intervalinterval Yes Frequenza, in minuti, con cui viene eseguita la query.How often the query runs in minutes.
queryTimeSpanqueryTimeSpan Yes Periodo di tempo, in minuti, per cui verranno valutati i risultati.Length of time in minutes over which to evaluate results.

La risorsa pianificazione dipenderà dalla ricerca salvata, che verrà quindi creata prima della pianificazione.The schedule resource should depend on the saved search so that it's created before the schedule.

AzioniActions

La proprietà Type specifica due tipi di risorsa azione.There are two types of action resource specified by the Type property. Una pianificazione richiede un'azione Alert che definisce i dettagli della regola di avviso e le azioni da eseguire quando viene creato un avviso.A schedule requires one Alert action which defines the details of the alert rule and what actions are taken when an alert is created. Può includere anche un'azione Webhook, se dall'avviso verrà chiamato un webhook.It may also include a Webhook action if a webhook should be called from the alert.

Le risorse azione sono di tipo Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions.Action resources have a type of Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions.

Azioni di avvisoAlert actions

Ogni pianificazione ha un'azione Alert.Every schedule has one Alert action. che definisce i dettagli dell'avviso e, facoltativamente, le azioni di notifica e correzione.This defines the details of the alert and optionally notification and remediation actions. Una notifica invia un messaggio di posta elettronica a uno o più indirizzi.A notification sends an email to one or more addresses. Una correzione avvia un runbook in Automazione di Azure per provare a risolvere il problema rilevato.A remediation starts a runbook in Azure Automation to attempt to remediate the detected issue.

Le azioni di avviso hanno la struttura seguente.Alert actions have the following structure. Nella struttura sono inclusi parametri e variabili comuni ed è quindi possibile copiare e incollare questo frammento di codice nel file della soluzione e, se necessario, modificare i nomi dei parametri.This includes common variables and parameters so that you can copy and paste this code snippet into your solution file and change the parameter names.

{
    "name": "[concat(parameters('workspaceName'), '/', variables('SavedSearch').Name, '/', variables('Schedule').Name, '/', variables('Alert').Name)]",
    "type": "Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions",
    "apiVersion": "[variables('LogAnalyticsApiVersion')]",
    "dependsOn": [
        "[concat('Microsoft.OperationalInsights/workspaces/', parameters('workspaceName'), '/savedSearches/', variables('SavedSearch').Name, '/schedules/', variables('Schedule').Name)]"
    ],
    "properties": {
        "etag": "*",
        "type": "Alert",
        "name": "[variables('Alert').Name]",
        "description": "[variables('Alert').Description]",
        "severity": "[variables('Alert').Severity]",
        "threshold": {
            "operator": "[variables('Alert').Threshold.Operator]",
            "value": "[variables('Alert').Threshold.Value]",
            "metricsTrigger": {
                "triggerCondition": "[variables('Alert').Threshold.Trigger.Condition]",
                "operator": "[variables('Alert').Trigger.Operator]",
                "value": "[variables('Alert').Trigger.Value]"
            },
        },
        "emailNotification": {
            "recipients": [
                "[variables('Alert').Recipients]"
            ],
            "subject": "[variables('Alert').Subject]"
        },
        "remediation": {
            "runbookName": "[variables('Alert').Remedition.RunbookName]",
            "webhookUri": "[variables('Alert').Remedition.WebhookUri]"
        }
    }
}

Le proprietà delle risorse azione di avviso sono descritte nella tabella seguente.The properties for Alert action resources are described in the following tables.

Nome dell'elementoElement name ObbligatorioRequired DescrizioneDescription
TypeType Yes Tipo di azione.Type of the action. Per le azioni di avviso, il tipo è Alert.This is Alert for alert actions.
NomeName Yes Nome visualizzato per l'avviso.Display name for the alert. È il nome visualizzato nella console per la regola di avviso.This is the name that's displayed in the console for the alert rule.
DescrizioneDescription NoNo Descrizione facoltativa dell'avviso.Optional description of the alert.
SeveritySeverity Yes Gravità del record di avviso tra i valori seguenti:Severity of the alert record from the following values:

CriticalCritical
WarningWarning
InformationalInformational
SogliaThreshold

Questa sezione è obbligatoriaThis section is required. e definisce le proprietà della soglia dell'avviso.It defines the properties for the alert threshold.

Nome dell'elementoElement name ObbligatorioRequired DescrizioneDescription
OperatoreOperator Yes Operatore di confronto tra i valori seguenti:Operator for the comparison from the following values:

gt = maggiore di
lt = minore di
gt = greater than
lt = less than
ValoreValue Yes Valore per il confronto dei risultati.The value to compare the results.
MetricsTriggerMetricsTrigger

Questa sezione è facoltativa.This section is optional. Includere la sezione per un avviso di misurazione delle metriche.Include it for a metric measurement alert.

Nota

Gli avvisi di misurazione delle metriche sono attualmente disponibili in anteprima pubblica.Metric measurement alerts are currently in public preview.

Nome dell'elementoElement name ObbligatorioRequired DescrizioneDescription
TriggerConditionTriggerCondition Yes Specifica se la soglia riguarda il numero totale di violazioni o le violazioni consecutive, con i valori seguenti:Specifies whether the threshold is for total number of breaches or consecutive breaches from the following values:

Total
Consecutive
Total
Consecutive
OperatoreOperator Yes Operatore di confronto tra i valori seguenti:Operator for the comparison from the following values:

gt = maggiore di
lt = minore di
gt = greater than
lt = less than
ValoreValue Yes Numero di volte in cui i criteri devono essere soddisfatti per attivare l'avviso.Number of the times the criteria must be met to trigger the alert.
LimitazioneThrottling

Questa sezione è facoltativa.This section is optional. Includere la sezione se si vogliono eliminare gli avvisi generati dalla stessa regola per un determinato intervallo di tempo dopo la creazione di un avviso.Include this section if you want to suppress alerts from the same rule for some amount of time after an alert is created.

Nome dell'elementoElement name ObbligatorioRequired DescrizioneDescription
DurationInMinutesDurationInMinutes Sì, se è incluso l'elemento ThrottlingYes if Throttling element included Numero di minuti in cui verranno eliminati gli avvisi dopo che ne è stato creato uno dalla stessa regola di avviso.Number of minutes to suppress alerts after one from the same alert rule is created.
EmailNotificationEmailNotification

Questa sezione è facoltativa. Includere la sezione se si vuole inviare un messaggio di posta elettronica a uno o più destinatari.This section is optional Include it if you want the alert to send mail to one or more recipients.

Nome dell'elementoElement name ObbligatorioRequired DescrizioneDescription
DestinatariRecipients Yes Elenco delimitato da virgole di indirizzi di posta elettronica a cui inviare una notifica quando viene creato un avviso, come nell'esempio seguente.Comma-delimited list of email addresses to send notification when an alert is created such as in the following example.

[ "recipient1@contoso.com", "recipient2@contoso.com" ][ "recipient1@contoso.com", "recipient2@contoso.com" ]
OggettoSubject Yes Riga dell'oggetto del messaggio di posta elettronica.Subject line of the mail.
AttachmentAttachment NoNo Gli allegati non sono attualmente supportati.Attachments are not currently supported. Se questo elemento è incluso, il valore dovrà essere None.If this element is included, it should be None.
CorrezioneRemediation

Questa sezione è facoltativa. Includere la sezione se si vuole avviare un runbook in risposta all'avviso.This section is optional Include it if you want a runbook to start in response to the alert. |

Nome dell'elementoElement name ObbligatorioRequired DescrizioneDescription
RunbookNameRunbookName Yes Nome del runbook da avviare.Name of the runbook to start.
WebhookUriWebhookUri Yes URI del webhook per il runbook.Uri of the webhook for the runbook.
ExpiryExpiry NoNo Data e ora di scadenza della correzione.Date and time that the remediation expires.

Azioni webhookWebhook actions

Le azioni webhook avviano un processo chiamando un URL e, facoltativamente, fornendo un payload da inviare.Webhook actions start a process by calling a URL and optionally providing a payload to be sent. Simili alle azioni correttive, sono destinate a webhook che possono richiamare processi diversi dai runbook di Automazione di Azure.They are similar to Remediation actions except they are meant for webhooks that may invoke processes other than Azure Automation runbooks. Hanno inoltre l'opzione aggiuntiva di fornire un payload da recapitare al processo remoto.They also provide the additional option of providing a payload to be delivered to the remote process.

Se l'avviso chiamerà un webhook, sarà necessaria una risorsa azione di tipo Webhook in aggiunta alla risorsa azione Alert.If your alert will call a webhook, then it will need an action resource with a type of Webhook in addition to the Alert action resource.

{
  "name": "name": "[concat(parameters('workspaceName'), '/', variables('SavedSearch').Name, '/', variables('Schedule').Name, '/', variables('Webhook').Name)]",
  "type": "Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions/",
  "apiVersion": "[variables('LogAnalyticsApiVersion')]",
  "dependsOn": [
        "[concat('Microsoft.OperationalInsights/workspaces/', parameters('workspaceName'), '/savedSearches/', variables('SavedSearch').Name, '/schedules/', variables('Schedule').Name)]"
  ],
  "properties": {
    "etag": "*",
    "type": "[variables('Alert').Webhook.Type]",
    "name": "[variables('Alert').Webhook.Name]",
    "webhookUri": "[variables('Alert').Webhook.webhookUri]",
    "customPayload": "[variables('Alert').Webhook.CustomPayLoad]"
  }
}

Le proprietà delle risorse azione webhook sono descritte nella tabella seguente.The properties for Webhook action resources are described in the following tables.

Nome dell'elementoElement name ObbligatorioRequired DescrizioneDescription
typetype Yes Tipo di azione.Type of the action. Per le azioni webhook, il tipo è Webhook.This is Webhook for webhook actions.
namename Yes Nome visualizzato per l'azione.Display name for the action. Non viene visualizzato nella console.This is not displayed in the console.
wehookUriwehookUri Yes URI del webhook.Uri for the webhook.
customPayloadcustomPayload NoNo Payload personalizzato da inviare al webhook.Custom payload to be sent to the webhook. Il formato dipende da ciò che il webhook si aspetta.The format depends on what the webhook is expecting.

EsempioSample

Di seguito è riportato un esempio di soluzione che include le risorse seguenti:Following is a sample of a solution that includes that includes the following resources:

  • Ricerca salvataSaved search
  • PianificazioneSchedule
  • Azione di avvisoAlert action
  • Azione webhookWebhook action

L'esempio usa variabili dei parametri di soluzione standard comunemente usate in una soluzione, anziché impostare i valori come hardcoded nelle definizioni delle risorse.The sample uses standard solution parameters variables that would commonly be used in a solution as opposed to hardcoding values in the resource definitions.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0",
    "parameters": {
      "workspaceName": {
        "type": "string",
        "metadata": {
          "Description": "Name of Log Analytics workspace"
        }
      },
      "accountName": {
        "type": "string",
        "metadata": {
          "Description": "Name of Automation account"
        }
      },
      "workspaceregionId": {
        "type": "string",
        "metadata": {
          "Description": "Region of Log Analytics workspace"
        }
      },
      "regionId": {
        "type": "string",
        "metadata": {
          "Description": "Region of Automation account"
        }
      },
      "pricingTier": {
        "type": "string",
        "metadata": {
          "Description": "Pricing tier of both Log Analytics workspace and Azure Automation account"
        }
      },
      "recipients": {
        "type": "string",
        "metadata": {
          "Description": "List of recipients for the email alert separated by semicolon"
        }
      }
    },
    "variables": {
      "SolutionName": "MySolution",
      "SolutionVersion": "1.0",
      "SolutionPublisher": "Contoso",
      "ProductName": "SampleSolution",

      "LogAnalyticsApiVersion": "2015-11-01-preview",

      "MySearch": {
        "displayName": "Error records by hour",
        "query": "Type=MyRecord_CL | measure avg(Rating_d) by Instance_s interval 60minutes",
        "category": "Samples",
        "name": "Samples-Count of data"
      },
      "MyAlert": {
        "Name": "[toLower(concat('myalert-',uniqueString(resourceGroup().id, deployment().name)))]",
        "DisplayName": "My alert rule",
        "Description": "Sample alert.  Fires when 3 error records found over hour interval.",
        "Severity": "Critical",
        "ThresholdOperator": "gt",
        "ThresholdValue": 3,
        "Schedule": {
          "Name": "[toLower(concat('myschedule-',uniqueString(resourceGroup().id, deployment().name)))]",
          "Interval": 15,
          "TimeSpan": 60
        },
        "MetricsTrigger": {
          "TriggerCondition": "Consecutive",
          "Operator": "gt",
          "Value": 3
        },
        "ThrottleMinutes": 60,
        "Notification": {
          "Recipients": [
            "[parameters('recipients')]"
          ],
          "Subject": "Sample alert"
        },
        "Remediation": {
          "RunbookName": "MyRemediationRunbook",
          "WebhookUri": "https://s1events.azure-automation.net/webhooks?token=TluBFH3GpX4IEAnFoImoAWLTULkjD%2bTS0yscyrr7ogw%3d"
        },
        "Webhook": {
          "Name": "MyWebhook",
          "Uri": "https://MyService.com/webhook",
          "Payload": "{\"field1\":\"value1\",\"field2\":\"value2\"}"
        }
      }
    },
    "resources": [
      {
        "name": "[concat(variables('SolutionName'), '[' ,parameters('workspacename'), ']')]",
        "location": "[parameters('workspaceRegionId')]",
        "tags": { },
        "type": "Microsoft.OperationsManagement/solutions",
        "apiVersion": "[variables('LogAnalyticsApiVersion')]",
        "dependsOn": [
          "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspacename'), variables('MySearch').Name)]",
          "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches/schedules', parameters('workspacename'), variables('MySearch').Name, variables('MyAlert').Schedule.Name)]",
          "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions', parameters('workspacename'), variables('MySearch').Name, variables('MyAlert').Schedule.Name, variables('MyAlert').Name)]",
          "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions', parameters('workspacename'), variables('MySearch').Name, variables('MyAlert').Schedule.Name, variables('MyAlert').Webhook.Name)]"
        ],
        "properties": {
          "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspacename'))]",
          "referencedResources": [
          ],
          "containedResources": [
            "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspacename'), variables('MySearch').Name)]",
            "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches/schedules', parameters('workspacename'), variables('MySearch').Name, variables('MyAlert').Schedule.Name)]",
            "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions', parameters('workspacename'), variables('MySearch').Name, variables('MyAlert').Schedule.Name, variables('MyAlert').Name)]",
            "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions', parameters('workspacename'), variables('MySearch').Name, variables('MyAlert').Schedule.Name, variables('MyAlert').Webhook.Name)]"
          ]
        },
        "plan": {
          "name": "[concat(variables('SolutionName'), '[' ,parameters('workspaceName'), ']')]",
          "Version": "[variables('SolutionVersion')]",
          "product": "[variables('ProductName')]",
          "publisher": "[variables('SolutionPublisher')]",
          "promotionCode": ""
        }
      },
      {
        "name": "[concat(parameters('workspaceName'), '/', variables('MySearch').Name)]",
        "type": "Microsoft.OperationalInsights/workspaces/savedSearches",
        "apiVersion": "[variables('LogAnalyticsApiVersion')]",
        "dependsOn": [ ],
        "tags": { },
        "properties": {
          "etag": "*",
          "query": "[variables('MySearch').query]",
          "displayName": "[variables('MySearch').displayName]",
          "category": "[variables('MySearch').category]"
        }
      },
      {
        "name": "[concat(parameters('workspaceName'), '/', variables('MySearch').Name, '/', variables('MyAlert').Schedule.Name)]",
        "type": "Microsoft.OperationalInsights/workspaces/savedSearches/schedules/",
        "apiVersion": "[variables('LogAnalyticsApiVersion')]",
        "dependsOn": [
          "[concat('Microsoft.OperationalInsights/workspaces/', parameters('workspaceName'), '/savedSearches/', variables('MySearch').Name)]"
        ],
        "properties": {
          "etag": "*",
          "interval": "[variables('MyAlert').Schedule.Interval]",
          "queryTimeSpan": "[variables('MyAlert').Schedule.TimeSpan]",
          "enabled": true
        }
      },
      {
        "name": "[concat(parameters('workspaceName'), '/', variables('MySearch').Name, '/',  variables('MyAlert').Schedule.Name, '/',  variables('MyAlert').Name)]",
        "type": "Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions",
        "apiVersion": "[variables('LogAnalyticsApiVersion')]",
        "dependsOn": [
          "[concat('Microsoft.OperationalInsights/workspaces/', parameters('workspaceName'), '/savedSearches/',  variables('MySearch').Name, '/schedules/', variables('MyAlert').Schedule.Name)]"
        ],
        "properties": {
          "etag": "*",
          "Type": "Alert",
          "Name": "[variables('MyAlert').DisplayName]",
          "Description": "[variables('MyAlert').Description]",
          "Severity": "[variables('MyAlert').Severity]",
          "Threshold": {
            "Operator": "[variables('MyAlert').ThresholdOperator]",
            "Value": "[variables('MyAlert').ThresholdValue]",
            "MetricsTrigger": {
              "TriggerCondition": "[variables('MyAlert').MetricsTrigger.TriggerCondition]",
              "Operator": "[variables('MyAlert').MetricsTrigger.Operator]",
              "Value": "[variables('MyAlert').MetricsTrigger.Value]"
            }
          },
          "Throttling": {
            "DurationInMinutes": "[variables('MyAlert').ThrottleMinutes]"
          },
          "EmailNotification": {
            "Recipients": "[variables('MyAlert').Notification.Recipients]",
            "Subject": "[variables('MyAlert').Notification.Subject]",
            "Attachment": "None"
          },
          "Remediation": {
            "RunbookName": "[variables('MyAlert').Remediation.RunbookName]",
            "WebhookUri": "[variables('MyAlert').Remediation.WebhookUri]"
          }
        }
      },
      {
        "name": "[concat(parameters('workspaceName'), '/', variables('MySearch').Name, '/', variables('MyAlert').Schedule.Name, '/', variables('MyAlert').Webhook.Name)]",
        "type": "Microsoft.OperationalInsights/workspaces/savedSearches/schedules/actions",
        "apiVersion": "[variables('LogAnalyticsApiVersion')]",
        "dependsOn": [
          "[concat('Microsoft.OperationalInsights/workspaces/', parameters('workspaceName'), '/savedSearches/', variables('MySearch').Name, '/schedules/', variables('MyAlert').Schedule.Name)]",
          "[concat('Microsoft.OperationalInsights/workspaces/', parameters('workspaceName'), '/savedSearches/', variables('MySearch').Name, '/schedules/', variables('MyAlert').Schedule.Name, '/actions/',variables('MyAlert').Name)]"
        ],
        "properties": {
          "etag": "*",
          "Type": "Webhook",
          "Name": "[variables('MyAlert').Webhook.Name]",
          "WebhookUri": "[variables('MyAlert').Webhook.Uri]",
          "CustomPayload": "[variables('MyAlert').Webhook.Payload]"
        }
      }
    ]
}

Il file di parametri seguente offre valori di esempio per la soluzione.The following parameter file provides samples values for this solution.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "workspacename": {
            "value": "myWorkspace"
        },
        "accountName": {
            "value": "myAccount"
        },
        "workspaceregionId": {
            "value": "East US"
        },
        "regionId": {
            "value": "East US 2"
        },
        "pricingTier": {
            "value": "Free"
        },
        "recipients": {
            "value": "recipient1@contoso.com;recipient2@contoso.com"
        }
    }
}

Passaggi successiviNext steps