1. Przegląd
Aplikacje generatywnej AI wymagają możliwości obserwacji tak samo jak inne aplikacje. Czy w przypadku generatywnej AI wymagane są specjalne techniki obserwacji?
W tym module utworzysz prostą aplikację generatywnej AI. wdrożyć go w Cloud Run; Skonfiguruj w niej podstawowe funkcje monitorowania i logowania za pomocą usług i produktów Google Cloud do obserwacji.
Czego się nauczysz
- Napisz aplikację, która korzysta 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ą gcloud CLI
- Dodawanie funkcji monitorowania i logowania do aplikacji generatywnej AI
- Korzystanie ze wskaźników opartych na logach
- Implementowanie logowania i monitorowania za pomocą pakietu Open Telemetry SDK
- Uzyskiwanie informacji o odpowiedzialnym postępowaniu z danymi AI
2. Wymagania wstępne
Jeśli nie masz jeszcze konta Google, musisz utworzyć nowe konto.
3. Konfigurowanie projektu
- Zaloguj się w konsoli Google Cloud za pomocą konta Google.
- Utwórz nowy projekt lub użyj już istniejącego. Zapisz identyfikator utworzonego lub wybranego projektu.
- Włącz płatności w projekcie.
- Pod względem opłat za zasoby ukończenie tego modułu powinno kosztować mniej niż 5 USD.
- Jeśli chcesz uniknąć dalszych opłat, wykonaj czynności opisane na końcu tego modułu, aby usunąć zasoby.
- 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 accountprzy nowym projekcie widnieje symbolBilling is disabled:- Kliknij 3 kropki w kolumnie
Actions. - Kliknij Zmień płatności.
- Wybierz konto rozliczeniowe, którego chcesz używać.
- Kliknij 3 kropki w kolumnie
- Jeśli uczestniczysz w wydarzeniu na żywo, konto prawdopodobnie będzie się nazywać Próbne konto rozliczeniowe Google Cloud Platform.
- Jeśli w kolumnie
4. Przygotowywanie edytora Cloud Shell
- Otwórz edytor Cloud Shell. Jeśli pojawi się komunikat z prośbą o autoryzację Cloud Shell do wywoływania gcloud przy użyciu Twoich danych logowania, kliknij Autoryzuj, aby kontynuować.

- Otwórz okno terminala.
- Kliknij menu
. - Kliknij Terminal.
- Kliknij Nowy terminal
.
- Kliknij menu
- W terminalu skonfiguruj identyfikator projektu:
Zastąpgcloud config set project [PROJECT_ID][PROJECT_ID]identyfikatorem projektu. Jeśli na przykład identyfikator projektu tolab-example-project, polecenie będzie wyglądać tak: Jeśli pojawi się komunikat z informacją, że narzędzie 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 operacji powinien pojawić się ten komunikat: Jeśli widzisz symbolUpdated property [core/project].
WARNINGi pojawia się pytanieDo you want to continue (Y/N)?, prawdopodobnie identyfikator projektu został wpisany nieprawidłowo. NaciśnijN, a potemEnteri spróbuj ponownie uruchomić poleceniegcloud config set projectpo znalezieniu prawidłowego identyfikatora projektu. - (Opcjonalnie) Jeśli masz problem ze znalezieniem identyfikatora projektu, uruchom to polecenie, aby wyświetlić identyfikatory wszystkich 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 laboratorium:
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 końcu wyświetli się komunikat o powodzeniu podobny do tego:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
Jeśli pojawi się komunikat o błędzie zaczynający się od ERROR: (gcloud.services.enable) HttpError accessing i zawierający szczegóły błędu, takie jak poniżej, spróbuj ponownie wykonać 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 z generatywną AI
W tym kroku napiszesz kod prostej aplikacji opartej na żądaniach, która używa modelu Gemini do wyświetlania 10 ciekawostek o wybranym przez Ciebie zwierzęciu. Aby utworzyć kod aplikacji, wykonaj te czynności:
- W terminalu utwórz katalog
codelab-o11y:mkdir ~/codelab-o11y - Zmień bieżący katalog na
codelab-o11y:cd ~/codelab-o11y - Utwórz plik
requirements.txtz 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.pyi otwórz go w edytorze Cloud Shell: W oknie edytora nad terminalem powinien pojawić się pusty plik. Ekran będzie wyglądać podobnie do tego:cloudshell edit main.py
- Skopiuj ten kod i wklej go do otwartego pliku
main.py: Po kilku sekundach edytor Cloud Shell automatycznie zapisze Twój 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 Gen AI w Cloud Run
- W oknie terminala uruchom polecenie, aby wdrożyć kod źródłowy aplikacji w Cloud Run.
Jeśli zobaczysz poniższy komunikat informujący, że polecenie utworzy nowe repozytorium. Kliknijgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticatedEnter. 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 do osobnej karty lub okna w przeglądarce. Możesz też uruchomić to polecenie w terminalu, aby wydrukować adres URL usługi, a następnie 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. Odczekaj chwilę i odśwież stronę. Na końcu zobaczysz tekst zaczynający się od Ciekawostki o psach i zawierający 10 ciekawostek o psach.Sorry, this is just a placeholder...
Spróbuj wejść w interakcję z aplikacją, aby poznać ciekawe fakty o różnych zwierzętach. Aby to zrobić, dodaj do adresu URL parametr animal, 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
Kontrolowanie wywołań interfejsów API Google pozwala odpowiedzieć na pytania takie jak „Kto, gdzie i kiedy wywołał konkretny interfejs API?”. Audyt jest ważny podczas rozwiązywania problemów z aplikacją, badania zużycia zasobów lub przeprowadzania analizy kryminalistycznej oprogramowania.
Logi kontrolne umożliwiają śledzenie działań administracyjnych i systemowych, a także rejestrowanie wywołań operacji API „odczyt danych” i „zapis danych”. Aby kontrolować żą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ę Logi kontrolne w konsoli Cloud.
- Sprawdź, czy na stronie jest wybrany projekt utworzony na potrzeby tego modułu. Wybrany projekt jest widoczny w lewym górnym rogu strony, po prawej stronie menu z 3 paskami:

