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


Руководство. Анализ данных в журналах Azure Monitor с помощью записной книжки

Записные книжки — это интегрированные среды, которые позволяют создавать и совместно использовать документы с динамическим кодом, уравнениями, визуализациями и текстом. Интеграция записной книжки с рабочей областью Log Analytics позволяет создать многоэтапный процесс, который выполняет код на каждом шаге на основе результатов предыдущего шага. Такие упрощенные процессы можно использовать для создания конвейеров машинного обучения, расширенных средств анализа, руководств по устранению неполадок (TSG) для потребностей в поддержке и многое другое.

Интеграция записной книжки с рабочей областью Log Analytics также позволяет:

  • Выполнение запросов KQL и пользовательского кода на любом языке.
  • Введите новые возможности аналитики и визуализации, такие как новые модели машинного обучения, пользовательские временные шкалы и деревья обработки.
  • Интегрируйте наборы данных за пределами журналов Azure Monitor, например, локальные наборы данных.
  • Воспользуйтесь преимуществами увеличенных лимитов сервиса с помощью лимитов Query API в отличие от портала Azure.

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

  • Интеграция записной книжки с рабочей областью Log Analytics с помощью клиентской библиотеки запросов Azure Monitor и клиентской библиотеки удостоверений Azure
  • Изучение и визуализация данных из рабочей области Log Analytics в записной книжке
  • Прием данных из записной книжки в настраиваемую таблицу в рабочей области Log Analytics (необязательно)

Пример создания конвейера машинного обучения для анализа данных в журналах Azure Monitor с помощью записной книжки см. в этом примере записной книжки. Обнаружение аномалий в журналах Azure Monitor с помощью методов машинного обучения.

Совет

Чтобы обойти ограничения, связанные с API, разбийте большие запросы на несколько небольших запросов.

Предварительные условия

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

  • Рабочая область машинного обучения Azure с вычислительным экземпляром ЦП с:

  • Следующие роли и разрешения:

    • В журналах Azure Monitor: роль участника Logs Analytics для чтения и отправки данных в рабочую область Logs Analytics. Дополнительные сведения см. в статье "Управление доступом к рабочим областям Log Analytics".

    • В Машинное обучение Azure:

      • Роль Владельца или Участника уровня группы ресурсов, чтобы создать новую рабочую область для Azure Machine Learning при необходимости.
      • Роль участника (Contributor) в рабочей области Azure Machine Learning, где выполняется ваша записная книжка.

      Дополнительные сведения см. в статье Управление доступом к рабочей области Машинного обучения Azure.

Средства и записные книжки

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

Инструмент Описание
Клиентская библиотека запросов Azure Monitor Позволяет выполнять запросы только для чтения для данных в журналах Azure Monitor.
Клиентская библиотека идентификации Azure Позволяет клиентам Пакета SDK Azure проходить проверку подлинности с помощью идентификатора Microsoft Entra.
Клиентская библиотека инжестации Azure Monitor Позволяет отправлять пользовательские журналы в Azure Monitor с помощью API приема журналов. Требуется для приема проанализированных данных в настраиваемую таблицу в рабочей области Log Analytics (необязательно)
Правило сбора данных, конечная точка сбора данных и зарегистрированное приложение Требуется для приема проанализированных данных в настраиваемую таблицу в рабочей области Log Analytics (необязательно)

Другие библиотеки запросов, которые можно использовать, включают:

  • Библиотека Kqlmagic позволяет выполнять запросы KQL непосредственно в записной книжке так же, как и выполнение запросов KQL из средства Log Analytics.
  • Библиотека MSTICPY предоставляет шаблонные запросы, которые вызывают встроенные возможности временных рядов KQL и машинного обучения, а также предоставляют расширенные средства визуализации и анализ данных в рабочей области Log Analytics.

Другие возможности для расширенного анализа записных книжек Майкрософт включают:

1. Интегрируйте рабочую область Log Analytics с записной книжкой

