צפייה בחביון של בקשות לאפליקציות

איך אוספים נתונים של זמן אחזור מהאפליקציות ואיך צופים בהם:

  1. יצירת אשכול Google Kubernetes Engine‏ (GKE) באמצעות Google Cloud CLI.

  2. מורידים ופורסים אפליקציה לדוגמה באשכול.

  3. יוצרים מעקב על ידי שליחת בקשת HTTP לאפליקציית הדוגמה.

  4. בודקים את נתוני זמן ההמתנה לתגובה של העקבות שיצרתם.

  5. לפנות.


לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף Google Cloud :

תראו לי איך


לפני שמתחילים

  1. יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה מוגבלת. Google Cloud

  2. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  5. Verify that billing is enabled for your Google Cloud project.

  6. Enable the Google Kubernetes Engine and Cloud Trace APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Google Kubernetes Engine and Cloud Trace APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות ליצירת אשכול Google Kubernetes Engine ולצפייה בטווחים של מעקב, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

יצירת אשכול GKE

במדריך הזה יוצרים אשכול GKE רגיל. אם אתם משתמשים במצב Autopilot ב-Google Kubernetes Engine או אם הפעלתם איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE, אתם צריכים להגדיר את האפליקציה כך שתשתמש באיחוד שירותי אימות הזהויות של עומסי עבודה ב-GKE.

  1. בסרגל הכלים, לוחצים על Activate Cloud Shell (הפעלת Cloud Shell), ואז מבצעים את השלבים הבאים ב-Cloud Shell.

  2. יצירת אשכול:

    gcloud container clusters create cloud-trace-demo --zone us-central1-c
    

    הפקודה הקודמת, שייקח כמה דקות להשלים אותה, יוצרת אשכול רגיל בשם cloud-trace-demo באזור us-central1-c.

  3. מגדירים את kubectl כך שפרטי הכניסה שלו יתעדכנו אוטומטית כדי להשתמש באותה זהות כמו ב-Google Cloud CLI:

    gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
    
  4. מאמתים את הגישה לאשכול:

    kubectl get nodes
    

    פלט לדוגמה של הפקודה הזו:

    NAME                                              STATUS   ROLES    AGE   VERSION
    gke-cloud-trace-demo-default-pool-063c0416-113s   Ready    <none>   78s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-1n27   Ready    <none>   79s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-frkd   Ready    <none>   78s   v1.22.12-gke.2300
    

הורדה ופריסה של אפליקציה

מורידים ומפעילים אפליקציית Python, שמשתמשת ב-framework של Flask ובחבילת OpenTelemetry. תיאור האפליקציה מופיע בקטע מידע על האפליקציה בדף הזה.

ב-Cloud Shell, מבצעים את הפעולות הבאות:

  1. שיבוט של אפליקציית Python מ-GitHub:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. מריצים את הפקודה הבאה כדי לפרוס את אפליקציית הדוגמה:

    cd python-docs-samples/trace/cloud-trace-demo-app-opentelemetry && ./setup.sh
    

    הסקריפט setup.sh יימשך כמה דקות.

    הסקריפט מגדיר שלושה שירותים באמצעות תמונה מוכנה מראש, ואז מחכה עד שכל המשאבים יוקצו. עומסי העבודה נקראים cloud-trace-demo-a,‏ cloud-trace-demo-b ו-cloud-trace-demo-c.

    פלט לדוגמה של הפקודה הזו:

    deployment.apps/cloud-trace-demo-a is created
    service/cloud-trace-demo-a is created
    deployment.apps/cloud-trace-demo-b is created
    service/cloud-trace-demo-b is created
    deployment.apps/cloud-trace-demo-c is created
    service/cloud-trace-demo-c is created
    
    Wait for load balancer initialization complete......
    Completed.
    

יצירת נתוני מעקב

trace מתאר את הזמן שלוקח לאפליקציה להשלים פעולה אחת.

כדי ליצור trace, מריצים את הפקודה הבאה ב-Cloud Shell:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

התגובה של הפקודה הקודמת אמורה להיראות כך:

Hello, I am service A
And I am service B
Hello, I am service C

אפשר להריץ את הפקודה curl כמה פעמים כדי ליצור כמה עקבות.

הצגת נתוני זמן האחזור

  1. נכנסים לדף Trace explorer במסוף Google Cloud :

    כניסה אל Trace explorer

    אפשר גם להשתמש בסרגל החיפוש כדי למצוא את הדף הזה.

    בצילום המסך הבא מוצגת התוצאה של הרצת הפקודה curl כמה פעמים. בתרשים מוצגים נתוני זמן אחזור מצטברים של טווחים, שמתארים פעולות משנה של מעקב.

    חלון הכלי Trace Explorer למדריך למתחילים.

  2. כדי לראות יומן מעקב בפירוט, בוחרים יחידה לוגית למעקב בתרשים או שורה בטבלה.

    תיבת הדו-שיח של פרטי העקבות נפתחת, כמו שמוצג בצילום המסך הבא:

    פרטים נוספים על כל יחידה לוגית למעקב מוצגים בחלונית הפרטים.

    תרשים גאנט מציג מידע על העקבות שנבחרו. השורה הראשונה בתרשים גאנט היא של העקבות, וכל שורה שאחריה היא של טווח בעקבות.

  3. כדי לראות מידע מפורט על טווח, בוחרים את הטווח בתרשים גאנט.