W razie potrzeby wybierz właściwy projekt z pola kombi. - W tabeli Konfiguracja logów kontrolnych dostępu do danych w kolumnie Usługa znajdź usługę
Vertex AI APIi wybierz ją, zaznaczając pole wyboru po lewej stronie nazwy usługi.
- W panelu informacji po prawej stronie wybierz typ audytu „Odczyt danych”.

- Kliknij Zapisz.
Aby wygenerować logi kontrolne, otwórz adres URL usługi. Odśwież stronę, zmieniając wartość parametru ?animal=, aby uzyskać różne wyniki.
Przeglądaj logi kontrolne
- 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 wyświetlać szczegóły wywołania interfejsu Vertex API, w tym metodę i użyty model. Możesz też sprawdzić tożsamość osoby wywołującej funkcję i uprawnienia, które zezwoliły na wywołanie.
8. Rejestrowanie interakcji z generatywną AI
W dziennikach kontrolnych nie znajdziesz parametrów żądań do interfejsu API ani danych odpowiedzi. Te informacje mogą być jednak ważne przy rozwiązywaniu problemów z aplikacjami i analizowaniu przepływów pracy. W tym kroku wypełnimy tę lukę, dodając rejestrowanie aplikacji. Logowanie korzysta z klasycznego pakietu logging języka Python. W środowisku produkcyjnym możesz używać innego frameworka rejestrowania, ale zasady są takie same.
Pakiet Pythona logging nie wie, jak zapisywać logi w Google Cloud. Obsługuje zapisywanie w standardowym wyjściu (domyślnie stderr) lub w pliku. Cloud Run automatycznie rejestruje informacje drukowane na standardowe wyjście i przesyła je do Cloud Logging. Aby dodać do aplikacji generatywnej AI funkcje logowania, wykonaj czynności opisane poniżej.
- Wróć do okna (lub karty) „Cloud Shell” w przeglądarce.
- Ponownie otwórz terminal
main.py:cloudshell edit ~/codelab-o11y/main.py - Wprowadź w kodzie aplikacji te zmiany:
- Znajdź ostatnie oświadczenie o imporcie. Powinien to być wiersz 5:
Umieść kursor w 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 w celu wygenerowania treści. Powinien to być wiersz 30:
Ustaw 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. Dzienniki rejestrują parametr „animal” żądania oraz prompt i odpowiedź modelu.Po kilku sekundach edytor Cloud Shell automatycznie zapisuje zmiany. - Znajdź ostatnie oświadczenie o imporcie. Powinien to być wiersz 5:
Wdrażanie kodu aplikacji Gen AI w Cloud Run
- W oknie terminala uruchom polecenie, aby wdrożyć kod źródłowy aplikacji w Cloud Run.
Jeśli zobaczysz poniższy komunikat informujący, że polecenie utworzy nowe repozytorium. Kliknijgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticatedEnter. 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 do osobnej karty lub okna w przeglądarce. Możesz też uruchomić to polecenie w terminalu, aby wydrukować adres URL usługi, a następnie 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. Odczekaj chwilę i odśwież stronę. Na końcu zobaczysz tekst zaczynający się od Ciekawostki o psach i zawierający 10 ciekawostek o psach.Sorry, this is just a placeholder...
Aby wygenerować dzienniki aplikacji, otwórz adres URL usługi. Odśwież stronę, zmieniając wartość parametru ?animal=, aby uzyskać różne wyniki.
Aby wyświetlić logi aplikacji:
- Kliknij przycisk poniżej, aby otworzyć stronę Eksplorator logów w konsoli Cloud:
- Wklej ten filtr w panelu Zapytanie (nr 2 na 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. Zliczanie interakcji z generatywną AI
Cloud Run zapisuje zarządzane dane, których można używać do monitorowania wdrożonych usług. Dane monitorowania zarządzane przez użytkownika zapewniają większą kontrolę nad danymi i częstotliwością aktualizacji danych. Aby wdrożyć taki rodzaj danych, musisz napisać kod, który zbiera dane i zapisuje je w Cloud Monitoring. W następnym (opcjonalnym) kroku znajdziesz informacje o tym, jak zaimplementować to rozwiązanie za pomocą pakietu SDK OpenTelemetry.
Ten krok pokazuje alternatywę dla implementowania w kodzie danych o użytkownikach – dane oparte na logach. Wskaźniki oparte na logach umożliwiają generowanie wskaźników monitorowania na podstawie wpisów logu, które aplikacja zapisuje w Cloud Logging. Aby zdefiniować wskaźnik oparty na logach typu licznik, użyjemy logów aplikacji, które zostały zaimplementowane w poprzednim kroku. Dane będą zliczać 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 znajdź menu Działania i kliknij je, aby otworzyć. Menu znajdziesz na zrzucie ekranu poniżej:

- W otwartym menu wybierz Utwórz wskaźnik, aby otworzyć panel Utwórz wskaźnik oparty na logach.
- Aby skonfigurować nowy wskaźnik licznika w panelu Utwórz wskaźnik oparty na logach, wykonaj te czynności:
- 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 nazewnictwa. Więcej informacji znajdziesz w sekcji Rozwiązywanie problemów. - Opis: wpisz opis danych. Na przykład
Number of log entries capturing successful call to model inference. - Units (Jednostki): pozostaw puste pole lub wstaw cyfrę
1.
- Nazwa wskaźnika logu: ustaw nazwę na
- Pozostaw wartości w sekcji Wybór filtra. Zwróć uwagę, że w polu Build filter (Utwórz filtr) znajduje się ten sam filtr, którego użyliśmy do wyświetlenia logów aplikacji.
- (Opcjonalnie) Dodaj etykietę, która pomoże Ci zliczyć liczbę połączeń dotyczących każdego zwierzęcia. UWAGA: ta etykieta może znacznie zwiększyć liczebność danych i nie jest zalecana do użycia w środowisku produkcyjnym:
- 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. - Regular expression (Wyrażenie regularne): pozostaw puste.
- Nazwa etykiety: ustaw nazwę na
- Kliknij przycisk Gotowe.
- Aby utworzyć dane, kliknij Utwórz dane.
Wskaźnik oparty na logach możesz też utworzyć na stronie Wskaźniki oparte na logach za pomocą gcloud logging metrics create polecenia CLI lub google_logging_metric zasobu Terraform.
Aby wygenerować dane o metrykach, otwórz adres URL usługi. Odśwież otwartą stronę kilka razy, aby wykonać wiele wywołań modelu. Podobnie jak wcześniej, spróbuj użyć w 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ę Metrics Explorer w konsoli Cloud:
- Na pasku narzędzi w panelu narzędzia do tworzenia zapytań kliknij przycisk o nazwie < > MQL lub < > PromQL. Lokalizację przycisku znajdziesz na ilustracji poniżej.

- Sprawdź, czy w przełączniku Język wybrana jest opcja PromQL. Przełącznik języka znajduje się na tym samym pasku narzędzi, który umożliwia formatowanie zapytania.
- Wpisz zapytanie w edytorze Zapytań:
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. Wyświetli się wykres liniowy podobny do tego na zrzucie ekranu:

Pamiętaj, że gdy włączony jest przełącznik Automatyczne uruchamianie, nie jest widoczny przycisk Uruchom zapytanie.
10. (Opcjonalnie) Używanie OpenTelemetry do monitorowania i śledzenia
Jak wspomnieliśmy w poprzednim kroku, dane można wdrażać za pomocą pakietu OpenTelemetry (Otel) SDK. Korzystanie z OTel w architekturach mikroserwisów jest zalecaną praktyką. Ten krok obejmuje:
- Inicjowanie komponentów OTel w celu obsługi śledzenia i monitorowania aplikacji
- Wypełnianie konfiguracji OTel metadanymi zasobów środowiska Cloud Run
- Dodawanie do aplikacji Flask kodu umożliwiającego korzystanie z automatycznego śledzenia
- Wdrożenie wskaźnika licznika do monitorowania liczby udanych wywołań modelu
- Korelacja śledzenia z logami aplikacji
Zalecana architektura usług na poziomie produktu to używanie kolektora OTel do zbierania i przetwarzania wszystkich danych dotyczących monitorowania co najmniej jednej usługi. Kod w tym kroku nie używa kolektora, aby uprościć przykład. Zamiast tego używa eksportów OTel, które zapisują dane bezpośrednio w Google Cloud.
Konfigurowanie komponentów OTel na potrzeby śledzenia i monitorowania danych
- Wróć do okna (lub karty) „Cloud Shell” w przeglądarce.
- W terminalu zaktualizuj plik
requirements.txto dodatkową listę 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 Twój 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)}'
Instrumentowanie kodu aplikacji z funkcjami śledzenia i monitorowania za pomocą OTel
- Ponownie otwórz terminal
main.py:cloudshell edit ~/codelab-o11y/main.py - Wprowadź w kodzie aplikacji te zmiany:
- Przed wierszem
import os(wiersz 1) wstaw ten kod (pamiętaj o pustym wierszu 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) wstaw poniższy kod (pamiętaj o wcięciach):span = trace.get_current_span() - Po wierszu 13 (zawierającym
"message": record.getMessage()) wstaw ten kod (pamiętaj o wcięciach): Te 2 dodatkowe atrybuty pomagają korelować logi aplikacji i zakresy śledzenia 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 wierszu
app = Flask(__name__)(wiersz 31) wstaw ten kod: Te wiersze instrumentują wszystkie przychodzące i wychodzące żądania naszej aplikacji Flask za pomocą śledzenia.FlaskInstrumentor().instrument_app(app) RequestsInstrumentor().instrument() - Bezpośrednio 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_counteri rejestrują go na potrzeby eksportu. - Po wywołaniu funkcji
logger.debug()(wiersz 49) wstaw ten kod: Ta zmiana spowoduje zwiększenie licznika o 1 za każdym razem, gdy aplikacja pomyślnie wywoła interfejs Vertex API w celu interakcji z modelem Gemini.requests_counter.add(1, {'animal': animal})
- Przed wierszem
Wdrażanie kodu aplikacji Gen AI w Cloud Run
- W oknie terminala uruchom polecenie, aby wdrożyć kod źródłowy aplikacji w Cloud Run.
Jeśli zobaczysz poniższy komunikat informujący, że polecenie utworzy nowe repozytorium. Kliknijgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticatedEnter. 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 do osobnej karty lub okna w przeglądarce. Możesz też uruchomić to polecenie w terminalu, aby wydrukować adres URL usługi, a następnie 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. Odczekaj chwilę i odśwież stronę. Na końcu zobaczysz tekst zaczynający się od Ciekawostki o psach i zawierający 10 ciekawostek o psach.Sorry, this is just a placeholder...
Aby wygenerować dane telemetryczne, otwórz adres URL usługi. Odśwież stronę, zmieniając wartość parametru ?animal=, aby uzyskać różne wyniki.
Przeglądanie logów czasu z aplikacji
- Kliknij przycisk poniżej, aby otworzyć stronę Eksplorator logów czasu w konsoli Cloud:
- Wybierz jeden z najnowszych śladów. Powinno się wyświetlić 5 lub 6 zakresów podobnych do tych na zrzucie ekranu poniżej.

- Znajdź zakres, który śledzi wywołanie procedury obsługi zdarzeń (metoda
fun_facts). Będzie to ostatni zakres o nazwie/. - W panelu Szczegóły śledzenia kliknij Logi i zdarzenia. Wyświetlą się logi aplikacji powiązane z tym konkretnym spanem. Korelacja jest wykrywana na podstawie identyfikatorów śladu i spanu w śladzie i w logu. Powinien wyświetlić się dziennik aplikacji, która zapisała prompt, oraz odpowiedź interfejsu Vertex API.
Sprawdzanie wskaźnika licznika
- Kliknij przycisk poniżej, aby otworzyć stronę Metrics Explorer w konsoli Cloud:
- Na pasku narzędzi w panelu narzędzia do tworzenia zapytań kliknij przycisk o nazwie < > MQL lub < > PromQL. Lokalizację przycisku znajdziesz na ilustracji poniżej.

- Sprawdź, czy w przełączniku Język wybrana jest opcja PromQL. Przełącznik języka znajduje się na tym samym pasku narzędzi, który umożliwia formatowanie zapytania.
- Wpisz zapytanie w edytorze Zapytań:
sum(rate(workload_googleapis_com:model_call_counter{monitored_resource="generic_task"}[${__interval}])) - Kliknij Uruchom zapytanie.Jeśli przełącznik Uruchamiaj automatycznie jest włączony, przycisk Uruchom zapytanie nie jest widoczny.
11. (Opcjonalnie) Zaciemnianie informacji poufnych w logach
W kroku 10 zapisaliśmy informacje o interakcji aplikacji z modelem Gemini. Te informacje obejmowały nazwę zwierzęcia, rzeczywisty prompt i odpowiedź modelu. Przechowywanie tych informacji w logu powinno być bezpieczne, ale w wielu innych przypadkach nie jest to prawdą. Prompt może zawierać dane osobowe lub inne informacje poufne, których użytkownik nie chce przechowywać. Aby rozwiązać ten problem, możesz zaciemnić dane wrażliwe zapisywane w Cloud Logging. Aby zminimalizować zmiany w kodzie, zalecamy to rozwiązanie.
- Utwórz temat Pub/Sub do przechowywania przychodzących wpisów dziennika.
- Utwórz ujście logów, które przekierowuje pozyskane logi do tematu Pub/Sub.
- Utwórz potok Dataflow, który będzie modyfikować logi przekierowane do tematu PubSub, wykonując te czynności:
- Odczytywanie wpisu logu z tematu PubSub
- Sprawdzanie ładunku wpisu pod kątem informacji poufnych za pomocą interfejsu DLP Inspection API
- Usuń informacje poufne z ładunku za pomocą jednej z metod usuwania danych DLP.
- Zapisywanie zaciemnionego wpisu logu w Cloud Logging
- Wdrażanie potoku
12. (Opcjonalnie) Zwalnianie miejsca
Aby uniknąć ryzyka naliczenia opłat za zasoby i interfejsy API użyte w tym module, po jego ukończeniu zalecamy wyczyszczenie zasobów. Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego w ramach tego laboratorium.
- Aby usunąć projekt, uruchom w terminalu polecenie usuwania projektu:
Usunięcie projektu w chmurze spowoduje zaprzestanie naliczania opłat za wszystkie zasoby i interfejsy API wykorzystywane w ramach tego projektu. Powinien pojawić się ten komunikat, w którymPROJECT_ID=$(gcloud config get-value project) gcloud projects delete ${PROJECT_ID} --quietPROJECT_IDbędzie identyfikatorem Twojego 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, zapoznaj się z krokiem 5, aby znaleźć identyfikator projektu użyty podczas modułu. Zastąp nim polecenie w pierwszej instrukcji. Jeśli na przykład 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 korzysta z modelu Gemini do generowania prognoz. oraz wyposażyliśmy aplikację w niezbędne funkcje monitorowania i logowania. Aplikacja i zmiany z kodu źródłowego zostały wdrożone w Cloud Run. Następnie używasz 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, aby pomóc nam ulepszyć usługi, z których korzystasz, zarejestruj się tutaj.
Oto kilka opcji, które pomogą Ci w dalszej nauce:
- Codelab Jak wdrożyć komunikator oparty na Gemini w Cloud Run
- Codelab Jak używać wywoływania funkcji Gemini z Cloud Run
- Jak używać interfejsu Cloud Run Jobs Video Intelligence API do przetwarzania filmu scena po scenie
- Warsztaty na żądanie Wprowadzenie do Google Kubernetes Engine
- Dowiedz się więcej o konfigurowaniu wskaźników licznika i rozkładu za pomocą logów aplikacji
- Zapisywanie wskaźników OTLP za pomocą kontenera dodatkowego OpenTelemetry
- Dokumentacja dotycząca korzystania z OpenTelemetry w Google Cloud