Поделиться через


Руководство. Изменение правила сбора данных (DCR)

В этом руководстве описывается изменение определения правил сбора данных (DCR), которые уже подготовлены с помощью средств командной строки.

В этом руководстве описано следующее:

  • использование существующих функций портала для предварительного создания DCR;
  • получение содержимого правила сбора данных с помощью вызова API ARM;
  • применение изменений к правилу сбора данных с помощью вызова API ARM;
  • автоматизация процесса обновления DCR с помощью сценариев PowerShell.

Примечание.

В этом руководстве описывается один метод редактирования существующего DCR. Сведения о других методах см. в статье "Создание и изменение правил сбора данных (DCR) в Azure Monitor .

Необходимые компоненты

Для работы с этим учебником необходимы указанные ниже компоненты.

Обзор учебника

Несмотря на то что работа с мастером на портале — простейший способ настроить прием пользовательских данных в Log Analytics, в некоторых случаях в дальнейшем может потребоваться обновить правило сбора данных с целью:

  • Изменение параметров сбора данных (например, конечная точка сбора данных, связанная с DCR)
  • обновления логики анализа данных или фильтрации для потока данных;
  • Изменение назначения данных (например, отправка данных в таблицу Azure, так как этот параметр не предлагается непосредственно в мастере пользовательских журналов на основе DCR)

В этом руководстве вы сначала настроили прием пользовательского журнала. Затем вы измените преобразование KQL для пользовательского журнала, чтобы включить дополнительную фильтрацию и применить изменения к DCR. Наконец, мы собираемся объединить все операции редактирования в один скрипт PowerShell, который можно использовать для редактирования любого DCR по любым из указанных выше причин.

Настройка нового настраиваемого журнала

Для начала настройте новый настраиваемый журнал. Выполните инструкции из учебника Отправка настраиваемых журналов в журналы Azure Monitor с помощью портала Azure (предварительная версия). Обратите внимание на идентификатор ресурса созданного правила DCR.

Получение содержимого DCR

Чтобы обновить DCR, мы собираемся получить его содержимое и сохранить его в виде файла, который можно изменить дальше.

  1. Нажмите кнопку Cloud Shell на портале Azure и убедитесь, что для среды задано значение PowerShell.

    Снимок экрана: открытие облачной оболочки

  2. Выполните следующие команды, чтобы получить содержимое DCR и сохранить его в файл. Замените <ResourceId> на идентификатор ресурса DCR, а <FilePath> — на имя файла для хранения DCR.

    $ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
    $FilePath = "<FilePath>" # Store DCR content in this file
    $DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method GET
    $DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File -FilePath $FilePath
    

Изменение DCR

Теперь, когда содержимое DCR хранится в виде JSON-файла, можно внести в DCR изменения с помощью любого редактора. Вы можете скачать файл из среды Cloud Shell, если вы используете его.

Кроме того, можно использовать редакторы кода, поставляемые вместе со средой. Например, если вы сохранили DCR в файле с именем temp.dcr на облачном диске, для того чтобы открыть DCR для редактирования прямо в окне Cloud Shell, можно использовать следующую команду:

code "temp.dcr"

Давайте изменим преобразование KQL в DCR, чтобы удалить строки, в которых RequestType является чем-либо, но GET.

  1. Откройте файл, созданный в предыдущей части, для редактирования с помощью любого редактора.

  2. Найдите строку, содержащую атрибут ”transformKql”, которая, если вы выполнили инструкции в руководстве по созданию настраиваемого журнала, должна выглядеть примерно так:

    "transformKql": "  source\n    | extend TimeGenerated = todatetime(Time)\n    | parse RawData with \n    ClientIP:string\n    ' ' *\n    ' ' *\n    ' [' * '] \"' RequestType:string\n    \" \" Resource:string\n    \" \" *\n    '\" ' ResponseCode:int\n    \" \" *\n    | where ResponseCode != 200\n    | project-away Time, RawData\n"
    
  3. Изменение преобразования KQL с целью включения дополнительного фильтра по атрибуту RequestType

    "transformKql": "  source\n    | where RawData contains \"GET\"\n     | extend TimeGenerated = todatetime(Time)\n    | parse RawData with \n    ClientIP:string\n    ' ' *\n    ' ' *\n    ' [' * '] \"' RequestType:string\n    \" \" Resource:string\n    \" \" *\n    '\" ' ResponseCode:int\n    \" \" *\n    | where ResponseCode != 200\n    | project-away Time, RawData\n"
    
  4. Сохраните файл с измененным содержимым DCR.

Применение изменений

Последний этап — обновление DCR в системе. Это достигается вызовом HTTP к API ARM с обновленным PUT содержимым DCR, отправленным в тексте HTTP-запроса.

  1. Если вы используете Azure Cloud Shell, сохраните файл и закройте внедренный редактор или отправьте измененный DCR-файл обратно в среду Cloud Shell.

  2. Выполните следующие команды, чтобы загрузить содержимое DCR из файла и послать HTTP-вызов с целью обновления DCR в системе. Замените <ResourceId> на идентификатор ресурса DCR, а <FilePath> — на имя файла, измененного в предыдущей части учебника. Если вы читаете и записываете данные в DCR в рамках одного сеанса PowerShell, первые две строки можно пропустить.

    $ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
    $FilePath = "<FilePath>" # Store DCR content in this file
    $DCRContent = Get-Content $FilePath -Raw 
    Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method PUT -Payload $DCRContent 
    
  3. При успешном вызове необходимо получить ответ с кодом состояния, указывающий, что ваш DCR 200теперь обновляется.

  4. Теперь вы можете перейти к DCR и проверить его содержимое на портале с помощью функции представления JSON или повторить первую часть руководства, чтобы получить содержимое DCR в файл.

Итоговое объединение

Теперь, когда мы знаем, как считывать и обновлять содержимое DCR, давайте объединим все в скрипт служебной программы, который можно использовать для совместного выполнения обеих операций.

param ([Parameter(Mandatory=$true)] $ResourceId)

# get DCR content and put into a file
$FilePath = "temp.dcr"
$DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method GET
$DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File $FilePath

# Open DCR in code editor
code $FilePath | Wait-Process

#Wait for confirmation to apply changes
$Output = Read-Host "Apply changes to DCR (Y/N)? "
if ("Y" -eq $Output.toupper())
{ 
	#write DCR content back from the file
	$DCRContent = Get-Content $FilePath -Raw
	Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method PUT -Payload $DCRContent		
}

#Delete temporary file
Remove-Item $FilePath

Как использовать эту служебную программу

Предположим, что вы сохранили скрипт в виде файла с именем DCREditor.ps1 и вам необходимо изменить правило сбора данных с идентификатором ресурса /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar. Для этого можно выполнить следующую команду:

.\DCREditor.ps1 "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar"

Содержимое DCR открывается в внедренном редакторе кода. После завершения редактирования в командной строке скрипта введите "Y" применяет изменения обратно к DCR.

Следующие шаги