Zbieranie dzienników z pliku tekstowego lub JSON za pomocą agenta usługi Azure Monitor

Wiele aplikacji rejestruje informacje w plikach tekstowych lub JSON zamiast standardowych usług rejestrowania, takich jak dziennik zdarzeń systemu Windows lub dziennik syslog. W tym artykule wyjaśniono, jak zbierać dane dziennika z plików tekstowych i JSON na monitorowanych maszynach przy użyciu agenta usługi Azure Monitor, tworząc regułę zbierania danych (DCR).

Uwaga

Pozyskiwanie danych JSON jest obecnie w wersji zapoznawczej.

Wymagania wstępne

Aby wykonać tę procedurę, potrzebne są następujące elementy:

  • Obszar roboczy usługi Log Analytics, w którym masz co najmniej prawa współautora.

  • Jeden lub dwa punkty końcowe zbierania danych, w zależności od tego, czy maszyna wirtualna i obszar roboczy usługi Log Analytics znajdują się w tym samym regionie.

    Aby uzyskać więcej informacji, zobacz Jak skonfigurować punkty końcowe zbierania danych na podstawie wdrożenia.

  • Uprawnienia do tworzenia obiektów reguły zbierania danych w obszarze roboczym.

  • Tekst JSON musi znajdować się w jednym wierszu w celu odpowiedniego pozyskiwania. Format treści (pliku) JSON nie jest obsługiwany.

  • Maszyna wirtualna, zestaw skalowania maszyn wirtualnych, lokalny serwer z obsługą usługi Arc lub agent monitorowania platformy Azure na lokalnym kliencie systemu Windows, który zapisuje dzienniki w pliku tekstowym lub JSON.

    Wymagania dotyczące plików tekstowych i JSON oraz najlepsze rozwiązania:

    • Przechowuj pliki na dysku lokalnym komputera, na którym działa agent usługi Azure Monitor i w monitorowanym katalogu.
    • Zdejmij koniec rekordu z końcem wiersza.
    • Należy używać kodowania ASCII lub UTF-8. Inne formaty, takie jak UTF-16, nie są obsługiwane.
    • Codziennie należy utworzyć nowy plik dziennika, aby można było łatwo usunąć stare pliki.
    • Czyścić wszystkie pliki dziennika w monitorowanym katalogu. Śledzenie wielu plików dziennika może zwiększyć użycie procesora i pamięci agenta. Poczekaj co najmniej 2 dni, aby umożliwić przetwarzanie wszystkich dzienników przez cały czas.
    • Nie zastępowaj istniejącego pliku nowymi rekordami. Na końcu pliku należy dołączać tylko nowe rekordy. Zastępowanie spowoduje utratę danych.
    • Nie zmieniaj nazwy pliku na nową nazwę, a następnie otwórz nowy plik o tej samej nazwie. Może to spowodować utratę danych.
    • Nie należy zmieniać nazwy ani kopiować dużych plików dziennika, które są zgodne ze wzorcem skanowania plików do monitorowanego katalogu. Jeśli musisz, nie przekrocz 50 MB na minutę.
    • Nie zmieniaj nazwy pliku zgodnego ze wzorcem skanowania plików na nową nazwę zgodną ze wzorcem skanowania plików. Spowoduje to pozyskiwanie zduplikowanych danych.

Tworzenie tabeli niestandardowej

Tabela utworzona w skry skrycie zawiera dwie kolumny:

  • TimeGenerated (data/godzina) [Wymagane]
  • RawData (ciąg) [Opcjonalnie, jeśli podano schemat tabeli]
  • 'FilePath' (ciąg) [Opcjonalnie]
  • YourOptionalColumn (ciąg) [Opcjonalnie]

Domyślny schemat tabeli dla danych dziennika zebranych z plików tekstowych to "TimeGenerated" i "RawData". Dodanie elementu "FilePath" do dowolnego zespołu jest opcjonalne. Jeśli wiesz, że ostateczny schemat lub źródło jest dziennikiem JSON, możesz dodać końcowe kolumny w skryscie przed utworzeniem tabeli. Zawsze możesz dodawać kolumny przy użyciu interfejsu użytkownika tabeli usługi Log Analytics później.

Nazwy kolumn i atrybuty JSON muszą być dokładnie zgodne, aby automatycznie analizować tabelę. W kolumnach i atrybutach JSON uwzględniana jest wielkość liter. Na przykład Rawdata dane zdarzenia nie będą zbierane. Musi to być RawData. Pozyskiwanie spowoduje usunięcie atrybutów JSON, które nie mają odpowiedniej kolumny.

Najprostszym sposobem wykonania wywołania REST jest wiersz polecenia programu Azure Cloud PowerShell (CLI). Aby otworzyć powłokę, przejdź do witryny Azure Portal, naciśnij przycisk Cloud Shell i wybierz pozycję PowerShell. Jeśli używasz programu Azure Cloud PowerShell po raz pierwszy, musisz zapoznać się z kreatorem konfiguracji jednorazowej.

Skopiuj i wklej ten skrypt w programie PowerShell, aby utworzyć tabelę w obszarze roboczym:

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
        {
                                "name": "TimeGenerated",
                                "type": "DateTime"
                        }, 
                       {
                                "name": "RawData",
                                "type": "String"
                       },
                       {
                                "name": "FilePath",
                                "type": "String"
                       },
                      {
                                "name": `"YourOptionalColumn",
                                "type": "String"
                     }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

Powinna zostać wyświetlona odpowiedź 200 i szczegóły dotyczące właśnie utworzonej tabeli.

Tworzenie reguły zbierania danych dla pliku tekstowego lub JSON

Reguła zbierania danych definiuje:

  • Które pliki dziennika źródłowego agenta usługi Azure Monitor skanują pod kątem nowych zdarzeń.
  • Jak usługa Azure Monitor przekształca zdarzenia podczas pozyskiwania.
  • Docelowy obszar roboczy usługi Log Analytics i tabela, do której usługa Azure Monitor wysyła dane.

Regułę zbierania danych można zdefiniować w celu wysyłania danych z wielu maszyn do wielu obszarów roboczych usługi Log Analytics, w tym obszarów roboczych w innym regionie lub dzierżawie. Utwórz regułę zbierania danych w tym samym regionie co obszar roboczy usługi Log Analytics.

Uwaga

Aby wysyłać dane między dzierżawami, musisz najpierw włączyć usługę Azure Lighthouse.

Aby automatycznie przeanalizować plik dziennika JSON w tabeli niestandardowej, wykonaj kroki szablonu usługi Resource Manager. Dane tekstowe można przekształcać w kolumny przy użyciu transformacji czasu pozyskiwania.

Aby utworzyć regułę zbierania danych w witrynie Azure Portal:

  1. W menu Monitor wybierz pozycję Reguły zbierania danych.

  2. Wybierz pozycję Utwórz , aby utworzyć nową regułę i skojarzenia zbierania danych.

    Zrzut ekranu przedstawiający przycisk Utwórz na ekranie Reguły zbierania danych.

  3. Wprowadź nazwę reguły i określ punkt końcowy subskrypcji, grupy zasobów, regionu, typu platformy i zbierania danych:

    • Region określa miejsce utworzenia kontrolera domeny . Maszyny wirtualne i ich skojarzenia mogą znajdować się w dowolnej subskrypcji lub grupie zasobów w dzierżawie.
    • Typ platformy określa typ zasobów, do których może mieć zastosowanie ta reguła. Opcja Niestandardowa umożliwia używanie zarówno typów systemów Windows, jak i Linux.
    • Punkt końcowy zbierania danych określa punkt końcowy zbierania danych, do którego agent usługi Azure Monitor wysyła zebrane dane. Ten punkt końcowy zbierania danych musi znajdować się w tym samym regionie co obszar roboczy usługi Log Analytics. Aby uzyskać więcej informacji, zobacz Jak skonfigurować punkty końcowe zbierania danych na podstawie wdrożenia.

    Zrzut ekranu przedstawiający kartę Podstawowe na ekranie Reguła zbierania danych.

  4. Na karcie Zasoby:

    1. Wybierz pozycję + Dodaj zasoby i skojarz zasoby z regułą zbierania danych. Zasoby mogą być maszynami wirtualnymi, zestawami skalowania maszyn wirtualnych i usługą Azure Arc dla serwerów. Witryna Azure Portal instaluje agenta usługi Azure Monitor na zasobach, które nie zostały jeszcze zainstalowane.

      Ważne

      Portal umożliwia przypisaną przez system tożsamość zarządzaną w zasobach docelowych wraz z istniejącymi tożsamościami przypisanymi przez użytkownika, jeśli istnieją. W przypadku istniejących aplikacji, chyba że określisz tożsamość przypisaną przez użytkownika w żądaniu, zamiast tego maszyna domyślnie używa tożsamości przypisanej przez system.

    2. Wybierz pozycję Włącz punkty końcowe zbierania danych.

    3. Opcjonalnie możesz wybrać punkt końcowy zbierania danych dla każdej maszyny wirtualnej skojarzonej z regułą zbierania danych. W większości przypadków należy po prostu użyć wartości domyślnych.

      Ten punkt końcowy zbierania danych wysyła pliki konfiguracji do maszyny wirtualnej i musi znajdować się w tym samym regionie co maszyna wirtualna. Aby uzyskać więcej informacji, zobacz Jak skonfigurować punkty końcowe zbierania danych na podstawie wdrożenia.

    Zrzut ekranu przedstawiający kartę Zasoby na ekranie Reguła zbierania danych.

  5. Na karcie Zbieranie i dostarczanie wybierz pozycję Dodaj źródło danych, aby dodać źródło danych i ustawić miejsce docelowe.

  6. Z listy rozwijanej Typ źródła danych wybierz pozycję Niestandardowe dzienniki tekstowe lub dzienniki JSON.

  7. Pozwala określić następujące informacje:

    • Wzorzec pliku — określa miejsce, w którym znajdują się pliki dziennika na dysku lokalnym. Można wprowadzić wiele wzorców plików rozdzielonych przecinkami (w systemie Linux, AMA w wersji 1.26 lub nowszej jest wymagany do zbierania z rozdzielanej przecinkami listy wzorców plików).

      Przykłady prawidłowych danych wejściowych:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt

      Uwaga

      Wiele plików dziennika tego samego typu często istnieje w tym samym katalogu. Na przykład maszyna może codziennie utworzyć nowy plik, aby zapobiec rosnącemu zbyt dużemu rozmiarowi pliku dziennika. Aby zebrać dane dziennika w tym scenariuszu, możesz użyć symbolu wieloznacznych pliku. Użyj formatu C:\directoryA\directoryB\*MyLog.txt dla systemów Windows i /var/*.log Linux. Nie ma obsługi symboli wieloznacznych katalogu.

    • Nazwa tabeli — nazwa tabeli docelowej utworzonej w obszarze roboczym usługi Log Analytics. Aby uzyskać więcej informacji, zobacz Tworzenie tabeli niestandardowej.

    • Ogranicznik rekordów — będzie używany w przyszłości, aby umożliwić ograniczniki inne niż obecnie obsługiwany koniec wiersza (/r/n).

    • Przekształć — dodaj transformację czasu pozyskiwania lub pozostaw jako źródło, jeśli nie musisz przekształcać zebranych danych.

  8. Na karcie Miejsce docelowe dodaj co najmniej jedno miejsce docelowe dla źródła danych. Możesz wybrać wiele miejsc docelowych tego samego lub różnych typów. Możesz na przykład wybrać wiele obszarów roboczych usługi Log Analytics, które są również nazywane wieloma funkcjami.

    Zrzut ekranu przedstawiający kartę docelową ekranu Dodawanie źródła danych dla reguły zbierania danych w witrynie Azure Portal.

  9. Wybierz pozycję Przejrzyj i utwórz , aby przejrzeć szczegóły reguły zbierania danych i skojarzenie z zestawem maszyn wirtualnych.

  10. Wybierz pozycję Utwórz , aby utworzyć regułę zbierania danych.

Uwaga

Po utworzeniu reguły zbierania danych może upłynąć do 10 minut.

Przykładowe zapytania dziennika

Nazwy kolumn używane tutaj są tylko na przykład. Nazwy kolumn dziennika będą najprawdopodobniej inne.

  • Zlicz liczbę zdarzeń według kodu.

    MyApp_CL
    | summarize count() by code
    

Przykładowa reguła alertu

  • Utwórz regułę alertu dla dowolnego zdarzenia błędu.

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

Rozwiązywanie problemów

Wykonaj poniższe kroki, aby rozwiązać problemy z kolekcją dzienników z plików tekstowych i JSON.

Sprawdź, czy dane zostały pozyskane do tabeli niestandardowej

Zacznij od sprawdzenia, czy jakiekolwiek rekordy zostały pozyskane do niestandardowej tabeli dzienników, uruchamiając następujące zapytanie w usłudze Log Analytics:

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

Jeśli rekordy nie są zwracane, sprawdź inne sekcje pod kątem możliwych przyczyn. To zapytanie wyszukuje wpisy w ciągu ostatnich dwóch dni, ale można zmodyfikować dla innego zakresu czasu. Wyświetlenie nowych danych w tabeli może potrwać od 5 do 7 minut. Agent usługi Azure Monitor zbiera tylko dane zapisane w pliku tekstowym lub JSON po skojarzeniu reguły zbierania danych z maszyną wirtualną.

Sprawdź, czy utworzono tabelę niestandardową

Aby móc wysyłać do niego dane, musisz utworzyć niestandardową tabelę dziennika w obszarze roboczym usługi Log Analytics.

Sprawdź, czy agent pomyślnie wysyła pulsy

Sprawdź, czy agent usługi Azure Monitor prawidłowo komunikuje się, uruchamiając następujące zapytanie w usłudze Log Analytics, aby sprawdzić, czy istnieją jakieś rekordy w tabeli Puls.

Heartbeat
| where TimeGenerated > ago(24h)
| where Computer has "<computer name>"
| project TimeGenerated, Category, Version
| order by TimeGenerated desc

Sprawdź, czy określono poprawną lokalizację dziennika w regule zbierania danych

Reguła zbierania danych będzie mieć sekcję podobną do poniższej. Element filePatterns określa ścieżkę do pliku dziennika do zbierania z komputera agenta. Sprawdź komputer agenta, aby sprawdzić, czy jest to poprawne.

"dataSources": [{
            "configuration": {
                "filePatterns": ["C:\\JavaLogs\\*.log"],
                "format": "text",
                "settings": {
                    "text": {
                        "recordStartTimestampFormat": "yyyy-MM-ddTHH:mm:ssK"
                    }
                }
            },
            "id": "myTabularLogDataSource",
            "kind": "logFile",
            "streams": [{
                    "stream": "Custom-TabularData-ABC"
                }
            ],
            "sendToChannels": ["gigl-dce-00000000000000000000000000000000"]
        }
    ]

Ten wzorzec pliku powinien odpowiadać dziennikom na maszynie agenta.

Zrzut ekranu przedstawiający pliki dziennika tekstowego na maszynie agenta.

Korzystanie z narzędzia do rozwiązywania problemów z agentem usługi Azure Monitor

Skorzystaj z narzędzia do rozwiązywania problemów z agentem usługi Azure Monitor, aby wyszukać typowe problemy i udostępnić wyniki firmie Microsoft.

Sprawdź, czy dzienniki są wypełniane

Agent będzie zbierał tylko nową zawartość zapisaną w zbieranym pliku dziennika. Jeśli eksperymentujesz z dziennikami kolekcji z pliku tekstowego lub JSON, możesz użyć następującego skryptu, aby wygenerować przykładowe dzienniki.

# This script writes a new log entry at the specified interval indefinitely.
# Usage:
# .\GenerateCustomLogs.ps1 [interval to sleep]
#
# Press Ctrl+C to terminate script.
#
# Example:
# .\ GenerateCustomLogs.ps1 5

param (
    [Parameter(Mandatory=$true)][int]$sleepSeconds
)

$logFolder = "c:\\JavaLogs"
if (!(Test-Path -Path $logFolder))
{
    mkdir $logFolder
}

$logFileName = "TestLog-$(Get-Date -format yyyyMMddhhmm).log"
do
{
    $count++
    $randomContent = New-Guid
    $logRecord = "$(Get-Date -format s)Z Record number $count with random content $randomContent"
    $logRecord | Out-File "$logFolder\\$logFileName" -Encoding utf8 -Append
    Start-Sleep $sleepSeconds
}
while ($true)

Następne kroki

Dowiedz się więcej na następujące tematy: