Monitorowanie aplikacji dla Azure App Service i ASP.NET

Włączanie monitorowania aplikacji internetowych opartych ASP.NET na platformie Azure App Services jest teraz łatwiejsze niż kiedykolwiek wcześniej. Wcześniej trzeba było ręcznie instrumentować aplikację, ale najnowsze rozszerzenie/agent jest teraz domyślnie wbudowane App Service obrazie. Ten artykuł zawiera informacje na temat włączania monitorowania Azure Monitor aplikacji Szczegółowe informacje oraz wstępne wskazówki dotyczące automatyzacji procesu wdrożeń na dużą skalę.

Uwaga

Ręczne dodawanie rozszerzenia witryny application Szczegółowe informacje za pośrednictwemrozszerzeń narzędzi programistycznych jest przestarzałe. Ta metoda instalacji rozszerzenia była zależna od aktualizacji ręcznych dla każdej nowej wersji. Najnowsza stabilna wersja rozszerzenia jest teraz wstępnie zainstalowana jako część App Service obrazu. Pliki znajdują się w d:\Program Files (x86)\SiteExtensions\ApplicationInsightsAgent programie i są automatycznie aktualizowane przy użyciu każdej stabilnej wersji. Jeśli postępujesz zgodnie z instrukcjami opartymi na agentach, aby włączyć monitorowanie poniżej, automatycznie usunie ono przestarzałe rozszerzenie.

Uwaga

W przypadku wykrycia zarówno monitorowania opartego na agencie, jak i ręcznej instrumentacji opartej na zestawie SDK będą honorowane tylko ustawienia instrumentacji ręcznej. Ma to na celu zapobieganie wysłaniu zduplikowanych danych. Aby dowiedzieć się więcej na ten temat, zapoznaj się z sekcją rozwiązywania problemów poniżej.

Włączanie monitorowania opartego na agentach

Uwaga

Kombinacja APPINSIGHTS_JAVASCRIPT_ENABLED urlCompression nie jest obsługiwana. Aby uzyskać więcej informacji, zobacz wyjaśnienie w sekcji dotyczącej rozwiązywania problemów.

  1. Wybierz pozycję Szczegółowe informacje w panelu sterowania platformy Azure dla usługi aplikacji, a następnie wybierz pozycję Włącz.

    Zrzut ekranu przedstawiający kartę Szczegółowe informacje z wybraną pozycję Włącz.

  2. Wybierz utworzenie nowego zasobu lub wybierz istniejący zasób Szczegółowe informacje dla tej aplikacji.

    Uwaga

    Po kliknięciu przycisku OK w celu utworzenia nowego zasobu zostanie wyświetlony monit o zastosowanie ustawień monitorowania. Wybranie przycisku Kontynuuj spowoduje połączenie nowego zasobu Szczegółowe informacje aplikacji z usługą aplikacji. Spowoduje to również wyzwolenie ponownego uruchomienia usługi App Service.

    Zrzut ekranu przedstawiający menu rozwijane Zmienianie zasobu.

  3. Po określeniu zasobu do użycia możesz wybrać sposób zbierania danych przez usługę Application Insights na platformę dla aplikacji. ASP.NET monitorowania aplikacji jest domyślnie włączone z dwoma różnymi poziomami kolekcji.

    Zrzut ekranu przedstawia stronę Rozszerzenia Szczegółowe informacje aplikacji z wybraną grupę Utwórz nowy zasób.

    Poniżej znajduje się podsumowanie danych zebranych dla każdej trasy:

    Dane ASP.NET Kolekcja Podstawowa ASP.NET zalecana kolekcja
    Dodanie trendów użycia procesora, pamięci i operacji we/wy Tak Tak
    Zbieranie trendów użycia z możliwością korelacji wyników dostępności z transakcjami Tak Tak
    Zbieranie wyjątków nieobsłużonych przez proces hosta Tak Tak
    Zwiększenie dokładności metryki APM pod obciążeniem, gdy jest używane próbkowanie Tak Tak
    Korelowanie mikrousług ponad granicami żądań/zależności Nie (tylko możliwości APM z jednym wystąpieniem) Tak
  4. Aby skonfigurować próbkowanie, które można wcześniej kontrolować za pośrednictwem pliku applicationinsights.config, można teraz wchodzić z nim w interakcje za pośrednictwem ustawień aplikacji z odpowiednim prefiksem MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor .

    • Aby na przykład zmienić wartość procentową próbkowania początkowego, możesz utworzyć ustawienie Aplikacja o wartości MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage : i 100 .

    • Aby wyłączyć próbkowanie, MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage ustaw na wartość 100 .

    • Obsługiwane ustawienia obejmują:

      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_EvaluationInterval
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MaxTelemetryItemsPerSecond
    • Listę obsługiwanych ustawień i definicji procesora telemetrii próbkowania adaptacyjnego można znaleźć w dokumentacji dotyczącej kodu i próbkowania.

Włączanie monitorowania po stronie klienta

Monitorowanie po stronie klienta jest opt-in dla ASP.NET. Aby włączyć monitorowanie po stronie klienta:

  • Ustawieniakonfiguracji
    • W obszarze Ustawienia aplikacji utwórz nowe ustawienie aplikacji:

      Nazwa: APPINSIGHTS_JAVASCRIPT_ENABLED

      Wartość: true

    • Zapisz ustawienia i ponownie uruchom aplikację.

Aby wyłączyć monitorowanie po stronie klienta, usuń skojarzoną parę wartości klucza z ustawień aplikacji lub ustaw wartość false.

Automatyzowanie monitorowania

Aby włączyć zbieranie danych telemetrycznych za pomocą usługi Application Szczegółowe informacje, należy ustawić tylko ustawienia aplikacji:

Zrzut ekranu App Service application Ustawienia z ustawieniami Szczegółowe informacje aplikacji.

Definicje ustawień aplikacji

Nazwa ustawienia aplikacji Definicja Wartość
ApplicationInsightsAgent_EXTENSION_VERSION Rozszerzenie główne, które kontroluje monitorowanie środowiska uruchomieniowego. ~2
XDT_MicrosoftApplicationInsights_Mode W trybie domyślnym w celu zapewnienia optymalnej wydajności są włączone tylko podstawowe funkcje. default lub recommended.
InstrumentationEngine_EXTENSION_VERSION Określa, czy aparat ponownego agwania InstrumentationEngine binarnego zostanie włączony. To ustawienie ma wpływ na wydajność i ma wpływ na zimny czas uruchamiania/uruchamiania. ~1
XDT_MicrosoftApplicationInsights_BaseExtensions Określa, SQL & tekst tabeli platformy Azure zostanie przechwycony wraz z wywołaniami zależności. Ostrzeżenie o wydajności: będzie to mieć wpływ na zimny czas uruchamiania aplikacji. To ustawienie wymaga wartości InstrumentationEngine . ~1

App Service ustawienia aplikacji za pomocą Azure Resource Manager

Ustawienia aplikacji dla App Services można zarządzać i konfigurować za pomocą Azure Resource Manager szablonów. Tej metody można użyć podczas wdrażania nowych App Service zasobów za pomocą Azure Resource Manager automatyzacji lub modyfikowania ustawień istniejących zasobów.

Poniżej przedstawiono podstawową strukturę danych JSON ustawień aplikacji dla usługi App Service:

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

Na przykład szablonu usługi Azure Resource Manager z ustawieniami aplikacji skonfigurowanymi dla usługi Application Szczegółowe informacje ten szablon może być przydatny, w szczególności w sekcji rozpoczynającej się od wiersza 238.

Aby utworzyć szablon Azure Resource Manager ze skonfigurowanymi wszystkimi domyślnymi ustawieniami usługi Application Szczegółowe informacje, rozpocznij proces tak, jakby chcesz utworzyć nową aplikację internetową z włączonymi ustawieniami usługi Application Szczegółowe informacje.

  1. Utwórz nowy zasób App Service z informacjami o żądanej aplikacji internetowej. Włączono Szczegółowe informacje na karcie Monitorowanie.

  2. Wybierz pozycję Przejrzyj i utwórz, a następnie pozycję Pobierz szablon automatyzacji u dołu.

    Zrzut ekranu App Service menu tworzenia aplikacji internetowej.

    Ta opcja generuje najnowszy szablon Azure Resource Manager ze skonfigurowanymi wszystkimi wymaganymi ustawieniami.

    Zrzut ekranu App Service szablonu aplikacji internetowej.

Poniżej znajduje się przykład, zamień wszystkie wystąpienia obiektu AppMonitoredSite na swoją nazwę witryny:

{
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

Włączanie za pomocą programu PowerShell

Aby umożliwić monitorowanie aplikacji za pomocą programu PowerShell, należy zmienić tylko podstawowe ustawienia aplikacji. Poniżej znajduje się przykład, który umożliwia monitorowanie aplikacji dla witryny internetowej o nazwie "AppMonitoredSite" w grupie zasobów "AppMonitoredRG" i konfiguruje dane do wysłania do klucza instrumentacji "012345678-abcd-ef01-2345-6789abcd".

Uwaga

W tym artykule jest używany moduł Azure Az programu PowerShell, który jest zalecanym modułem programu PowerShell do interakcji z platformą Azure. Aby rozpocząć pracę z modułem Azure PowerShell, zobacz Instalowanie programu Azure PowerShell. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

Uaktualnianie rozszerzenia/agenta monitorowania — .NET

Uaktualnianie z wersji 2.8.9 lub starszej

Uaktualnienie z wersji 2.8.9 odbywa się automatycznie, bez żadnych dodatkowych akcji. Nowe bity monitorowania są dostarczane w tle do docelowej usługi aplikacji, a po ponownym uruchomieniu aplikacji zostaną one wybrane.

Aby sprawdzić, która wersja rozszerzenia jest uruchomiona, przejdź https://yoursitename.scm.azurewebsites.net/ApplicationInsights do .

Zrzut ekranu przedstawiający ścieżkę adresu URL w celu sprawdzenia wersji uruchomionego rozszerzenia.

Uaktualnianie z wersji 1.0.0 do 2.6.5

Począwszy od wersji 2.8.9 używane jest wstępnie zainstalowane rozszerzenie lokacji. Jeśli masz wcześniejszą wersję, możesz ją zaktualizować za pomocą jednego z dwóch sposobów:

Jeśli uaktualnienie zostało wykonane z wersji wcześniejszej niż 2.5.1, sprawdź, czy biblioteki dll ApplicationInsigths zostały usunięte z folderu application bin, zobacz kroki rozwiązywania problemów.

Rozwiązywanie problemów

Uwaga

Podczas tworzenia aplikacji internetowej za pomocą środowisk uruchomieniowych w usłudze Azure App Services wdraża pojedynczą statyczną stronę ASP.NET HTML jako startową witrynę internetową. Nie zaleca się rozwiązywania problemów z szablonem domyślnym. Wd wdrażaj aplikację przed rozwiązywaniem problemu.

Poniżej znajduje się nasz przewodnik rozwiązywania problemów krok po kroku dotyczący monitorowania opartego na rozszerzeniach/agentach dla aplikacji ASP.NET działających na platformie Azure App Services.

  1. Sprawdź, ApplicationInsightsAgent_EXTENSION_VERSION czy ustawienie aplikacji ma wartość "~2".

  2. Przejdź na stronę https://yoursitename.scm.azurewebsites.net/ApplicationInsights.

    Zrzut ekranu przedstawiający link powyżej strony wyników.

    • Potwierdź, Application Insights Extension Status że Pre-Installed Site Extension, version 2.8.x.xxxx, is running.

      Jeśli nie jest uruchomiona, postępuj zgodnie z instrukcjami dotyczącymi włączania usługi Application Szczegółowe informacje monitorowania.

    • Upewnij się, że źródło stanu istnieje i wygląda następująco: Status source D:\home\LogFiles\ApplicationInsights\status\status_RD0003FF0317B6_4248_1.json

      Jeśli podobnej wartości nie ma, oznacza to, że aplikacja nie jest obecnie uruchomiona lub nie jest obsługiwana. Aby upewnić się, że aplikacja jest uruchomiona, spróbuj ręcznie odwiedzić adres URL aplikacji/punkty końcowe aplikacji, co umożliwi dostęp do informacji o środowisku uruchomieniowym.

    • Upewnij się, że jest to , dodaj i z identyfikatorem IKeyExiststrue GUID falseAPPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING ikey do ustawień aplikacji.

    • Upewnij się, że nie ma żadnych wpisów AppAlreadyInstrumented dla AppContainsDiagnosticSourceAssembly , i AppContainsAspNetTelemetryCorrelationAssembly .

      Jeśli którykolwiek z tych wpisów istnieje, usuń z aplikacji następujące pakiety: Microsoft.ApplicationInsightsSystem.Diagnostics.DiagnosticSource , i Microsoft.AspNet.TelemetryCorrelation .

Domyślna witryna internetowa wdrożona za pomocą aplikacji internetowych nie obsługuje automatycznego monitorowania po stronie klienta

Podczas tworzenia aplikacji internetowej za pomocą środowisk uruchomieniowych w usłudze Azure App Services wdraża pojedynczą statyczną stronę ASP.NET HTML jako startową witrynę internetową. Statyczna strona internetowa ładuje również zarządzany ASP.NET Web Part w usługach IIS. Umożliwia to testowanie bez kodu monitorowania po stronie serwera, ale nie obsługuje automatycznego monitorowania po stronie klienta.

Jeśli chcesz przetestować monitorowanie serwera bez kodu i monitorowania po stronie klienta dla usługi ASP.NET w aplikacji internetowej usługi Azure App Services, zalecamy, aby skorzystać z oficjalnych przewodników dotyczących tworzenia aplikacji internetowej platformy ASP.NET Framework, a następnie skorzystać z instrukcji w bieżącym artykule, aby włączyć monitorowanie.

APPINSIGHTS_JAVASCRIPT_ENABLED i urlCompression nie są obsługiwane

Jeśli używasz wartości APPINSIGHTS_JAVASCRIPT_ENABLED=true w przypadkach, w których zawartość jest kodowana, mogą wystąpić błędy, takie jak:

  • Błąd ponownego 500 adresów URL
  • Błąd modułu ponownego 500.53 adresu URL z regułami ponownego napiszenia komunikatu dla ruchu wychodzącego nie można zastosować, gdy zawartość odpowiedzi HTTP jest zakodowana ("gzip").

Jest to spowodowane tym, APPINSIGHTS_JAVASCRIPT_ENABLED ustawienie aplikacji ma wartość true i kodowanie zawartości jest obecne w tym samym czasie. Ten scenariusz nie jest jeszcze obsługiwany. Obejście to usunięcie APPINSIGHTS_JAVASCRIPT_ENABLED z ustawień aplikacji. Niestety oznacza to, że jeśli instrumentacja JavaScript po stronie klienta/przeglądarki jest nadal wymagana, wymagane są ręczne odwołania do zestawu SDK na stronach internetowych. Postępuj zgodnie z instrukcjami dotyczącymi ręcznej instrumentacji przy użyciu zestawu SDK języka JavaScript.

Aby uzyskać najnowsze informacje na temat agenta/rozszerzenia application Szczegółowe informacje, zapoznaj się z informacjami o wersji.

Parametrów połączenia i klucza instrumentacji

W przypadku korzystania z monitorowania bez kodu wymagane są tylko te ciągi połączenia. Jednak nadal zalecamy ustawienie klucza instrumentacji w celu zachowania zgodności z poprzednimi wersjami zestawu SDK w przypadku ręcznej instrumentacji.

Różnica między metrykami standardowymi a metrykami Szczegółowe informacje a Azure App Service metrykami?

Aplikacja Szczegółowe informacje dane telemetryczne dla żądań, które zostały wprowadzone do aplikacji. Jeśli błąd wystąpił w aplikacjach webapps/webserver, a żądanie nie dotarło do aplikacji użytkownika, Szczegółowe informacje nie będzie mieć żadnych danych telemetrycznych dotyczących tej aplikacji.

Czas trwania obliczony przez usługę Application Szczegółowe informacje niekoniecznie jest zgodny z czasem odpowiedzi serwera zaobserwowanym przez serverresponsetime Web Apps. Dzieje się tak, Szczegółowe informacje aplikacja zlicza czas trwania tylko wtedy, gdy żądanie faktycznie dociera do aplikacji użytkownika. Jeśli żądanie zostało zablokowane/w kolejce na serwerze internetowym, ten czas oczekiwania zostanie uwzględniony w metrykach aplikacji internetowej, ale nie w metrykach Szczegółowe informacje aplikacji.

Php i WordPress nie są obsługiwane

Witryny PHP i WordPress nie są obsługiwane. Obecnie nie jest oficjalnie obsługiwany zestaw SDK/agent do monitorowania tych obciążeń po stronie serwera. Jednak ręczne instrumentowanie transakcji po stronie klienta w witrynie PHP lub WordPress przez dodanie kodu JavaScript po stronie klienta do stron internetowych można wykonać przy użyciu zestawu SDK języka JavaScript.

W poniższej tabeli przedstawiono bardziej szczegółowe wyjaśnienie, co oznaczają te wartości, ich przyczyny i zalecane poprawki:

Wartość problemu Wyjaśnienie Wprowadzanie poprawek
AppAlreadyInstrumented:true Ta wartość wskazuje, że rozszerzenie wykryło, że jakiś aspekt zestawu SDK jest już obecny w aplikacji i zostanie cofnieny. Może to być spowodowane odwołaniem do System.Diagnostics.DiagnosticSourceMicrosoft.AspNet.TelemetryCorrelation , lub Microsoft.ApplicationInsights Usuń odwołania. Niektóre z tych odwołań są dodawane domyślnie z niektórych szablonów Visual Studio, a starsze wersje programu Visual Studio mogą dodawać odwołania do Microsoft.ApplicationInsights programu .
AppAlreadyInstrumented:true Jeśli aplikacja jest ukierunkowana na ASP.NET Core 2.1 lub 2.2, ta wartość wskazuje, że rozszerzenie wykryło, że jakiś aspekt zestawu SDK jest już obecny w aplikacji i zostanie odwróceni Klientom korzystającym z oprogramowania .NET Core 2.1,2.2 zaleca się zamiast tego Microsoft.AspNetCore.App metapakiet. Ponadto włącz "Interop with Application Szczegółowe informacje SDK" (Interop with Application Szczegółowe informacje SDK) w portalu (zobacz powyższe instrukcje).
AppAlreadyInstrumented:true Ta wartość może być również spowodowana obecnością powyższych bibliotek DLL w folderze app z poprzedniego wdrożenia. Wyczyść folder app, aby upewnić się, że te biblioteki dll zostały usunięte. Sprawdź zarówno katalog bin aplikacji lokalnej, jak i katalog wwwroot w App Service. (Aby sprawdzić katalog wwwroot aplikacji internetowej App Service: Narzędzia zaawansowane (Kudu) > Debugowanie konsoli > CMD > home\site\wwwroot).
AppContainsAspNetTelemetryCorrelationAssembly: true Ta wartość wskazuje, że rozszerzenie wykryło odwołania do w Microsoft.AspNet.TelemetryCorrelation aplikacji i cofnie się. Usuń odwołanie.
AppContainsDiagnosticSourceAssembly**:true Ta wartość wskazuje, że rozszerzenie wykryło odwołania do w System.Diagnostics.DiagnosticSource aplikacji i cofnie się. Na ASP.NET usuń odwołanie.
IKeyExists:false Ta wartość wskazuje, że klucz instrumentacji nie jest obecny w appSetting, APPINSIGHTS_INSTRUMENTATIONKEY . Możliwe przyczyny: wartości mogą zostać przypadkowo usunięte, nie zostały ustawione w skrypcie automatyzacji itp. Upewnij się, że ustawienie znajduje się w App Service aplikacji.

Informacje o wersji

Aby uzyskać najnowsze aktualizacje i poprawki usterek, zapoznaj się z informacjami o wersji.

Następne kroki