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

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

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

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

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

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

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

Совет

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

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

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

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

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

Средство Description
Клиентская библиотека запросов 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, библиотекой визуализации Графики:

    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 и вернуть результаты в виде кадра данных 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:

    Screenshot of a DataFrame generated in a notebook with log ingestion data retrieved from a Log Analytics workspace.

  2. Теперь давайте рассмотрим данные в виде графа, который показывает почасовое использование для различных типов данных с течением времени на основе кадра данных 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()
    

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

    A graph that shows the amount of data ingested into each of the tables in a Log Analytics workspace over seven days.

    Вы успешно запросили и визуализировали данные журнала из рабочей области 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. Убедитесь, что данные теперь отображаются в пользовательской таблице.

    Screenshot that shows a query in Log Analytics on a custom table into which the analysis results from the notebook were ingested.

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

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