Udostępnij za pośrednictwem


Pozyskiwanie danych za pomocą ujścia NLog do usługi Azure Data Explorer

NLog to elastyczna i bezpłatna platforma rejestrowania dla różnych platform .NET, w tym .NET Standard. Serwer NLog umożliwia zapisywanie w kilku miejscach docelowych, takich jak baza danych, plik lub konsola. Za pomocą programu NLog można zmienić konfigurację rejestrowania na bieżąco. Ujście NLog jest elementem docelowym dla serwera NLog, który umożliwia wysyłanie komunikatów dziennika do klastra KQL. Wtyczka jest oparta na bibliotece Azure-Kusto-Data i zapewnia wydajny sposób ujścia dzienników do klastra.

W tym artykule dowiesz się, jak pozyskiwać dane za pomocą ujścia nLog.

Aby uzyskać pełną listę łączników danych, zobacz Omówienie łączników danych.

Wymagania wstępne

  • Zestaw .NET SDK 6.0 lub nowszy
  • Klaster i baza danych usługi Azure Data Explorer

Konfigurowanie środowiska

W tej sekcji przygotujesz środowisko do korzystania z łącznika NLog.

Instalowanie pakietu

Dodaj pakiet NuGet NLog.Azure.Kusto. Użyj polecenia Install-Package, określając nazwę pakietu NuGet.

Install-Package NLog.Azure.Kusto

Tworzenie rejestracji aplikacji Entra firmy Microsoft

Uwierzytelnianie aplikacji Entra firmy Microsoft jest używane w przypadku aplikacji, które muszą uzyskiwać dostęp do platformy bez obecności użytkownika. Aby uzyskać dane przy użyciu łącznika NLog, należy utworzyć i zarejestrować jednostkę usługi Microsoft Entra, a następnie autoryzować tę jednostkę do pobierania danych z bazy danych.

Jednostkę usługi Microsoft Entra można utworzyć za pomocą witryny Azure Portal lub programowo, jak w poniższym przykładzie.

Ta jednostka usługi będzie tożsamością używaną przez łącznik do zapisywania danych w tabeli w usłudze Kusto. Później przyznasz uprawnienia dla tej jednostki usługi w celu uzyskania dostępu do zasobów usługi Kusto.

  1. Zaloguj się do subskrypcji platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure. Następnie uwierzytelnij się w przeglądarce.

    az login
    
  2. Wybierz subskrypcję do hostowania podmiotu zabezpieczeń. Ten krok jest wymagany, gdy masz wiele subskrypcji.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Utwórz jednostkę usługi. W tym przykładzie jednostka usługi nosi nazwę my-service-principal.

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. Z zwróconych danych JSON skopiuj wartości appId, passwordi tenant do użycia w przyszłości.

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "displayName": "my-service-principal",
      "name": "my-service-principal",
      "password": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "tenant": "00001111-aaaa-2222-bbbb-3333cccc4444"
    }
    

Utworzono aplikację Microsoft Entra i jednostkę usługi.

Zapisz następujące wartości, które mają być używane w kolejnych krokach: * Identyfikator aplikacji (klienta) * Identyfikator katalogu (dzierżawy) * Wartość klucza tajnego klienta

Udzielanie uprawnień aplikacji Microsoft Entra

  1. W środowisku zapytań uruchom następujące polecenie zarządzania, zastępując symbole zastępcze. Zastąp ciąg DatabaseName nazwą docelowej bazy danych i identyfikatorem ApplicationID wcześniej zapisaną wartością. To polecenie przyznaje aplikacji rolę ingestor bazy danych. Aby uzyskać więcej informacji, zobacz Zarządzanie rolami zabezpieczeń bazy danych.

    .add database <DatabaseName> ingestors ('aadapp=<ApplicationID>') 'NLOG Azure App Registration role'
    

    Uwaga

    Ostatni parametr to ciąg, który jest wyświetlany jako notatki podczas wykonywania zapytań dotyczących ról skojarzonych z bazą danych. Aby uzyskać więcej informacji, zobacz Wyświetlanie istniejących ról zabezpieczeń.

Tworzenie tabeli i mapowania pozyskiwania

Utwórz tabelę docelową dla danych przychodzących.

  • W edytorze zapytań uruchom następujące polecenie tworzenia tabeli, zastępując symbol zastępczy TableName nazwą tabeli docelowej:

    .create table <TableName> (Timestamp:datetime, Level:string, Message:string, FormattedMessage:dynamic, Exception:string, Properties:dynamic)
    

Dodawanie konfiguracji docelowej do aplikacji

Wykonaj następujące czynności, aby:

  • Dodawanie konfiguracji docelowej
  • Skompiluj i uruchom aplikację
  1. Dodaj element docelowy w pliku konfiguracji NLog.

    <targets>
        <target name="targettable" xsi:type="TargetTable"
        IngestionEndpointUri="<Connection string>"
        Database="<Database name>"
        TableName="<Table name>"
        ApplicationClientId="<Entra App clientId>"
        ApplicationKey="<Entra App key>"
        Authority="<Entra tenant id>"
        />
    </targets>
    
    ##Rules
    <rules>
        <logger name="*" minlevel="Info" writeTo="adxtarget" />
    </rules>
    

    Aby uzyskać więcej opcji, zobacz Nlog connector (Łącznik Nlog).

  2. Wysyłanie danych przy użyciu ujścia NLog. Na przykład:

    logger.Info("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    logger.Error(exceptionObj, "This was exception");
    logger.Debug("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
    logger.Warn("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
    
  3. Skompiluj i uruchom aplikację. Jeśli na przykład używasz programu Visual Studio, naciśnij F5.

  4. Sprawdź, czy dane są w klastrze. W środowisku zapytania uruchom następujące zapytanie, zastępując symbol zastępczy nazwą użytej wcześniej tabeli:

    <TableName>
    | take 10
    

Uruchamianie przykładowej aplikacji

Przykładowa aplikacja generatora dzienników przedstawia sposób konfigurowania i używania ujścia NLog.

  1. Sklonuj repozytorium git ujścia NLog przy użyciu następującego polecenia git:

    git clone https://github.com/Azure/azure-kusto-nlog-sink.git
    
  2. Ustaw następujące zmienne środowiskowe, aby plik konfiguracji NLog mógł odczytywać je od razu ze środowiska:

    Zmienna opis
    INGEST_ENDPOINT Identyfikator URI pozyskiwania dla celu danych. Ten identyfikator URI został skopiowany w wymaganiach wstępnych.
    BAZA DANYCH W nazwie docelowej bazy danych uwzględniana jest wielkość liter.
    APP_ID Identyfikator klienta aplikacji wymagany do uwierzytelniania. Zapisano tę wartość w temacie Tworzenie rejestracji aplikacji Entra firmy Microsoft.
    APP_KEY Klucz aplikacji wymagany do uwierzytelniania. Zapisano tę wartość w sekcji Tworzenie rejestracji aplikacji Entra Firmy Microsoft.
    AZURE_TENANT_ID Identyfikator dzierżawy, w której zarejestrowano aplikację. Zapisano tę wartość w sekcji Tworzenie rejestracji aplikacji Entra Firmy Microsoft.

    Zmienne środowiskowe można ustawić ręcznie lub za pomocą następujących poleceń:

    $env:INGEST_ENDPOINT="<ingestionURI>"
    $env:APP_ID="<appId>"
    $env:APP_KEY="<appKey>"
    $env:AZURE_TENANT_ID="<tenant>"
    $env:DATABASE="<databaseName>"
    
  3. W terminalu przejdź do folderu głównego sklonowanego repozytorium i uruchom następujące dotnet polecenie, aby skompilować aplikację:

    cd .\NLog.Azure.Kusto.Samples\
    dotnet build
    
  4. W terminalu przejdź do folderu samples i uruchom następujące dotnet polecenie, aby uruchomić aplikację:

    dotnet run
    
  5. W środowisku zapytań wybierz docelową bazę danych i uruchom następujące zapytanie, aby eksplorować pozyskane dane.

    ADXNLogSample
    | take 10
    

    Dane wyjściowe powinny wyglądać podobnie do poniższej ilustracji:

    Zrzut ekranu przedstawiający tabelę z funkcją take 10 i wynikami