Настройте записную книжку для запроса рабочей области Log Analytics:

  1. Установите клиентские библиотеки Azure Monitor Query, Azure Identity и Azure Monitor Ingestion вместе с библиотекой анализа данных Pandas, библиотекой визуализации Plotly.

    import sys
    
    !{sys.executable} -m pip install --upgrade azure-monitor-query azure-identity azure-monitor-ingestion
    
    !{sys.executable} -m pip install --upgrade pandas plotly
    
  2. LOGS_WORKSPACE_ID Задайте для переменной, приведенной ниже, идентификатор рабочей области Log Analytics. В настоящее время переменная использует демонстрационную рабочую область Azure Monitor, которую можно использовать для демонстрации записной книжки.

    LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
    
  3. LogsQueryClient Настройте для проверки подлинности и запроса журналов Azure Monitor.

    Этот код настраивает LogsQueryClient для аутентификации с использованием DefaultAzureCredential.

    from azure.core.credentials import AzureKeyCredential
    from azure.core.pipeline.policies import AzureKeyCredentialPolicy
    from azure.identity import DefaultAzureCredential
    from azure.monitor.query import LogsQueryClient
    
    if LOGS_WORKSPACE_ID == "DEMO_WORKSPACE":
        credential = AzureKeyCredential("DEMO_KEY")
        authentication_policy = AzureKeyCredentialPolicy(name="X-Api-Key", credential=credential)
    else:
        credential = DefaultAzureCredential()
        authentication_policy = None
    
    logs_query_client = LogsQueryClient(credential, authentication_policy=authentication_policy)
    

    LogsQueryClient обычно поддерживает только аутентификацию с использованием учетных данных токена Microsoft Entra. Однако мы можем передать настраиваемую политику проверки подлинности, чтобы включить использование ключей API. Это позволяет клиенту запрашивать демонстрационную рабочую область. Доступность и доступ к этой демонстрационной рабочей области могут быть изменены, поэтому рекомендуется использовать собственную рабочую область Log Analytics.

  4. Определите вспомогательную функцию, называемую query_logs_workspace, чтобы запустить заданный запрос в рабочей области Log Analytics и вернуть результаты в виде DataFrame Pandas.

    import pandas as pd
    import plotly.express as px
    
    from azure.monitor.query import LogsQueryStatus
    from azure.core.exceptions import HttpResponseError
    
    
    def query_logs_workspace(query):
        try:
            response = logs_query_client.query_workspace(LOGS_WORKSPACE_ID, query, timespan=None)
            if response.status == LogsQueryStatus.PARTIAL:
                error = response.partial_error
                data = response.partial_data
                print(error.message)
            elif response.status == LogsQueryStatus.SUCCESS:
                data = response.tables
            for table in data:
                my_data = pd.DataFrame(data=table.rows, columns=table.columns)
        except HttpResponseError as err:
            print("something fatal happened")
            print (err)
        return my_data
    

2. Изучение и визуализация данных из рабочей области Log Analytics в записной книжке

Рассмотрим некоторые данные в рабочей области, выполнив запрос из записной книжки:

  1. Этот запрос проверяет, сколько данных (в мегабайтах) вы извлекли в каждую таблицу (типы данных) в рабочей области Log Analytics каждый час за последнюю неделю:

    TABLE = "Usage"
    
    QUERY = f"""
    let starttime = 7d; // Start date for the time series, counting back from the current date
    let endtime = 0d; // today 
    {TABLE} | project TimeGenerated, DataType, Quantity 
    | where TimeGenerated between (ago(starttime)..ago(endtime))
    | summarize ActualUsage=sum(Quantity) by TimeGenerated=bin(TimeGenerated, 1h), DataType
    """
    
    df = query_logs_workspace(QUERY)
    display(df)
    

    Результирующая таблица данных показывает почасовую загрузку в каждой из таблиц рабочей области Log Analytics.

    Снимок экрана DataFrame, созданного в блокноте с данными приема журналов, полученными из рабочей области Log Analytics.

  2. Теперь давайте рассмотрим данные в виде графика, который показывает почасовое использование для различных типов данных с течением времени на основе DataFrame Pandas.

    df = df.sort_values(by="TimeGenerated")
    graph = px.line(df, x='TimeGenerated', y="ActualUsage", color='DataType', title="Usage in the last week - All data types")
    graph.show()
    

    Результирующий граф выглядит следующим образом:

    График, показывающий объем данных, передаваемых в каждую из таблиц в рабочей области Log Analytics в течение семи дней.

    Вы успешно запросили и визуализировали данные журнала из рабочей области Log Analytics в записной книжке.