מידע על האפליקציה

אפליקציית הדוגמה שבה נעשה שימוש במדריך הזה זמינה במאגר GitHub. במאגר הזה מפורט איך להשתמש באפליקציה בסביבות אחרות מלבד Cloud Shell. אפליקציית הדוגמה כתובה ב-Python, משתמשת ב-framework של Flask ובחבילות OpenTelemetry, ומופעלת באשכול GKE.

במדריך הזה יוצרים אשכול GKE רגיל. אם אתם משתמשים במצב Autopilot ב-Google Kubernetes Engine או אם הפעלתם איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE, אתם צריכים להגדיר את האפליקציה כך שתשתמש באיחוד שירותי אימות הזהויות של עומסי עבודה ב-GKE.

אינסטרומנטציה

הקובץ app.py במאגר GitHub מכיל את הכלים שנדרשים כדי לתעד ולשלוח נתוני מעקב לפרויקט Google Cloud :

  • האפליקציה מייבאת כמה חבילות OpenTelemetry:

    from opentelemetry import trace
    from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
    from opentelemetry.instrumentation.flask import FlaskInstrumentor
    from opentelemetry.instrumentation.requests import RequestsInstrumentor
    from opentelemetry.propagate import set_global_textmap
    from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import BatchSpanProcessor
    
  • האפליקציה מודדת בקשות אינטרנט עם הקשר מעקב ומבצעת מעקב אוטומטי אחרי בקשות לטיפול ב-Flask ובקשות לשירותים אחרים:

    app = flask.Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    RequestsInstrumentor().instrument()
  • האפליקציה מגדירה את Cloud Trace exporter כספק נתוני מעקב, שמעביר את הקשר של נתוני המעקב בפורמט של Cloud Trace:

    def configure_exporter(exporter):
        """Configures OpenTelemetry context propagation to use Cloud Trace context
    
        Args:
            exporter: exporter instance to be configured in the OpenTelemetry tracer provider
        """
        set_global_textmap(CloudTraceFormatPropagator())
        tracer_provider = TracerProvider()
        tracer_provider.add_span_processor(BatchSpanProcessor(exporter))
        trace.set_tracer_provider(tracer_provider)
    
    
    configure_exporter(CloudTraceSpanExporter())
    tracer = trace.get_tracer(__name__)
  • בקטע הקוד הבא מוצג איך לשלוח בקשות ב-Python. ‫OpenTelemetry מעביר באופן מרומז את הקשר של העקבות בשבילכם עם הבקשות היוצאות:

    if endpoint is not None and endpoint != "":
        data = {"body": keyword}
        response = requests.get(
            endpoint,
            params=data,
        )
        return keyword + "\n" + response.text
    else:
        return keyword, 200
    
    

איך אנחנו מטפלים בבקשה

לשם הבהרה, בסעיף הזה, השם cloud-trace-demo לא מופיע בשמות השירותים. לדוגמה, השירות cloud-trace-demo-c מופיע כ-c.

האפליקציה הזו יוצרת שלושה שירותים בשמות a, b ו-c. השירות a מוגדר לקרוא לשירות b, והשירות b מוגדר לקרוא לשירות c. פרטים על הגדרת השירותים מופיעים בקובצי ה-YAML במאגר GitHub.

כששלחתם בקשת HTTP לשירות a במדריך הזה, השתמשתם בפקודה curl הבאה:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

הפקודה curl פועלת באופן הבא:

  1. kubectl מאחזר את כתובת ה-IP של השירות שנקרא cloud-trace-demo-a.
  2. הפקודה curl שולחת את בקשת ה-HTTP לשירות a.
  3. שירות a מקבל את בקשת ה-HTTP ושולח בקשה לשירות b.
  4. שירות b מקבל את בקשת ה-HTTP ושולח בקשה לשירות c.
  5. שירות c מקבל את בקשת ה-HTTP משירות b ומחזיר את המחרוזת Hello, I am service C לשירות b.
  6. שירות b מקבל את התגובה משירות c, מוסיף אותה למחרוזת And I am service B ומחזיר את התוצאה לשירות a.
  7. שירות a מקבל את התגובה משירות b ומצרף אותה למחרוזת Hello, I am service A.
  8. התשובה משירות a מודפסת ב-Cloud Shell.

הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים:

אם יצרתם פרויקט חדש ואתם כבר לא צריכים אותו, אתם יכולים למחוק את הפרויקט.

אם השתמשתם בפרויקט קיים, צריך לבצע את הפעולות הבאות:

  1. כדי למחוק את האשכול, מריצים את הפקודה הבאה ב-Cloud Shell:

    gcloud container clusters delete cloud-trace-demo --zone us-central1-c

המאמרים הבאים