1. Omówienie
Aplikacje korzystające z generatywnej AI wymagają możliwości obserwacji jak każda inna aplikacja. Czy w przypadku generatywnej AI są wymagane specjalne techniki obserwowalności?
W tym module utworzysz prostą aplikację wykorzystującą generatywną AI. Wdróż ją w Cloud Run. Dodaj do niego niezbędne funkcje monitorowania i logowania, korzystając z usług i produktów dostrzegalności Google Cloud.
Czego się nauczysz
- napisać aplikację korzystającą z Vertex AI za pomocą edytora Cloud Shell.
- Przechowywanie kodu aplikacji w GitHubie
- Wdrażanie kodu źródłowego aplikacji w Cloud Run za pomocą interfejsu wiersza poleceń gcloud
- Dodawanie funkcji monitorowania i logowania do aplikacji z generatywną AI
- Korzystanie ze wskaźników opartych na logach
- Implementacja logowania i monitorowania za pomocą pakietu Open Telemetry SDK
- Informacje o odpowiedzialnym przetwarzaniu danych przez AI
2. Wymagania wstępne
Jeśli nie masz jeszcze konta Google, utwórz nowe konto.
3. Konfigurowanie projektu
- Zaloguj się w konsoli Google Cloud za pomocą konta Google.
- Utwórz nowy projekt lub użyj istniejącego. Zapisz identyfikator projektu, który został właśnie utworzony lub wybrany.
- Włącz płatności w projekcie.
- Przeprowadzenie tego ćwiczenia powinno kosztować mniej niż 5 USD.
- Aby uniknąć dalszych opłat, możesz usunąć zasoby, wykonując czynności podane na końcu tego laboratorium.
- Nowi użytkownicy mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
- Sprawdź, czy płatności są włączone w sekcji Moje projekty w Rozliczeniach usługi Google Cloud.
- Jeśli w kolumnie
Billing account
nowego projektu widać wartośćBilling is disabled
:- Kliknij 3 kropki w kolumnie
Actions
. - Kliknij Zmień rozliczenia.
- Wybierz konto rozliczeniowe, którego chcesz użyć.
- Kliknij 3 kropki w kolumnie
- Jeśli uczestniczysz w wydarzeniu na żywo, konto będzie prawdopodobnie nazywać się Próbne konto rozliczeniowe Google Cloud Platform.
- Jeśli w kolumnie
4. Przygotowanie edytora Cloud Shell
- Otwórz Edytor Cloud Shell. Jeśli pojawi się to pytanie o autoryzację Cloud Shell do wywoływania gcloud za pomocą Twoich danych logowania, kliknij Autoryzuj, aby kontynuować.
- Otwórz okno terminala
- Kliknij menu z 3 kreskami
- Kliknij Terminal.
- Kliknij Nowy terminal
.
- Kliknij menu z 3 kreskami
- W terminalu skonfiguruj identyfikator projektu:
Zastąpgcloud config set project [PROJECT_ID]
[PROJECT_ID]
identyfikatorem projektu. Jeśli np. identyfikator projektu tolab-example-project
, polecenie będzie wyglądać tak: Jeśli pojawi się komunikat, że gcloud prosi o Twoje dane logowania do interfejsu GCPI API, kliknij Autoryzuj, aby kontynuować.gcloud config set project lab-project-id-example
Po pomyślnym wykonaniu tej czynności powinien wyświetlić się komunikat: Jeśli widziszUpdated property [core/project].
WARNING
i pojawia się pytanieDo you want to continue (Y/N)?
, prawdopodobnie nieprawidłowo wpisano identyfikator projektu. Gdy znajdziesz prawidłowy identyfikator projektu, naciśnijN
, a potemEnter
i spróbuj ponownie uruchomić poleceniegcloud config set project
. - (Opcjonalnie) Jeśli masz problem ze znalezieniem identyfikatora projektu, uruchom to polecenie, aby wyświetlić identyfikatory wszystkich swoich projektów posortowane według czasu utworzenia w kolejności malejącej:
gcloud projects list \ --format='value(projectId,createTime)' \ --sort-by=~createTime
5. Włączanie interfejsów API Google
W terminalu włącz interfejsy API Google wymagane w tym module:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com \
cloudtrace.googleapis.com
Wykonanie tego polecenia może trochę potrwać. W efekcie wyświetli się komunikat o udanym przeprowadzeniu operacji podobny do tego:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
Jeśli pojawi się komunikat o błędzie rozpoczynający się od ERROR: (gcloud.services.enable) HttpError accessing
i zawierający informacje o błędzie podobne do tych poniżej, powtórz polecenie po 1–2 minutach.
"error": { "code": 429, "message": "Quota exceeded for quota metric 'Mutate requests' and limit 'Mutate requests per minute' of service 'serviceusage.googleapis.com' ...", "status": "RESOURCE_EXHAUSTED", ... }
6. Tworzenie aplikacji w Pythonie za pomocą Gen AI
Na tym etapie napiszesz kod prostej aplikacji działającej na podstawie żądań, która korzysta z modelu Gemini, aby wyświetlać 10 ciekawych faktów o wybranym przez Ciebie zwierzęciu. Aby utworzyć kod aplikacji, wykonaj te czynności.
- Utwórz w terminalu katalog
codelab-o11y
:mkdir ~/codelab-o11y
- Zmień bieżący katalog na
codelab-o11y
:cd ~/codelab-o11y
- Utwórz
requirements.txt
z listą zależności:cat > requirements.txt << EOF Flask==3.0.0 gunicorn==23.0.0 google-cloud-aiplatform==1.59.0 google-auth==2.32.0 EOF
- Utwórz plik
main.py
i otwórz go w edytorze Cloud Shell: W oknie edytora nad terminalem powinien pojawić się pusty plik. Ekran powinien wyglądać tak:cloudshell edit main.py
- Skopiuj ten kod i wklej go do otwartego pliku
main.py
: Po kilku sekundach edytor Cloud Shell automatycznie zapisze kod.import os from flask import Flask, request import google.auth import vertexai from vertexai.generative_models import GenerativeModel _, project = google.auth.default() app = Flask(__name__) @app.route('/') def fun_facts(): vertexai.init(project=project, location='us-central1') model = GenerativeModel('gemini-1.5-flash') animal = request.args.get('animal', 'dog') prompt = f'Give me 10 fun facts about {animal}. Return this as html without backticks.' response = model.generate_content(prompt) return response.text if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
Wdrażanie kodu aplikacji generatywnej AI w Cloud Run
- W oknie terminala uruchom polecenie, aby wdrożyć kod źródłowy aplikacji do Cloud Run.
Jeśli zobaczysz taki komunikat, oznacza to, że polecenie utworzy nowe repozytorium. Kliknijgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Proces wdrażania może potrwać kilka minut. Po zakończeniu procesu wdrażania zobaczysz dane wyjściowe podobne do tych:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Skopiuj wyświetlony adres URL usługi Cloud Run na osobną kartę lub do osobnego okna w przeglądarce. Możesz też uruchomić to polecenie w terminalu, aby wydrukować adres URL usługi, a potem kliknąć wyświetlony adres URL, przytrzymując klawisz Ctrl, aby go otworzyć:
Po otwarciu adresu URL może pojawić się błąd 500 lub komunikat:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Oznacza to, że usługi nie zostały wdrożone. Zaczekaj chwilę i odśwież stronę. Na końcu zobaczysz tekst zaczynający się od słów Ciekawostki o psach i zawierający 10 ciekawostek o tych zwierzętach.Sorry, this is just a placeholder...
Spróbuj wejść w interakcję z aplikacją, aby dowiedzieć się ciekawych faktów o różnych zwierzętach. Aby to zrobić, dodaj parametr animal
do adresu URL, np. ?animal=[ANIMAL]
, gdzie [ANIMAL]
to nazwa zwierzęcia. Na przykład dodaj ?animal=cat
, aby uzyskać 10 ciekawostek o kotach, lub ?animal=sea turtle
, aby uzyskać 10 ciekawostek o żółwiach morskich.
7. Sprawdzanie wywołań interfejsu Vertex API
Audyt wywołań interfejsu Google API pozwala uzyskać odpowiedzi na pytania w rodzaju „kto, gdzie i kiedy wywołał dany interfejs API?”. Weryfikacja jest ważna podczas rozwiązywania problemów z aplikacją, badania wykorzystania zasobów lub przeprowadzania analizy kryminalistycznej oprogramowania.
Logi kontrolne umożliwiają śledzenie działań administracyjnych i systemowych, a także rejestrowanie wywołań operacji interfejsu API „odczytywanie danych” i „zapisywanie danych”. Aby sprawdzić żądania Vertex AI dotyczące generowania treści, musisz włączyć logi kontrolne „Odczyt danych” w konsoli Cloud.
- Kliknij przycisk poniżej, aby otworzyć stronę Dzienniki kontrolne w konsoli Google Cloud
- Upewnij się, że na stronie wybrany jest projekt utworzony na potrzeby tego laboratorium. Wybrany projekt jest widoczny w lewym górnym rogu strony obok menu hamburgera:
W razie potrzeby wybierz odpowiedni projekt z menu. - W tabeli Konfiguracja logów kontrolnych dostępu do danych w kolumnie Usługa znajdź usługę
Vertex AI API
i kliknij pole wyboru po lewej stronie jej nazwy. - W panelu informacyjnym po prawej stronie wybierz typ audytu „Odczyt danych”.
- Kliknij Zapisz.
Aby wygenerować dzienniki kontrolne, otwórz adres URL usługi. Aby uzyskać inne wyniki, odśwież stronę, zmieniając wartość parametru ?animal=
.
Poznawanie dzienników kontrolnych
- Kliknij przycisk poniżej, aby otworzyć stronę Eksplorator logów w konsoli Google Cloud:
- Wklej ten filtr w panelu Zapytanie.
Panel Zapytanie to edytor znajdujący się u góry strony Eksplorator logów:LOG_ID("cloudaudit.googleapis.com%2Fdata_access") AND protoPayload.serviceName="aiplatform.googleapis.com"
- Kliknij Uruchom zapytanie.
- Wybierz jeden z wpisów w dzienniku kontrolnym i rozwiń pola, aby sprawdzić informacje zarejestrowane w dzienniku.
Możesz zobaczyć szczegóły wywołania interfejsu Vertex API, w tym użytą metodę i model. Możesz też zobaczyć tożsamość wywołującego i uprawnienia autoryzujące wywołanie.
8. Rejestrowanie interakcji z generatywną AI
W dziennikach kontrolnych nie ma parametrów żądania ani danych odpowiedzi interfejsu API. Te informacje mogą jednak być ważne w przypadku problemów z analizą aplikacji i przepływu pracy. W tym kroku wypełniamy tę lukę, dodając rejestrowanie aplikacji. Logowanie korzysta z klasycznego pakietu Pythona logging
. W środowisku produkcyjnym możesz używać innego frameworku rejestrowania, ale zasady są takie same.
Pakiet logging
w Pythonie nie wie, jak zapisywać logi w Google Cloud. Obsługuje zapisywanie do standardowego wyjścia (domyślnie stderr
) lub do pliku. Cloud Run zawiera jednak funkcje, które umożliwiają automatyczne przechwytywanie informacji drukowanych na standardowym wyjściu i przetwarzanie ich w Cloud Logging. Aby dodać do aplikacji generatywnej AI funkcje rejestrowania, postępuj zgodnie z podanymi niżej instrukcjami.
- Wróć do okna (lub karty) Cloud Shell w przeglądarce.
- W terminalu ponownie otwórz
main.py
:cloudshell edit ~/codelab-o11y/main.py
- Wprowadź te zmiany w kodzie aplikacji:
- odszukać ostatnie oświadczenie o importowaniu; Powinien to być wiersz 5:
Umieść kursor na następnym wierszu (wiersz 6) i wklej tam ten blok kodu.from vertexai.generative_models import GenerativeModel
import sys, json, logging class JsonFormatter(logging.Formatter): def format(self, record): json_log_object = { 'severity': record.levelname, 'message': record.getMessage(), } json_log_object.update(getattr(record, 'json_fields', {})) return json.dumps(json_log_object) logger = logging.getLogger(__name__) sh = logging.StreamHandler(sys.stdout) sh.setFormatter(JsonFormatter()) logger.addHandler(sh) logger.setLevel(logging.DEBUG)
- Znajdź kod, który wywołuje model do generowania treści. Powinien to być wiersz 30:
Umieść kursor na początku NASTĘPNEGO wiersza (wiersz 31) i wklej tam ten blok kodu.response = model.generate_content(prompt)
json_fields = { 'animal': animal, 'prompt': prompt, 'response': response.to_dict(), } logger.debug('content is generated', extra={'json_fields': json_fields})
stdout
, gdzie są one zbierane przez agenta logowania Cloud Run i asynchronicznie przesyłane do Cloud Logging. W logach znajdziesz parametry zwierzęcia z żądania oraz prompt i odpowiedź modelu.Po kilku sekundach edytor Cloud Shell automatycznie zapisuje zmiany. - odszukać ostatnie oświadczenie o importowaniu; Powinien to być wiersz 5:
Wdrażanie kodu aplikacji generatywnej AI w Cloud Run
- W oknie terminala uruchom polecenie, aby wdrożyć kod źródłowy aplikacji do Cloud Run.
Jeśli zobaczysz taki komunikat, oznacza to, że polecenie utworzy nowe repozytorium. Kliknijgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Proces wdrażania może potrwać kilka minut. Po zakończeniu procesu wdrażania zobaczysz dane wyjściowe podobne do tych:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Skopiuj wyświetlony adres URL usługi Cloud Run na osobną kartę lub do osobnego okna w przeglądarce. Możesz też uruchomić to polecenie w terminalu, aby wydrukować adres URL usługi, a potem kliknąć wyświetlony adres URL, przytrzymując klawisz Ctrl, aby go otworzyć:
Po otwarciu adresu URL może pojawić się błąd 500 lub komunikat:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Oznacza to, że usługi nie zostały wdrożone. Zaczekaj chwilę i odśwież stronę. Na końcu zobaczysz tekst zaczynający się od słów Ciekawostki o psach i zawierający 10 ciekawostek o tych zwierzętach.Sorry, this is just a placeholder...
Aby wygenerować dzienniki aplikacji, otwórz adres URL usługi. Aby uzyskać inne wyniki, odśwież stronę, zmieniając wartość parametru ?animal=
.
Aby wyświetlić logi aplikacji:
- Kliknij przycisk poniżej, aby otworzyć stronę Eksplorator logów w konsoli Google Cloud:
- Wklej ten filtr w panelu Zapytanie (pozycja 2 w interfejsie Eksploratora logów):
LOG_ID("run.googleapis.com%2Fstdout") AND severity=DEBUG
- Kliknij Uruchom zapytanie.
Wynik zapytania zawiera logi z promptem i odpowiedzią Vertex AI, w tym oceny bezpieczeństwa.
9. Liczenie interakcji z generatywną AI
Cloud Run zapisuje dane zarządzane, których można używać do monitorowania wdrożonych usług. Dane monitorowania zarządzane przez użytkowników zapewniają większą kontrolę nad danymi i częstotliwością ich aktualizacji. Wdrożenie takiej metryki wymaga napisania kodu, który zbiera dane i zapisują je w Cloud Monitoring. Aby dowiedzieć się, jak zaimplementować tę funkcję za pomocą pakietu OpenTelemetry SDK, przejdź do następnego (opcjonalnego) kroku.
Ten krok pokazuje alternatywę dla implementowania danych o użytkownikach w kodzie – dane oparte na logach. Dane oparte na logach umożliwiają generowanie danych monitorowania na podstawie wpisów logów zapisywanych przez aplikację w Cloud Logging. Do zdefiniowania danych typu licznik na podstawie dzienników aplikacji użyjemy dzienników aplikacji zaimplementowanych w poprzednim kroku. Dane zliczają liczbę udanych wywołań interfejsu Vertex API.
- Spójrz na okno Eksploratora logów, którego użyliśmy w poprzednim kroku. W panelu Zapytanie odszukaj menu Działania i kliknij je, aby je otworzyć. Menu znajdziesz na zrzucie ekranu poniżej:
- W otwartym menu kliknij Utwórz wskaźnik, aby otworzyć panel Utwórz wskaźnik oparty na logach.
- Aby skonfigurować nowy wskaźnik licznika w panelu Utwórz dane oparte na logach:
- Ustaw Typ wskaźnika: wybierz Licznik.
- W sekcji Szczegóły ustaw te pola:
- Nazwa wskaźnika logu: ustaw nazwę na
model_interaction_count
. Obowiązują pewne ograniczenia dotyczące nazw. Szczegółowe informacje znajdziesz w rozdziale dotyczącym rozwiązywania problemów z ograniczeniami dotyczącymi nazw. - Opis: wpisz opis danych. na przykład
Number of log entries capturing successful call to model inference.
. - Jednostki: pozostaw to pole puste lub wstaw cyfrę
1
.
- Nazwa wskaźnika logu: ustaw nazwę na
- Pozostaw wartości w sekcji Wybór filtra. Pamiętaj, że pole Filtrowanie wersji zawiera ten sam filtr, który został użyty do wyświetlenia dzienników aplikacji.
- (Opcjonalnie) Dodaj etykietę, która pomoże zliczać liczbę połączeń dla każdego zwierzęcia. UWAGA: ta etykieta może znacznie zwiększyć liczebność danych i nie jest zalecana do użytku w produkcji:
- Kliknij Dodaj etykietę.
- W sekcji Etykiety ustaw te pola:
- Nazwa etykiety: ustaw nazwę na
animal
. - Opis: wpisz opis etykiety. Na przykład:
Animal parameter
. - Typ etykiety: kliknij
STRING
. - Nazwa pola: wpisz
jsonPayload.animal
. - Wyrażenie regularne: pozostaw puste.
- Nazwa etykiety: ustaw nazwę na
- Kliknij przycisk Gotowe.
- Aby utworzyć dane, kliknij Utwórz dane.
Możesz też utworzyć wskaźnik oparty na logach na stronie Wskaźniki oparte na logach, używając gcloud logging metrics create
polecenia wiersza poleceń lub google_logging_metric
zasobu Terraform.
Aby wygenerować dane, otwórz adres URL usługi. Odśwież otwartą stronę kilka razy, aby wykonać kilka wywołań modelu. Podobnie jak wcześniej, spróbuj użyć w tym parametrze różnych zwierząt.
Wpisz zapytanie PromQL, aby wyszukać dane wskaźnika opartego na logach. Aby wpisać zapytanie PromQL:
- Kliknij przycisk poniżej, aby otworzyć stronę Eksplorator danych w konsoli Google Cloud:
- Na pasku narzędzi w panelu kreatora zapytań kliknij przycisk o nazwie < > MQL lub < > PromQL. Lokalizacja przycisku – patrz obraz poniżej.
- Sprawdź, czy w opcji Język wybrana jest opcja PromQL. Przełącznik języka znajduje się na tej samej belce narzędzi, która umożliwia formatowanie zapytania.
- Wpisz zapytanie w edytorze Zapytania:
Więcej informacji o używaniu PromQL znajdziesz w artykule PromQL w Cloud Monitoring.sum(rate(logging_googleapis_com:user_model_interaction_count{monitored_resource="cloud_run_revision"}[${__interval}]))
- Kliknij Uruchom zapytanie. Zobaczysz wykres liniowy podobny do tego:
Pamiętaj, że gdy włączony jest przełącznik Automatyczne uruchamianie, przycisk Uruchom zapytanie nie jest widoczny.
10. (Opcjonalnie) Używanie OpenTelemetry do monitorowania i śledzenia
Jak wspomnieliśmy w poprzednim kroku, dane można implementować za pomocą pakietu OpenTelemetry (Otel) SDK. Zalecane jest używanie usługi OTel w architekturach mikroserwisów. Ten krok obejmuje:
- Inicjowanie komponentów OTel w celu obsługi śledzenia i monitorowania aplikacji
- Wypełnianie konfiguracji OTel za pomocą metadanych zasobów środowiska Cloud Run
- Instrumentowanie aplikacji Flask z automatycznymi funkcjami śledzenia
- Wdrożenie licznika do monitorowania liczby udanych wywołań modelu
- Korelacja śledzenia z logami aplikacji
Zalecana architektura usług na poziomie usługi polega na użyciu kolektora Otel do zbierania i przetwarzania wszystkich danych dotyczących możliwości obserwacji w przypadku co najmniej jednej usługi. Ze względu na prostotę kod na tym etapie nie korzysta z kolekcjonera. Zamiast tego używa eksportów OTel, które zapisują dane bezpośrednio w Google Cloud.
Konfigurowanie komponentów usługi OTel na potrzeby monitorowania śledzenia i danych
- Wróć do okna (lub karty) Cloud Shell w przeglądarce.
- W terminalu zaktualizuj plik
requirements.txt
, dodając do niego listę dodatkowych zależności:cat >> ~/codelab-o11y/requirements.txt << EOF opentelemetry-api==1.24.0 opentelemetry-sdk==1.24.0 opentelemetry-exporter-otlp-proto-http==1.24.0 opentelemetry-instrumentation-flask==0.45b0 opentelemetry-instrumentation-requests==0.45b0 opentelemetry-exporter-gcp-trace==1.7.0 opentelemetry-exporter-gcp-monitoring==1.7.0a0 EOF
- Utwórz nowy plik
setup_opentelemetry.py
: W oknie edytora nad terminalem powinien pojawić się pusty plik.cloudshell edit ~/codelab-o11y/setup_opentelemetry.py
- Skopiuj ten kod i wklej go do otwartego pliku
setup_opentelemetry.py
: Po kilku sekundach edytor Cloud Shell automatycznie zapisze kod.import os from opentelemetry import metrics from opentelemetry import trace from opentelemetry.exporter.cloud_monitoring import CloudMonitoringMetricsExporter from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter from opentelemetry.resourcedetector.gcp_resource_detector import GoogleCloudResourceDetector from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.sdk.resources import get_aggregated_resources, Resource, CLOUD_ACCOUNT_ID, SERVICE_NAME from opentelemetry.sdk.trace.export import BatchSpanProcessor resource = get_aggregated_resources( [GoogleCloudResourceDetector(raise_on_error=True)] ) resource = resource.merge(Resource.create(attributes={ SERVICE_NAME: os.getenv("K_SERVICE"), })) meter_provider = MeterProvider( resource=resource, metric_readers=[ PeriodicExportingMetricReader( CloudMonitoringMetricsExporter(), export_interval_millis=5000 ) ], ) metrics.set_meter_provider(meter_provider) meter = metrics.get_meter(__name__) trace_provider = TracerProvider(resource=resource) processor = BatchSpanProcessor(CloudTraceSpanExporter( # send all resource attributes resource_regex=r".*" )) trace_provider.add_span_processor(processor) trace.set_tracer_provider(trace_provider) def google_trace_id_format(trace_id: int) -> str: project_id = resource.attributes[CLOUD_ACCOUNT_ID] return f'projects/{project_id}/traces/{trace.format_trace_id(trace_id)}'
Dodawanie do kodu aplikacji funkcji śledzenia i monitorowania za pomocą narzędzia OTel
- W terminalu ponownie otwórz
main.py
:cloudshell edit ~/codelab-o11y/main.py
- Wprowadź te zmiany w kodzie aplikacji:
- Przed wierszem
import os
(wiersz 1) wstaw ten kod (zwróć uwagę na pusty wiersz na końcu):from setup_opentelemetry import google_trace_id_format from opentelemetry import metrics, trace from opentelemetry.instrumentation.requests import RequestsInstrumentor from opentelemetry.instrumentation.flask import FlaskInstrumentor
- Po deklaracji metody
format()
(wiersz 9) wklej ten kod (zwróć uwagę na wcięcia):span = trace.get_current_span()
- Po wierszu 13 (zawierającym
"message": record.getMessage()
) wklej ten kod (zwróć uwagę na wcięcia): Te 2 dodatkowe atrybuty ułatwiają korelację dzienników aplikacji i zakresów śledzenia w usłudze OTel."logging.googleapis.com/trace": google_trace_id_format(span.get_span_context().trace_id), "logging.googleapis.com/spanId": trace.format_span_id(span.get_span_context().span_id),
- Po linii
app = Flask(__name__)
(wiersz 31) wklej ten kod: Te wiersze umożliwiają śledzenie wszystkich przychodzących i wychodzących żądań aplikacji Flask.FlaskInstrumentor().instrument_app(app) RequestsInstrumentor().instrument()
- Tuż po nowo dodanym kodzie (po wierszu 33) dodaj ten kod:
Te wiersze tworzą nowy wskaźnik typu licznik o nazwiemeter = metrics.get_meter(__name__) requests_counter = meter.create_counter( name="model_call_counter", description="number of model invocations", unit="1" )
model_call_counter
i rejestrują go na potrzeby eksportu. - Po wywołaniu
logger.debug()
(wiersz 49) wklej ten kod: Ta zmiana spowoduje zwiększenie licznika o 1 za każdym razem, gdy aplikacja wywoła interfejs Vertex API, aby wchodzić w interakcje z modelem Gemini.requests_counter.add(1, {'animal': animal})
- Przed wierszem
Wdrażanie kodu aplikacji generatywnej AI w Cloud Run
- W oknie terminala uruchom polecenie, aby wdrożyć kod źródłowy aplikacji do Cloud Run.
Jeśli zobaczysz taki komunikat, oznacza to, że polecenie utworzy nowe repozytorium. Kliknijgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Proces wdrażania może potrwać kilka minut. Po zakończeniu procesu wdrażania zobaczysz dane wyjściowe podobne do tych:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Skopiuj wyświetlony adres URL usługi Cloud Run na osobną kartę lub do osobnego okna w przeglądarce. Możesz też uruchomić to polecenie w terminalu, aby wydrukować adres URL usługi, a potem kliknąć wyświetlony adres URL, przytrzymując klawisz Ctrl, aby go otworzyć:
Po otwarciu adresu URL może pojawić się błąd 500 lub komunikat:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Oznacza to, że usługi nie zostały wdrożone. Zaczekaj chwilę i odśwież stronę. Na końcu zobaczysz tekst zaczynający się od słów Ciekawostki o psach i zawierający 10 ciekawostek o tych zwierzętach.Sorry, this is just a placeholder...
Aby wygenerować dane telemetryczne, otwórz adres URL usługi. Aby uzyskać inne wyniki, odśwież stronę, zmieniając wartość parametru ?animal=
.
Analiza śladów aplikacji
- Kliknij przycisk poniżej, aby otworzyć stronę Eksplorator logów czasu w konsoli Cloud:
- Wybierz jeden z najnowszych śladów. Powinieneś/powinnaś zobaczyć 5 lub 6 elementów, które wyglądają jak na zrzucie ekranu poniżej.
- Znajdź blok kodu, który śledzi wywołanie do metody obsługi zdarzenia (metoda
fun_facts
). Będzie to ostatni element o nazwie/
. - W panelu Szczegóły śledzenia kliknij Logi i zdarzenia. Zobaczysz logi aplikacji powiązane z tym konkretnym spanem. Korelacja jest wykrywana na podstawie identyfikatorów śledzenia i spanu w logu czasu. Powinieneś zobaczyć log aplikacji, który zawiera prompt i odpowiedź interfejsu Vertex API.
Wskaźnik licznika
- Kliknij przycisk poniżej, aby otworzyć stronę Eksplorator danych w konsoli Google Cloud:
- Na pasku narzędzi w panelu kreatora zapytań kliknij przycisk o nazwie < > MQL lub < > PromQL. Lokalizacja przycisku – patrz obraz poniżej.
- Sprawdź, czy w opcji Język wybrana jest opcja PromQL. Przełącznik języka znajduje się na tej samej belce narzędzi, która umożliwia formatowanie zapytania.
- Wpisz zapytanie w edytorze Zapytania:
sum(rate(workload_googleapis_com:model_call_counter{monitored_resource="generic_task"}[${__interval}]))
- Kliknij Uruchom zapytanie.Gdy włączony jest przełącznik Automatyczne uruchamianie, przycisk Uruchom zapytanie nie jest widoczny.
11. (Opcjonalnie) Zaciemnione informacje poufne z logów
W kroku 10 odnotowaliśmy informacje o interakcjach aplikacji z modelem Gemini. Informacje te obejmowały nazwę zwierzęcia, prompt i odpowiedź modelu. Przechowywanie tych informacji w dzienniku powinno być bezpieczne, ale niekoniecznie w wielu innych przypadkach. Prośba może zawierać dane osobowe lub wrażliwe, których użytkownik nie chce przechowywać. Aby to rozwiązać, możesz zafałszować dane wrażliwe zapisywane w Cloud Logging. Aby zminimalizować modyfikacje kodu, zalecamy zastosowanie tego rozwiązania.
- Tworzenie tematu Pub/Sub do przechowywania przychodzących wpisów w logach
- Utwórz ujście logów, które przekierowuje pozyskane logi do tematu Pub/Sub.
- Utwórz potok Dataflow, który modyfikuje dzienniki przekierowywane do tematu Pub/Sub. Aby to zrobić:
- Czytanie wpisu w logu z tematu PubSub
- Sprawdzanie danych wejściowych rekordu pod kątem informacji poufnych za pomocą interfejsu DLP inspection API
- Usuń informacje poufne z ładunku za pomocą jednej z metod zapobiegania utracie danych.
- Zapisywanie zafałszowanego wpisu w pliku logów w Cloud Logging
- Wdrażanie potoku
12. (Opcjonalnie) Czyszczenie
Aby uniknąć opłat za zasoby i interfejsy API używane w tym samouczku, zalecamy wyczyszczenie po jego ukończeniu. Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby tego samouczka.
- Aby usunąć projekt, uruchom w terminalu polecenie usuwania projektu:
Usunięcie projektu Cloud powoduje zaprzestanie naliczania opłat za wszystkie zasoby i interfejsy API używane w tym projekcie. Powinien pojawić się komunikat, w którymPROJECT_ID=$(gcloud config get-value project) gcloud projects delete ${PROJECT_ID} --quiet
PROJECT_ID
będzie identyfikatorem projektu:Deleted [https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID]. You can undo this operation for a limited period by running the command below. $ gcloud projects undelete PROJECT_ID See https://cloud.google.com/resource-manager/docs/creating-managing-projects for information on shutting down projects.
- (Opcjonalnie) Jeśli pojawi się błąd, w kroku 5 sprawdź, jak znaleźć identyfikator projektu użyty w tym module. Zastąp nim polecenie w pierwszej instrukcji. Jeśli np. identyfikator projektu to
lab-example-project
, polecenie będzie wyglądać tak:gcloud projects delete lab-project-id-example --quiet
13. Gratulacje
W tym module udało Ci się utworzyć aplikację generatywnej AI, która do prognozowania korzysta z modela Gemini. W aplikacji zostały też zaimplementowane podstawowe funkcje monitorowania i logowania. Wdrożysz aplikację i zmiany z kodu źródłowego w Cloud Run. Następnie możesz używać usług Google Cloud Observability do śledzenia wydajności aplikacji, aby mieć pewność, że jest ona niezawodna.
Jeśli chcesz wziąć udział w badaniu wrażeń użytkowników (UX), aby ulepszyć produkty, z których korzystasz, zarejestruj się tutaj.
Oto kilka opcji dalszej nauki:
- Codelab Wdrażanie aplikacji do czatu opartej na Gemini w Cloud Run
- Codelab Jak używać wywoływania funkcji Gemini z Cloud Run
- Jak za pomocą interfejsu Cloud Run Jobs Video Intelligence API przetwarzać filmy według scen
- Warsztat na żądanie Google Kubernetes Engine – wprowadzenie
- Dowiedz się więcej o konfigurowaniu wskaźników licznika i rozkładu za pomocą dzienników aplikacji
- Zapisywanie wskaźników OTLP za pomocą podrzędnego komponentu OpenTelemetry
- Informacje o korzystaniu z Open Telemetry w Google Cloud