3. Анализ данных

В качестве простого примера давайте рассмотрим первые пять строк:

analyzed_df = df.head(5)

Пример реализации методов машинного обучения для анализа данных в журналах Azure Monitor см. в этом примере записной книжки: обнаружение аномалий в журналах Azure Monitor с помощью методов машинного обучения.

4. Загрузка проанализированных данных в настраиваемую таблицу в вашей рабочей области Log Analytics (при необходимости)

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

  1. Для отправки данных в рабочую область Log Analytics требуется настраиваемая таблица, конечная точка сбора данных, правило сбора данных и зарегистрированное приложение Microsoft Entra с разрешением на использование правила сбора данных, как описано в руководстве. Отправка данных в журналы Azure Monitor с помощью API приема журналов (портал Azure).

    При создании настраиваемой таблицы:

    1. Отправьте этот пример файла, чтобы определить схему таблицы:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",
          "ActualUsage": 40.1,
          "DataType": "AzureDiagnostics"
        }
      ]
      
  2. Определите константы, необходимые для API приема журналов:

    os.environ['AZURE_TENANT_ID'] = "<Tenant ID>"; #ID of the tenant where the data collection endpoint resides
    os.environ['AZURE_CLIENT_ID'] = "<Application ID>"; #Application ID to which you granted permissions to your data collection rule
    os.environ['AZURE_CLIENT_SECRET'] = "<Client secret>"; #Secret created for the application
    
    
    
    os.environ['LOGS_DCR_STREAM_NAME'] = "<Custom stream name>" ##Name of the custom stream from the data collection rule
    os.environ['LOGS_DCR_RULE_ID'] = "<Data collection rule immutableId>" # immutableId of your data collection rule
    os.environ['DATA_COLLECTION_ENDPOINT'] = "<Logs ingestion URL of your endpoint>" # URL that looks like this: https://xxxx.ingest.monitor.azure.com
    
  3. Загрузите данные в настраиваемую таблицу в рабочей области Log Analytics.

    from azure.core.exceptions import HttpResponseError
    from azure.identity import ClientSecretCredential
    from azure.monitor.ingestion import LogsIngestionClient
    import json
    
    
    credential = ClientSecretCredential(
        tenant_id=AZURE_TENANT_ID,
        client_id=AZURE_CLIENT_ID,
        client_secret=AZURE_CLIENT_SECRET
    )
    
    client = LogsIngestionClient(endpoint=DATA_COLLECTION_ENDPOINT, credential=credential, logging_enable=True)
    
    body = json.loads(analyzed_df.to_json(orient='records', date_format='iso'))
    
    try:
       response = client.upload(rule_id=LOGS_DCR_RULE_ID, stream_name=LOGS_DCR_STREAM_NAME, logs=body)
       print("Upload request accepted")
    except HttpResponseError as e:
        print(f"Upload failed: {e}")
    

    Примечание.

    При создании таблицы в рабочей области Log Analytics может потребоваться до 15 минут, чтобы загруженные данные появились в таблице.

  4. Убедитесь, что данные теперь отображаются в пользовательской таблице.

    Снимок экрана, показывающий запрос в Log Analytics по пользовательской таблице, в которую поступили результаты анализа из записной книжки.

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

Узнайте больше о том, как: