إنشاء مساحة عمل "تحليلات السجل" وتكوينها في Azure Monitor باستخدام PowerShell
توفر هذه المقالة عينتين للتعليمات البرمجية التي تظهر كيفية إنشاء مساحة عمل "تحليلات سجل" وتكوينها في Azure Monitor.
ملاحظة
كان يسمى سابقًا Log Analytics بالرؤى التشغيلية، وهذا هو السبب في أنه هو الاسم المستخدم في cmdlets.
المتطلبات الأساسية
تعمل هذه الأمثلة مع الإصدار 1.0.0 أو أحدث من الوحدة النمطية Az.OperationalInsights.
إنشاء مساحة عمل
البرنامج النصي التالي للعينة ينشئ مساحة عمل بدون أي تكوين مصدر بيانات.
$ResourceGroup = "my-resource-group"
$WorkspaceName = "log-analytics-" + (Get-Random -Maximum 99999) # workspace names need to be unique in resource group - Get-Random helps with this for the example code
$Location = "westeurope"
# Create the resource group if needed
try {
Get-AzResourceGroup -Name $ResourceGroup -ErrorAction Stop
} catch {
New-AzResourceGroup -Name $ResourceGroup -Location $Location
}
# Create the workspace
New-AzOperationalInsightsWorkspace -Location $Location -Name $WorkspaceName -Sku PerGB2018 -ResourceGroupName $ResourceGroup
إنشاء مساحة عمل وتكوين مصادر البيانات
نموذج البرنامج النصي التالي للعينة ينشئ مساحة عمل وتكوين مصادر بيانات متعددة. مصادر البيانات هذه مطلوبة فقط إذا كنت تراقب الأجهزة الظاهرية باستخدام عامل Log Analytics. تحتوي مساحة العمل على معرف مساحة عمل فريد ومعرف مورد. يمكنك إعادة استخدام نفس اسم مساحة العمل عندما تكون في مجموعات موارد مختلفة.
ينفذ البرنامج النصي الوظائف التالية:
- إنشاء مساحة عمل
- عرض الحلول المتاحة
- إضافة حلول إلى مساحة العمل
- استيراد عمليات البحث المحفوظة
- تصدير عمليات البحث المحفوظة
- إنشاء مجموعة كمبيوتر
- تمكين مجموعة سجلات IIS من أجهزة الكمبيوتر باستخدام عامل Windows المثبت
- عدّادات أداء القرص المنطقي من أجهزة الكمبيوتر Linux (٪ Inodes المستخدم؛ ميغابايت مجانية؛ ٪ المساحة المستخدمة؛ عمليات نقل/الثانية للقرص؛ قراءات/ثانية للقرص؛ كتابات/ثانية للكتابة)
- جمع أحداث syslog من أجهزة الكمبيوتر Linux
- تجميع أحداث الخطأ والتحذير من سجل أحداث التطبيق من أجهزة الكمبيوتر Windows
- جمع عداد أداء "الذاكرة المتوفرة بالميجابايت" من أجهزة الكمبيوتر Windows
- جمع سجل مخصص
$ResourceGroup = "my-resource-group"
$WorkspaceName = "log-analytics-" + (Get-Random -Maximum 99999) # workspace names need to be unique in resource group - Get-Random helps with this for the example code
$Location = "westeurope"
# Create the resource group if needed
try {
Get-AzResourceGroup -Name $ResourceGroup -ErrorAction Stop
} catch {
New-AzResourceGroup -Name $ResourceGroup -Location $Location
}
# Create the workspace
New-AzOperationalInsightsWorkspace -Location $Location -Name $WorkspaceName -Sku PerGB2018 -ResourceGroupName $ResourceGroup
# 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": 'Perf | where ObjectName == "LogicalDisk" and CounterName == "Current Disk Queue Length" and InstanceName == "C:"',
"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-AzResourceGroup -Name $ResourceGroup -ErrorAction Stop
} catch {
New-AzResourceGroup -Name $ResourceGroup -Location $Location
}
# List all solutions and their installation status
Get-AzOperationalInsightsIntelligencePack -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName
# Add solutions
foreach ($solution in $Solutions) {
Set-AzOperationalInsightsIntelligencePack -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -IntelligencePackName $solution -Enabled $true
}
# List enabled solutions
(Get-AzOperationalInsightsIntelligencePack -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName).Where({($_.enabled -eq $true)})
# Import Saved Searches
foreach ($search in $ExportedSearches) {
$id = $search.Category + "|" + $search.DisplayName
New-AzOperationalInsightsSavedSearch -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -SavedSearchId $id -DisplayName $search.DisplayName -Category $search.Category -Query $search.Query -Version $search.Version
}
# Export Saved Searches
(Get-AzOperationalInsightsSavedSearch -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName).Value.Properties | ConvertTo-Json
# Create Computer Group based on a query
New-AzOperationalInsightsComputerGroup -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -SavedSearchId "My Web Servers" -DisplayName "Web Servers" -Category "My Saved Searches" -Query "Computer=""web*"" | distinct Computer" -Version 1
# Enable IIS Log Collection using agent
Enable-AzOperationalInsightsIISLogCollection -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName
# Linux Perf
New-AzOperationalInsightsLinuxPerformanceObjectDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -ObjectName "Logical Disk" -InstanceName "*" -CounterNames @("% Used Inodes", "Free Megabytes", "% Used Space", "Disk Transfers/sec", "Disk Reads/sec", "Disk Writes/sec") -IntervalSeconds 20 -Name "Example Linux Disk Performance Counters"
Enable-AzOperationalInsightsLinuxPerformanceCollection -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName
# Linux Syslog
New-AzOperationalInsightsLinuxSyslogDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -Facility "kern" -CollectEmergency -CollectAlert -CollectCritical -CollectError -CollectWarning -Name "Example kernel syslog collection"
Enable-AzOperationalInsightsLinuxSyslogCollection -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName
# Windows Event
New-AzOperationalInsightsWindowsEventDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -EventLogName "Application" -CollectErrors -CollectWarnings -Name "Example Application Event Log"
# Windows Perf
New-AzOperationalInsightsWindowsPerformanceCounterDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -ObjectName "Memory" -InstanceName "*" -CounterName "Available MBytes" -IntervalSeconds 20 -Name "Example Windows Performance Counter"
# Custom Logs
New-AzOperationalInsightsCustomLogDataSource -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName -CustomLogRawJson "$CustomLog" -Name "Example Custom Log Collection"
ملاحظة
يمكن أن يكون تنسيق المعلمة CustomLogRawJson يحدد التكوين لسجل مخصص معقدًا. استخدام Get-AzOperationalInsightsDataSource لاسترداد التكوين لسجل مخصص موجود. خاصية Properties هو التكوين المطلوب للمعلمة CustomLogRawJson.
في المثال أعلاه ، تم تعريف regexDelimiter على أنه "\n" للسطر الجديد. قد يكون محدد السجل أيضًا طابع زمني. هذه هي التنسيقات المدعومة:
| تنسيق | تنسيق Json RegEx يستخدم اثني من \\ لكل \ في RegEx القياسي حتى إذا كان الاختبار في تطبيق RegEx يقلل \\ إلى \ |
|---|---|
YYYY-MM-DD HH:MM:SS |
((\\d{2})|(\\d{4}))-([0-1]\\d)-(([0-3]\\d)|(\\d))\\s((\\d)|([0-1]\\d)|(2[0-4])):[0-5][0-9]:[0-5][0-9] |
M/D/YYYY HH:MM:SS AM/PM |
(([0-1]\\d)|[0-9])/(([0-3]\\d)|(\\d))/((\\d{2})|(\\d{4}))\\s((\\d)|([0-1]\\d)|(2[0-4])):[0-5][0-9]:[0-5][0-9]\\s(AM|PM|am|pm) |
dd/MMM/yyyy HH:MM:SS |
(([0-2][1-9]|[3][0-1])\\/(Jan|Feb|Mar|May|Apr|Jul|Jun|Aug|Oct|Sep|Nov|Dec|jan|feb|mar|may|apr|jul|jun|aug|oct|sep|nov|dec)\\/((19|20)[0-9][0-9]))\\s((\\d)|([0-1]\\d)|(2[0-4])):[0-5][0-9]:[0-5][0-9]) |
MMM dd yyyy HH:MM:SS |
(((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)).*?((?:(?:[0-2]?\\d{1})|(?:[3][01]{1})))(?![\\d]).*?((?:(?:[1]{1}\\d{1}\\d{1}\\d{1})|(?:[2]{1}\\d{3})))(?![\\d]).*?((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\\s?(?:am|AM|pm|PM))?)) |
yyMMdd HH:mm:ss |
([0-9]{2}([0][1-9]|[1][0-2])([0-2][0-9]|[3][0-1])\\s\\s?([0-1]?[0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9]) |
ddMMyy HH:mm:ss |
(([0-2][0-9]|[3][0-1])([0][1-9]|[1][0-2])[0-9]{2}\\s\\s?([0-1]?[0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9]) |
MMM d HH:mm:ss |
(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s\\s?([0]?[1-9]|[1-2][0-9]|[3][0-1])\\s([0-1]?[0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9]) |
MMM d HH:mm:ss مساحتان بعد MMM |
(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s\\s([0]?[1-9]|[1-2][0-9]|[3][0-1])\\s([0][0-9]|[1][0-2]):([0-5][0-9]):([0-5][0-9]) |
MMM d HH:mm:ss |
(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s([0]?[1-9]|[1-2][0-9]|[3][0-1])\\s([0][0-9]|[1][0-2]):([0-5][0-9]):([0-5][0-9]) |
dd/MMM/yyyy:HH:mm:ss +zzzz أين + هي + أو - إزاحة وقت zzzz لأين |
(([0-2][1-9]|[3][0-1])\\/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\/((19|20)[0-9][0-9]):([0][0-9]|[1][0-2]):([0-5][0-9]):([0-5][0-9])\\s[\\+|\\-][0-9]{4}) |
yyyy-MM-ddTHH:mm:ss T قيمة حرفية لـ T |
((\\d{2})|(\\d{4}))-([0-1]\\d)-(([0-3]\\d)|(\\d))T((\\d)|([0-1]\\d)|(2[0-4])):[0-5][0-9]:[0-5][0-9] |
استكشاف الأخطاء وإصلاحها
عند إنشاء مساحة عمل تم حذفها في آخر 14 يوماً وكانت في حالة الحذف المبدئي، قد يكون للعملية نتيجة مختلفة استناداً إلى تكوين مساحة العمل:
- إذا قمت بتوفير نفس اسم مساحة العمل ومجموعة الموارد والاشتراك والمنطقة كما في مساحة العمل المحذوفة، فسيتم استرداد مساحة العمل بما في ذلك البيانات والتكوين والعوامل المتصلة لها.
- يجب أن يكون اسم مساحة العمل فريدًا لكل مجموعة موارد. إذا كنت تستخدم اسم مساحة عمل موجود بالفعل، وكانت أيضاً في حالة الحذف المبدئي في مجموعة الموارد، فستتعرض للخطأ اسم مساحة العمل 'workspace-name' ليس فريداً أو يتعارض مع اسم آخر. لتجاوز الحذف المبدئي وحذف مساحة العمل بشكل دائم وإنشاء مساحة عمل جديدة بنفس الاسم، اتبع الخطوات التالية لاسترداد مساحة العمل أولا ثم إجراء الحذف الدائم:
- استرداد مساحة العمل
- الحذف الدائم لمساحة العمل
- إنشاء مساحة عمل جديدة باستخدام نفس اسم مساحة العمل
الخطوات التالية
- مراجعة PowerShell cmdlets لـ Log Analytics للحصول على معلومات إضافية حول استخدام PowerShell لتكوين Log Analytics.