Руководство. Изменение правила сбора данных (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.

    Screenshot of opening cloud shell

  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-вызов PUT к API ARM с обновленным содержимым 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. Если вызов выполнен успешно, вы должны получить ответ с кодом состояния "200", который говорит о том, что правило DCR обновлено.
  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.

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