Zbieranie dzienników z pliku tekstowego za pomocą agenta usługi Azure Monitor
Niestandardowe dzienniki tekstowe to jedno ze źródeł danych używanych w regule zbierania danych (DCR). Szczegółowe informacje na temat tworzenia kontrolera domeny znajdują się w temacie Zbieranie danych za pomocą agenta usługi Azure Monitor. Ten artykuł zawiera dodatkowe szczegóły dotyczące typu dzienników tekstowych.
Wiele aplikacji i usług będzie rejestrować informacje w plikach tekstowych zamiast standardowych usług rejestrowania, takich jak dziennik zdarzeń systemu Windows lub dziennik syslog. Te dane można zbierać za pomocą agenta usługi Azure Monitor i przechowywać w obszarze roboczym usługi Log Analytics przy użyciu danych zebranych z innych źródeł.
Wymagania wstępne
- Obszar roboczy usługi Log Analytics, w którym masz co najmniej prawa współautora.
- Punkt końcowy zbierania danych (DCE) w tym samym regionie co obszar roboczy usługi Log Analytics. Aby uzyskać szczegółowe informacje, zobacz Jak skonfigurować punkty końcowe zbierania danych na podstawie wdrożenia .
- Nowy lub istniejący kontroler domeny opisany w temacie Zbieranie danych za pomocą agenta usługi Azure Monitor.
Podstawowa operacja
Na poniższym diagramie przedstawiono podstawową operację zbierania danych dziennika z pliku tekstowego.
- Agent obserwuje wszystkie pliki dziennika, które pasują do określonego wzorca nazwy na dysku lokalnym.
- Każdy wpis w dzienniku jest zbierany i wysyłany do usługi Azure Monitor. Strumień przychodzący zawiera cały wpis dziennika w jednej kolumnie.
- Jeśli jest używana transformacja domyślna, cały wpis dziennika jest wysyłany do pojedynczej kolumny w tabeli docelowej.
- Jeśli jest używana transformacja niestandardowa, wpis dziennika można przeanalizować w wielu kolumnach w tabeli docelowej.
Wymagania dotyczące plików tekstowych i najlepsze rozwiązania
Plik monitorowany przez agenta usługi Azure Monitor musi spełniać następujące wymagania:
- Plik musi być przechowywany na dysku lokalnym maszyny z agentem usługi Azure Monitor w monitorowanym katalogu.
- Każdy rekord musi być rozdzielony końcem wiersza.
- Plik musi używać kodowania ASCII lub UTF-8. Inne formaty, takie jak UTF-16, nie są obsługiwane.
- Nowe rekordy powinny być dołączane na końcu pliku i nie zastępować starych rekordów. Zastępowanie spowoduje utratę danych.
Zastosuj się do poniższych zaleceń, aby upewnić się, że nie występują problemy z utratą danych ani wydajnością:
- Utwórz nowy plik dziennika codziennie, aby można było łatwo wyczyścić stare pliki.
- Ciągłe czyszczenie plików 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 zmieniaj nazwy pliku zgodnego ze wzorcem skanowania plików na inną nazwę zgodną ze wzorcem skanowania plików. Spowoduje to pozyskiwanie zduplikowanych danych.
- Nie zmieniaj nazwy ani nie kopiuj 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ę.
Strumień przychodzący
Uwaga
Obsługa wielowierszowa, która używa sygnatury czasowej do rozdzielanych zdarzeń, jest teraz dostępna. Do momentu dodania obsługi w interfejsie użytkownika portalu należy użyć wdrożenia szablonu zarządzania zasobami.
Przychodzący strumień danych zawiera kolumny w poniższej tabeli.
Kolumna | Type | Opis |
---|---|---|
TimeGenerated |
datetime | Godzina wygenerowania rekordu. Ta wartość zostanie automatycznie wypełniona wraz z czasem dodania rekordu do obszaru roboczego usługi Log Analytics. Tę wartość można zastąpić przy użyciu przekształcenia, aby ustawić TimeGenerated inną wartość. |
RawData |
string | Cały wpis dziennika w jednej kolumnie. Możesz użyć przekształcenia, jeśli chcesz podzielić te dane na wiele kolumn przed wysłaniem do tabeli. |
FilePath |
string | Jeśli dodasz tę kolumnę do strumienia przychodzącego w kontrolerze domeny, zostanie ona wypełniona ścieżką do pliku dziennika. Ta kolumna nie jest tworzona automatycznie i nie można jej dodać przy użyciu portalu. Należy ręcznie zmodyfikować kontroler domeny utworzony przez portal lub utworzyć kontroler domeny przy użyciu innej metody, w której można jawnie zdefiniować strumień przychodzący. |
Computer |
string | Jeśli dodasz tę kolumnę do strumienia przychodzącego w kontrolerze domeny, zostanie ona wypełniona nazwą komputera z plikiem dziennika. Ta kolumna nie jest tworzona automatycznie i nie można jej dodać przy użyciu portalu. Należy ręcznie zmodyfikować kontroler domeny utworzony przez portal lub utworzyć kontroler domeny przy użyciu innej metody, w której można jawnie zdefiniować strumień przychodzący. |
Tabela niestandardowa
Aby móc zbierać dane dziennika z pliku tekstowego, musisz utworzyć tabelę niestandardową w obszarze roboczym usługi Log Analytics, aby odbierać dane. Schemat tabeli musi odpowiadać zbieranym danym lub dodać przekształcenie, aby upewnić się, że schemat wyjściowy jest zgodny z tabelą.
Ostrzeżenie
Aby uniknąć utraty danych, ważne jest, aby nie używać istniejącej niestandardowej tabeli dzienników, z której obecnie korzystają agenci MMA. Gdy dowolny agent usługi AMA zapisuje w istniejącej niestandardowej tabeli dzienników, agenci MMA nie będą już mogli zapisywać danych w tej tabeli. Zamiast tego należy utworzyć nową tabelę specjalnie dla agentów usługi AMA, aby zapewnić płynne przejście z jednego agenta do następnego.
Na przykład możesz użyć następującego skryptu programu PowerShell, aby utworzyć tabelę niestandardową z elementami RawData
, FilePath
i Computer
. Nie potrzebujesz przekształcenia dla tej tabeli, ponieważ schemat jest zgodny ze schematem domyślnym strumienia przychodzącego.
$tableParams = @'
{
"properties": {
"schema": {
"name": "{TableName}_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "DateTime"
},
{
"name": "RawData",
"type": "String"
},
{
"name": "FilePath",
"type": "String"
},
{
"name": "Computer",
"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
Tworzenie reguły zbierania danych dla pliku tekstowego
Utwórz regułę zbierania danych zgodnie z opisem w temacie Zbieranie danych za pomocą agenta usługi Azure Monitor. W kroku Zbieranie i dostarczanie wybierz pozycję Niestandardowe dzienniki tekstowe z listy rozwijanej Typ źródła danych.
Ustawienie | opis |
---|---|
Wzorzec pliku | Identyfikuje lokalizację i nazwę plików dziennika na dysku lokalnym. Użyj symbolu wieloznakowego dla nazw plików, które różnią się, na przykład podczas tworzenia nowego pliku każdego dnia z nową nazwą. Można wprowadzić wiele wzorców plików rozdzielonych przecinkami. Przykłady: - C:\Logs\MyLog.txt - C:\Logs\MyLog*.txt - C:\App01\AppLog.txt, C:\App02\AppLog.txt - /var/mylog.log - /var/mylog*.log |
Nazwa tabeli | Nazwa tabeli docelowej w obszarze roboczym usługi Log Analytics. |
Ogranicznik rekordów | Obecnie nie jest używany, ale zarezerwowany do przyszłego potencjalnego użycia, co pozwala ogranicznikom innym niż obecnie obsługiwany koniec wiersza (/r/n ). |
Przekształcanie | Przekształcanie czasu pozyskiwania w celu filtrowania rekordów lub formatowania danych przychodzących dla tabeli docelowej. Użyj polecenia source , aby pozostawić dane przychodzące bez zmian. |
Rozdzielane pliki dziennika
Wiele plików dziennika tekstowego zawiera wpisy rozdzielane znakiem, takim jak przecinek. Aby przeanalizować te dane w osobnych kolumnach, użyj przekształcenia z funkcją split.
Rozważmy na przykład plik tekstowy z następującymi przecinkami rozdzielanymi danymi. Te pola można opisać jako: Time
, , Code
Severity
,Module
i Message
.
2024-06-21 19:17:34,1423,Error,Sales,Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,Nightly backup complete.
Następujące przekształcenie analizuje dane w osobnych kolumnach. Ponieważ split
zwraca dane dynamiczne, należy użyć funkcji, takich jak tostring
i toint
, aby przekonwertować dane na poprawny typ skalarny. Należy również podać nazwę dla każdego wpisu zgodnego z nazwą kolumny w tabeli docelowej. Zwróć uwagę, że ten przykład zawiera TimeGenerated
wartość. Jeśli nie zostanie to podane, zostanie użyty czas pozyskiwania.
source | project d = split(RawData,",") | project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])
Pobranie tych danych za pomocą zapytania dziennika zwróci następujące wyniki.
Rozwiązywanie problemów
Wykonaj poniższe kroki, jeśli nie zbierasz danych z oczekiwanego dziennika tekstowego.
- Sprawdź, czy dane są zapisywane w zbieranym pliku dziennika.
- Sprawdź, czy nazwa i lokalizacja pliku dziennika są zgodne z określonym wzorcem pliku.
- Sprawdź, czy schemat tabeli docelowej jest zgodny ze strumieniem przychodzącym lub że masz przekształcenie, które przekonwertuje strumień przychodzący na prawidłowy schemat.
- Zobacz Weryfikowanie operacji , aby sprawdzić, czy agent działa, a dane są odbierane.
Następne kroki
Dowiedz się więcej na następujące tematy: