Gestire Log Analytics con PowerShellManage Log Analytics using PowerShell

È possibile usare i cmdlet di PowerShell per Log Analytics per eseguire varie funzioni in Log Analytics dalla riga di comando o nell'ambito di uno script.You can use the Log Analytics PowerShell cmdlets to perform various functions in Log Analytics from a command line or as part of a script. Esempi di attività che è possibile eseguire con PowerShell:Examples of the tasks you can perform with PowerShell include:

  • Creare un'area di lavoroCreate a workspace
  • Aggiungere o rimuovere una soluzioneAdd or remove a solution
  • Importare ed esportare ricerche salvateImport and export saved searches
  • Creare un gruppo di computerCreate a computer group
  • Abilitare la raccolta dei log IIS dai computer su cui è stato installato l'agente di WindowsEnable collection of IIS logs from computers with the Windows agent installed
  • Raccogliere i contatori delle prestazioni dai computer Linux e WindowsCollect performance counters from Linux and Windows computers
  • Raccogliere gli eventi dal syslog sui computer LinuxCollect events from syslog on Linux computers
  • Raccogliere gli eventi dai log eventi di WindowsCollect events from Windows event logs
  • Raccogliere i log eventi personalizzatiCollect custom event logs
  • Aggiungere l'agente Log Analytics a una macchina virtuale di AzureAdd the log analytics agent to an Azure virtual machine
  • Configurare Log Analytics per indicizzare i dati raccolti tramite Diagnostica di AzureConfigure log analytics to index data collected using Azure diagnostics

Questo articolo presenta due codici di esempio con cui vengono illustrate alcune delle funzioni che è possibile eseguire da PowerShell.This article provides two code samples that illustrate some of the functions that you can perform from PowerShell. Per altre funzioni, è possibile fare riferimento all'articolo sui cmdlet di PowerShell per Log Analytics .You can refer to the Log Analytics PowerShell cmdlet reference for other functions.

Nota

In precedenza Log Analytics veniva chiamato Operational Insight, motivo per cui nei cmdlet viene usato questo nome.Log Analytics was previously called Operational Insights, which is why it is the name used in the cmdlets.

PrerequisitiPrerequisites

Questi esempi funzionano con la versione 2.3.0 o successive del modulo AzureRm.OperationalInsights.These examples work with version 2.3.0 or later of the AzureRm.OperationalInsights module.

Creare e configurare un'area di lavoro di Log AnalyticsCreate and configure a Log Analytics Workspace

Lo script di esempio seguente illustra come:The following script sample illustrates how to:

  1. Creare un'area di lavoroCreate a workspace
  2. Elencare le soluzioni disponibiliList the available solutions
  3. Aggiungere soluzioni all'area di lavoroAdd solutions to the workspace
  4. Importare le ricerche salvateImport saved searches
  5. Esportare le ricerche salvateExport saved searches
  6. Creare un gruppo di computerCreate a computer group
  7. Abilitare la raccolta dei log IIS dai computer su cui è stato installato l'agente di WindowsEnable collection of IIS logs from computers with the Windows agent installed
  8. Raccogliere i dati dei contatori delle prestazioni del disco logico dai computer Linux (% inodi usati; megabyte liberi; % di spazio usato; trasferimenti/sec del disco; letture/sec del disco; scritture/sec del disco)Collect Logical Disk perf counters from Linux computers (% Used Inodes; Free Megabytes; % Used Space; Disk Transfers/sec; Disk Reads/sec; Disk Writes/sec)
  9. Raccogliere gli eventi syslog dai computer LinuxCollect syslog events from Linux computers
  10. Raccogliere gli eventi di errore e di avviso dal log eventi dell'applicazione dai computer WindowsCollect Error and Warning events from the Application Event Log from Windows computers
  11. Raccogliere i dati del contatore delle prestazioni dei Mbyte di memoria disponibili dai computer WindowsCollect Memory Available Mbytes performance counter from Windows computers
  12. Raccogliere i dati di un log personalizzatoCollect a custom log

$ResourceGroup = "oms-example"
$WorkspaceName = "log-analytics-" + (Get-Random -Maximum 99999) # workspace names need to be unique - Get-Random helps with this for the example code
$Location = "westeurope"

# List of solutions to enable
$Solutions = "Security", "Updates", "SQLAssessment"

# Saved Searches to import
$ExportedSearches = @"
[
    {
        "Category":  "My Saved Searches",
        "DisplayName":  "WAD Events (All)",
        "Query":  "Type=Event SourceSystem:AzureStorage ",
        "Version":  1
    },
    {        
        "Category":  "My Saved Searches",
        "DisplayName":  "Current Disk Queue Length",
        "Query":  "Type=Perf ObjectName=LogicalDisk InstanceName=\"C:\" CounterName=\"Current Disk Queue Length\"",
        "Version":  1
    }
]
"@ | ConvertFrom-Json

# Custom Log to collect
$CustomLog = @"
{
    "customLogName": "sampleCustomLog1", 
    "description": "Example custom log datasource", 
    "inputs": [
        { 
            "location": { 
            "fileSystemLocations": { 
                "windowsFileTypeLogPaths": [ "e:\\iis5\\*.log" ], 
                "linuxFileTypeLogPaths": [ "/var/logs" ] 
                } 
            }, 
        "recordDelimiter": { 
            "regexDelimiter": { 
                "pattern": "\\n", 
                "matchIndex": 0, 
                "matchIndexSpecified": true, 
                "numberedGroup": null 
                } 
            } 
        }
    ], 
    "extractions": [
        { 
            "extractionName": "TimeGenerated", 
            "extractionType": "DateTime", 
            "extractionProperties": { 
                "dateTimeExtraction": { 
                    "regex": null, 
                    "joinStringRegex": null 
                    } 
                } 
            }
        ] 
    }
"@

# Create the resource group if needed
try {
    Get-AzureRmResourceGroup -Name $ResourceGroup -ErrorAction Stop
} catch {
    New-AzureRmResourceGroup -Name $ResourceGroup -Location $Location
}

# Create the workspace
New-AzureRmOperationalInsightsWorkspace -Location $Location -Name $WorkspaceName -Sku Standard -ResourceGroupName $ResourceGroup

# List all solutions and their installation status
Get-AzureRmOperationalInsightsIntelligencePacks -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName

# Add solutions
foreach ($solution in $Solutions) {
    Set-AzureRmOperationalInsightsIntelligencePack -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -IntelligencePackName $solution -Enabled $true
}

#List enabled solutions
(Get-AzureRmOperationalInsightsIntelligencePacks -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName).Where({($_.enabled -eq $true)})

# Import Saved Searches
foreach ($search in $ExportedSearches) {
    $id = $search.Category + "|" + $search.DisplayName
    New-AzureRmOperationalInsightsSavedSearch -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -SavedSearchId $id -DisplayName $search.DisplayName -Category $search.Category -Query $search.Query -Version $search.Version
}

# Export Saved Searches
(Get-AzureRmOperationalInsightsSavedSearch -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName).Value.Properties | ConvertTo-Json 

# Create Computer Group based on a query
New-AzureRmOperationalInsightsComputerGroup -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -SavedSearchId "My Web Servers" -DisplayName "Web Servers" -Category "My Saved Searches" -Query "Computer=""web*"" | distinct Computer" -Version 1

# Create a computer group based on names (up to 5000)
$computerGroup = """servername1.contoso.com"",""servername2.contoso.com"",""servername3.contoso.com"",""servername4.contoso.com"""
New-AzureRmOperationalInsightsComputerGroup -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -SavedSearchId "My Named Servers" -DisplayName "Named Servers" -Category "My Saved Searches" -Query $computerGroup -Version 1

# Enable IIS Log Collection using agent
Enable-AzureRmOperationalInsightsIISLogCollection -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName

# Linux Perf
New-AzureRmOperationalInsightsLinuxPerformanceObjectDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -ObjectName "Logical Disk" -InstanceName "*"  -CounterNames @("% Used Inodes", "Free Megabytes", "% Used Space", "Disk Transfers/sec", "Disk Reads/sec", "Disk Reads/sec", "Disk Writes/sec") -IntervalSeconds 20  -Name "Example Linux Disk Performance Counters"
Enable-AzureRmOperationalInsightsLinuxCustomLogCollection -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName

# Linux Syslog
New-AzureRmOperationalInsightsLinuxSyslogDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -Facility "kern" -CollectEmergency -CollectAlert -CollectCritical -CollectError -CollectWarning -Name "Example kernal syslog collection"
Enable-AzureRmOperationalInsightsLinuxSyslogCollection -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName

# Windows Event
New-AzureRmOperationalInsightsWindowsEventDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -EventLogName "Application" -CollectErrors -CollectWarnings -Name "Example Application Event Log"

# Windows Perf
New-AzureRmOperationalInsightsWindowsPerformanceCounterDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -ObjectName "Memory" -InstanceName "*" -CounterName "Available MBytes" -IntervalSeconds 20 -Name "Example Windows Performance Counter"

# Custom Logs
New-AzureRmOperationalInsightsCustomLogDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -CustomLogRawJson "$CustomLog" -Name "Example Custom Log Collection"

Configurazione di Log Analytics per indicizzare Diagnostica di AzureConfiguring Log Analytics to index Azure diagnostics

Per il monitoraggio senza agenti delle risorse di Azure, in queste ultime la diagnostica di Azure deve essere abilitata e configurata per la scrittura in un'area di lavoro di Log Analytics.For agentless monitoring of Azure resources, the resources need to have Azure diagnostics enabled and configured to write to a Log Analytics workspace. Questo approccio permette di inviare i dati direttamente a Log Analytics e non ne richiede la scrittura in un account di archiviazione.This approach sends data directly to Log Analytics and does not require data to be written to a storage account. Le risorse supportate includono:Supported resources include:

Tipo di risorsaResource Type LogLogs MetricaMetrics
Gateway applicazioneApplication Gateways Yes Yes
Account di AutomazioneAutomation accounts Yes
Account BatchBatch accounts Yes Yes
Data Lake AnalyticsData Lake analytics Yes
Data Lake StoreData Lake store Yes
Pool SQL elasticoElastic SQL Pool Yes
Spazio dei nomi dell'hub eventiEvent Hub namespace Yes
Hub IoTIoT Hubs Yes
Insieme di credenziali di chiaveKey Vault Yes
Servizi di bilanciamento del caricoLoad Balancers Yes
App per la logicaLogic Apps Yes Yes
Gruppi di sicurezza di reteNetwork Security Groups Yes
Cache RedisRedis Cache Yes
Servizi di ricercaSearch services Yes Yes
Spazio dei nomi del bus di servizioService Bus namespace Yes
SQL (versione 12)SQL (v12) Yes
Microsoft AzureWeb Sites Yes
Server farm WebWeb Server farms Yes

Per informazioni dettagliate sulle metriche disponibili, vedere Metriche supportate con il monitoraggio di Azure.For the details of the available metrics, refer to supported metrics with Azure Monitor.

Per informazioni dettagliate sui registri disponibili, vedere Servizi supportati e schema per i log di diagnostica.For the details of the available logs, refer to supported services and schema for diagnostic logs.

$workspaceId = "/subscriptions/d2e37fee-1234-40b2-5678-0b2199de3b50/resourcegroups/oi-default-east-us/providers/microsoft.operationalinsights/workspaces/rollingbaskets"

$resourceId = "/SUBSCRIPTIONS/ec11ca60-1234-491e-5678-0ea07feae25c/RESOURCEGROUPS/DEMO/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/DEMO" 

Set-AzureRmDiagnosticSetting -ResourceId $resourceId -WorkspaceId $workspaceId -Enabled $true

Il cmdlet precedente può essere usato anche per la raccolta di log da risorse presenti in sottoscrizioni diverse.You can also use the preceding cmdlet to collect logs from resources that are in different subscriptions. Il funzionamento del cmdlet in sottoscrizioni diverse è possibile perché vengono specificati sia l'ID della risorsa che crea i log sia l'area di lavoro a cui questi vengono inviati.The cmdlet is able to work across subscriptions since you are providing the id of both the resource creating logs and the workspace the logs are sent to.

Configurazione di Log Analytics per indicizzare la diagnostica di Azure dall'ArchiviazioneConfiguring Log Analytics to index Azure diagnostics from storage

Per raccogliere dati di log dall'interno di un'istanza in esecuzione di un servizio cloud classico o di un cluster di Service Fabric, è necessario prima scrivere i dati in Archiviazione di Azure.To collect log data from within a running instance of a classic cloud service or a service fabric cluster, you need to first write the data to Azure storage. Log Analytics viene quindi configurato per la raccolta dei log dall'account di archiviazione.Log Analytics is then configured to collect the logs from the storage account. Le risorse supportate includono:Supported resources include:

  • Servizi cloud classici (ruoli di lavoro e Web)Classic cloud services (web and worker roles)
  • Cluster di Service FabricService fabric clusters

L'esempio seguente illustra come:The following example shows how to:

  1. Elencare gli account di archiviazione esistenti e i percorsi da cui Log Analytics eseguirà l'indicizzazione dei datiList the existing storage accounts and locations that Log Analytics will index data from
  2. Creare una configurazione che possa essere letta da un account di archiviazioneCreate a configuration to read from a storage account
  3. Aggiornare la configurazione appena creata in modo da poter indicizzare i dati anche da altri percorsiUpdate the newly created configuration to index data from additional locations
  4. Eliminare la configurazione appena creataDelete the newly created configuration
# validTables = "WADWindowsEventLogsTable", "LinuxsyslogVer2v0", "WADServiceFabric*EventTable", "WADETWEventTable" 
$workspace = (Get-AzureRmOperationalInsightsWorkspace).Where({$_.Name -eq "your workspace name"})

# Update these two lines with the storage account resource ID and the storage account key for the storage account you want to Log Analytics to  
$storageId = "/subscriptions/ec11ca60-1234-491e-5678-0ea07feae25c/resourceGroups/demo/providers/Microsoft.Storage/storageAccounts/wadv2storage"
$key = "abcd=="

# List existing insights
Get-AzureRmOperationalInsightsStorageInsight -ResourceGroupName $workspace.ResourceGroupName -WorkspaceName $workspace.Name

# Create a new insight
New-AzureRmOperationalInsightsStorageInsight -ResourceGroupName $workspace.ResourceGroupName -WorkspaceName $workspace.Name -Name "newinsight" -StorageAccountResourceId $storageId -StorageAccountKey $key -Tables @("WADWindowsEventLogsTable") -Containers @("wad-iis-logfiles")

# Update existing insight
Set-AzureRmOperationalInsightsStorageInsight -ResourceGroupName $workspace.ResourceGroupName -WorkspaceName $workspace.Name -Name "newinsight" -Tables @("WADWindowsEventLogsTable", "WADETWEventTable") -Containers @("wad-iis-logfiles")

# Remove the insight
Remove-AzureRmOperationalInsightsStorageInsight -ResourceGroupName $workspace.ResourceGroupName -WorkspaceName $workspace.Name -Name "newinsight" 

Lo script precedente può essere usato anche per la raccolta di log da account di archiviazione presenti in sottoscrizioni diverse.You can also use the preceding script to collect logs from storage accounts in different subscriptions. Il funzionamento dello script in sottoscrizioni diverse è possibile perché vengono specificati sia l'ID risorsa dell'account di archiviazione che la chiave di accesso corrispondente.The script is able to work across subscriptions since you are providing the storage account resource id and a corresponding access key. Quando si modifica la chiave di accesso, è necessario aggiornare le informazioni di archiviazione con la nuova chiave.When you change the access key, you need to update the storage insight to have the new key.

Passaggi successiviNext steps