תרגיל - שימוש נתונים של OpenTelemetry ביישום מקורי בענן

הושלם

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

הוספת פרותאוס וגרפיאנה

Prometheus ו- Grafana מספקים תמונות של Docker שמקלות עליך להוסיף אותן לפרוייקטים שלך. עליך לכלול אותן docker-compose.yml הקובץ, בבסיס הפתרון.

  1. בחלונית EXPLORER , בחר את docker-compose.yml הקובץ.

  2. הוסף YAML זה לתחתית הקובץ:

      prometheus:
        image: prom/prometheus
        container_name: prometheus
        command:
          - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
          - 9090:9090
        restart: unless-stopped
        volumes:
          - ./prometheus:/etc/prometheus
    
      grafana:
        image: grafana/grafana
        container_name: grafana
        ports:
          - 3000:3000
        restart: unless-stopped
        environment:
          - GF_SECURITY_ADMIN_USER=admin
          - GF_SECURITY_ADMIN_PASSWORD=grafana
        volumes:
          - ./grafana/datasource:/etc/grafana/provisioning/datasources
    

הדוקר yaml הקודם מוסיף שני שירותים חדשים, Prometheus וGrafana. המקטע Prometheus מגדיר גורם מכיל כך שהוא יגיב ביציאה 9090. הוא ממפה את של התיקיה מצפה לקובץ prometheus.yml חדש. המקטע Grafana מגדיר גורם מכיל כך שיגיב ביציאה 3000. היא ממופה שלוש תיקיות בתוך של גרפיקה.

קביעת תצורה של Prometheus

יש לקבוע את התצורה של פרותאוס כך שהוא יידע היכן לאסוף את המדדים. עליך להוסיף prometheus.yml קובץ לתיקיה פרום שלך.

  1. בחלונית EXPLORER , לחץ באמצעות לחצן העכבר הימני על התיקיה dotnet-observability ולאחר מכן בחר תיקיה חדשה.

  2. בשדה שם, הזן פרוםתאוס.

  3. בחלונית הסייר , לחץ באמצעות לחצן העכבר הימני על תיקיית המבצע ולאחר מכן בחר קובץ חדש.

  4. בשדה שם, הזן prometheus.yml.

  5. בעורך הקבצים, הזן YAML זה:

    global:
      scrape_interval: 1s
    
    scrape_configs:
      - job_name: 'products'
        static_configs:
          - targets: ['backend:8080']
      - job_name: 'store'
        static_configs:
          - targets: ['frontend:8080']
    

    ה- YAML הקודם קובע את התצורה של Prometheus כדי לגרד מהקצההחזיתי השירותים. כאשר היישום פועל ב- Docker שמות המארחים הם שמות השירות.

  6. בחר Ctrl+S כדי לשמור את הקובץ.

קביעת תצורה של Grafana

יש לקבוע את תצורת Grafana כך שהוא יודע היכן לאסוף את המדדים.

  1. בחלונית EXPLORER , לחץ באמצעות לחצן העכבר הימני על התיקיה dotnet-observability ולאחר מכן בחר תיקיה חדשה.

  2. בשדה שם, הזן grafana.

  3. לחץ באמצעות לחצן העכבר הימני על התיקיה grafana ולאחר מכן בחר תיקיה חדשה.

  4. בשדה שם, הזן מקור.

  5. לחץ באמצעות לחצן העכבר הימני על התיקיה grafana ולאחר מכן בחר תיקיה חדשה.

  6. בשדה שם, הזן לוח.

  7. הרחב את התיקיה, לחץ באמצעות לחצן העכבר הימני על התיקיה מקור ולאחר מכן בחר קובץ חדש.

  8. בשדה שם, הזן datasource.yml.

  9. בכרטיסיה Editor, הזן YAML זה:

    apiVersion: 1
    
    datasources:
    - name: Prometheus
      type: prometheus
      url: http://prometheus:9090 
      isDefault: true
      access: proxy
      editable: true
    

    ה- YAML הקודם מגדיר את Grafana כך שישתמש ב- Prometheus כמקור הנתונים.

  10. בחר Ctrl+S כדי לשמור את הקובץ.

עדכן את ASP.NET Core שלך כדי לחשוף מדדים עבור Prometheus

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

  1. בחלונית TERMINAL בחלק התחתון, עבור אל התיקיה אבחון .

  2. הפעל פקודה זו:

    cd .\eShopLite\Diagnostics\ 
    
  3. הסר את OpenTelemetry.Exporter.Console החבילה:

    dotnet remove package OpenTelemetry.Exporter.Console
    
  4. הוסף את OpenTelemetry.Exporter.Prometheus.AspNetCore החבילה:

    dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore --prerelease
    
  5. בחלונית EXPLORER , הרחב את התיקיה אבחון ולאחר מכן בחר DiagnosticServiceCollectionExtensions.cs.

  6. החלף את תבנית .AddConsoleExporter(); המסוף בקוד זה:

    .AddPrometheusExporter();
    
  7. בחלק התחתון של הקובץ, לפני העדכון האחרון}, הוסף קוד זה:

    public static void MapObservability(this IEndpointRouteBuilder routes)
    {
      routes.MapPrometheusScrapingEndpoint();
    }
    

    קוד זה מוסיף נקודת קצה של Prometheus המגרדת נקודות קצה לכל שירות הכולל זאת עם היישום שלו. הדבר מאפשר ל- Prometheus לגרד מדדים מ- http://service/metrics.

  8. בחר Ctrl+S כדי לשמור את הקובץ.

חשיפת מדדים בשירות החנות

היישום מוגדר כעת רק לחשוף מדדים עבור Products שלך. אתה מעדכן את האפליקציה כך שתחשוף מדדים גם עבור Store שלך.

  1. בחלונית הסייר , תחת סייר הפתרונות, לחץ באמצעות לחצן העכבר הימני על פרוייקט החנות ולאחר מכן בחר הוסף חומר עזר לפרוייקט.

  2. בחר אבחון.

  3. בחלונית הסייר , הרחב את התיקיה חנות ולאחר מכן בחר Program.cs.

  4. תחת קוד ההערה // Add observability code here, הוסף שיחה לשיטה אבחון:

    builder.Services.AddObservability("Store", builder.Configuration);
    
  5. לפני פעולת app.Run(), הוסף קוד זה:

    app.MapObservability();
    

    שיטה זו מוסיפה את נקודת הקצה של Prometheus מגרדת את Store השירות.

  6. בחר Ctrl+S כדי לשמור את הקובץ.

  7. בחלונית EXPLORER, את התיקיה מוצר ולאחר מכן בחר Program.cs.

  8. לפני פעולת app.Run(), הוסף קוד זה:

    app.MapObservability();
    

    שיטה זו מוסיפה את נקודת הקצה של Prometheus מגרדת את נקודת הקצה Products service.

  9. בחר Ctrl+S כדי לשמור את הקובץ.

בדיקת התכונות החדשות של יכולת התצפית

כעת אתה בודק את תכונות התצפית החדשות שהוספת לאפליקציה.

  1. בחלונית TERMINAL בחלק התחתון, עבור אל התיקיה dotnet-observability/eShop Lite.

    cd ..
    
  2. עדכן את הגורמים המכילים של האפליקציות.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. עבור אל dotnet-observability, והפעל את האפליקציה באמצעות Docker:

    cd ..
    docker compose up
    
  4. בכרטיסיה יציאות, בחר פתח בדפדפןפרום (9090). אם אתה משתמש באופן מקומי ב- Visual Studio Code, פתח דפדפן ולאחר מכן, בכרטיסיה חדשה, עבור אל האפליקציה Prometheus http://localhost:9090.

  5. בתפריט העליון, בחר מצב מכן בחר יעדים.

    מסך המציג את האפליקציה Prometheus שתצורתה נקבעה, המציגה את תקינות האפליקציה eShopLite.

    אתה אמור לראות את המוצרים ואת Store המפורטים כ- UP.

  6. בכרטיסיה יציאות, בחר פתח בדפדפן עבור גרפיאנה (3000). אם אתה משתמש באופן מקומי ב- Visual Studio Code, פתח דפדפן ולאחר מכן, בכרטיסיה חדשה, עבור אל האפליקציה Grafana http://localhost:3000.

  7. הזן את שם המשתמש מנהל.

  8. הזן את הסיסמה grafana.

  9. בחר יצירת לוח המחוונים הראשון.

  10. בחר לוח המחוונים.

  11. בכרטיסיה חדשה, עבור אל GitHub ופתח את ASP.NET לוח המחוונים Core.

  12. העתקת הקובץ Raw הקובץ.

  13. הדבק את ה- JSON בתיבת ייבוא באמצעות מודל JSON של לוח לוח מחוונים.

  14. בחר טען.

  15. ברשימה הנפתחת של מבצע, בחר פרום.

  16. בחר ייבוא.

    מסך שמציג לוח מחוונים של ASP.NET ב- Grafana.

    אתה אמור לראות לוח מחוונים המציג מדדים עבור המוצרים וStore שלך. בחר את המשימה כדי לשנות בין שני השירותים.

  17. בחלונית TERMINAL, בחר Ctrl+C כדי להפסיק את האפליקציה.

הוסף מיקוד

כעת תוכל להרחיב את יכולות המעקב של האפליקציה על-ידי הוספת Zipkin. כפי שעשית קודם לכן, הוסף גורם מכיל של Zipkin לאפליקציה שלך והגדר אותו כך שיתחבר לאספן OpenTelemetry. לאחר מכן הוסף את הייצוא OpenTelemetry Zipkin לאפליקציה שלך.

  1. בחלונית EXPLORER , בחר את הקובץ docker-compose.yml בתוך התיקיה dotnet-observability .

  2. הוסף prometheus ו- zipkin בתיבה depends_on עבור frontend.

    depends_on: 
      - backend
      - prometheus
      - zipkin 
    
  3. הוסף prometheus בתיבה depends_on עבור backend.

     depends_on: 
       - prometheus
    
  4. הוסף משתנים סביבתיים עבור Zipkin הןfrontend והן backend:

    environment: 
      - ZIPKIN_URL=http://zipkin:9411    
    

    שני השירותים אמורים להיראות כך:

    frontend:
      image: storeimage
      build:
        context: .
        dockerfile: ./eShopLite/Store/Dockerfile
      environment: 
        - ProductEndpoint=http://backend:8080
        - ZIPKIN_URL=http://zipkin:9411
      ports:
        - "32000:8080"
      depends_on: 
        - backend
        - prometheus
        - zipkin
    
    backend:
      image: productservice
      build: 
        context: .
        dockerfile: ./eShopLite/Products/Dockerfile
      environment: 
        - ZIPKIN_URL=http://zipkin:9411
    
      ports: 
        - "32001:8080"
      depends_on: 
        - prometheus    
    
  5. הוסף YAML זה לתחתית הקובץ:

      zipkin:
        image: openzipkin/zipkin
        ports:
          - 9411:9411
    

    ה- YAML הקודם מוסיף מיכל Zipkin לאפליקציה. הוא מגדיר את הגורם המכיל של Zipkin להגיב ביציאה 9411.

  6. בחר Ctrl+S כדי לשמור את הקובץ.

  7. בחלונית נקודת, עבור אל התיקיה אבחון.

    cd ./eShopLite/Diagnostics/
    
  8. הוסף את חבילות הייצוא של Zipkin.

    dotnet add package OpenTelemetry.Exporter.Zipkin --prerelease
    
  9. בחלונית EXPLORER , הרחב את התיקיה אבחון ולאחר מכן בחר DiagnosticServiceCollectionExtensions.cs.

  10. בחלק התחתון של ספקי המעקב, הוסף Zipkin:

    // add the tracing providers
    .WithTracing(tracing =>
    {
      tracing.SetResourceBuilder(resource)
                  .AddAspNetCoreInstrumentation()
                  .AddHttpClientInstrumentation()
                  .AddSqlClientInstrumentation()
                  .AddZipkinExporter(zipkin =>
                  {
                    var zipkinUrl = configuration["ZIPKIN_URL"] ?? "http://zipkin:9411";
                    zipkin.Endpoint = new Uri($"{zipkinUrl}/api/v2/spans");
                  });
    });
    
  11. בחר Ctrl+S כדי לשמור את הקובץ.

  12. בחלונית TERMINAL בחלק התחתון, עבור אל התיקיה dotnet-observability/eShop Lite.

    cd ..
    
  13. עדכן את הגורמים המכילים של האפליקציות.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  14. עבור אל dotnet-observability, והפעל את האפליקציה באמצעות Docker:

    cd ..
    docker compose up
    
  15. בכרטיסיה יציאות, בחר פתח בדפדפןפרום (9090). אם אתה משתמש באופן מקומי ב- Visual Studio Code, פתח כרטיסיית דפדפן חדשה ועבור אל האפליקציה Zipkin http://localhost:9411.

  16. בתפריט, בחר יחסי תלות.

    מסך המציג את Zipkin המציג את יחסי התלות של eShopLite app Store בקשות שליחה לשירות המוצרים.

  17. בחלונית TERMINAL, בחר Ctrl+C כדי להפסיק את האפליקציה.

הוספת תובנות יישום

השלב האחרון הוא להוסיף תובנות יישום לאפליקציה שלך.

יצירת המשאב 'תובנות יישום' ב- Azure

  1. בחלונית TERMINAL , היכנס ל- Azure.

    az login --use-device-code
    
  2. הצג את המנוי שלך ל- Azure שנבחר.

    az account show -o table
    

    אם נבחר מנוי שגוי, בחר את המנוי הנכון באמצעות חשבון az az.

  3. הוסף את ההרחבה עבור תובנות יישום.

    az extension add -n application-insights
    
  4. צור משאב 'תובנות יישום'.

    az monitor app-insights component create --app eShopLiteInsights --location eastus --kind web -g eShopLite
    

    אתה אמור לראות פלט זה:

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "applicationId": "eShopLiteInsights",
      "applicationType": "web",
      "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/",
      "creationDate": "2023-11-10T16:50:00.950726+00:00",
      "disableIpMasking": null,
      "etag": "\"3a02952a-0000-0100-0000-654e5f380000\"",
      "flowType": "Bluefield",
      "hockeyAppId": null,
      "hockeyAppToken": null,
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/eShopLite/providers/microsoft.insights/components/eShopLiteInsights",
      "immediatePurgeDataOn30Days": null,
      "ingestionMode": "ApplicationInsights",
      "instrumentationKey": "00000000-0000-0000-0000-000000000000",
      "kind": "web",
      "location": "eastus",
      "name": "eShopLiteInsights",
      "privateLinkScopedResources": null,
      "provisioningState": "Succeeded",
      "publicNetworkAccessForIngestion": "Enabled",
      "publicNetworkAccessForQuery": "Enabled",
      "requestSource": "rest",
      "resourceGroup": "eShopLite",
      "retentionInDays": 90,
      "samplingPercentage": null,
      "tags": {},
      "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
      "type": "microsoft.insights/components"
    }
    

    מהקובץ הקודם שהוחזרו JSON, העתק את connectionString, למעט ה- ". לדוגמה:

    InstrumentationKey=b851fa75-85a2-42f7-bb6f-413725d9d8ba;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/

  5. בחלונית EXPLORER , בחר את docker-compose.yml הקובץ.

  6. עליך להוסיף משתנה סביבה שבו משתמש פרוייקט האבחון כדי להתחבר לתובנות יישום. הוסף YAML זה לשירות Store הבא:

    environment:
      - APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=b851fa75-85a2-42f7-bb6f-413725d9d8ba;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/
    

    החלף את מחרוזת החיבור הקודמת במחרוזת שהעתקת מ- Azure CLI.

  7. חזור על שלבים אלה עבור Products service. ה- YAML הסופי אמור להיראות כך:

      frontend:
        image: storeimage
        build:
          context: .
          dockerfile: ./eShopLite/Store/Dockerfile
        environment: 
          - ProductEndpoint=http://backend:8080
          - ZIPKIN_URL=http://zipkin:9411
          - APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=b851fa75-85a2-42f7-bb6f-413725d9d8ba;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/
        ports:
          - "32000:8080"
        depends_on: 
          - backend
          - prometheus
          - zipkin
    
      backend:
        image: productservice
        build: 
          context: .
          dockerfile: ./eShopLite/Products/Dockerfile
        environment: 
          - ZIPKIN_URL=http://zipkin:9411
          - APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=b851fa75-85a2-42f7-bb6f-413725d9d8ba;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/
    
    
  8. בחר Ctrl+S כדי לשמור את הקובץ.

  9. בחלונית נקודת, עבור אל התיקיה אבחון.

    cd .\eShopLite\Diagnostics\ 
    
  10. הוסף את חבילת הייצוא Application Insights.

    dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore --prerelease
    
  11. בחלונית סייר, בחר את התיקיה אבחון ולאחר מכן בחר DiagnosticServiceCollectionExtensions.cs.

  12. בחלק העליון של הקובץ, הוסף משפט using הבא:

    using Azure.Monitor.OpenTelemetry.AspNetCore;
    
  13. לאחר var otelBuilder = services.AddOpenTelemetry();, הוסף קוד זה:

    if (!string.IsNullOrEmpty(configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]))
    {
      otelBuilder.UseAzureMonitor();
    }
    
  14. בחר Ctrl+S כדי לשמור את הקובץ.

  15. בחלונית TERMINAL בחלק התחתון, עבור אל התיקיה dotnet-observability/eShop Lite.

    cd ..
    
  16. עדכן את הגורמים המכילים של האפליקציות.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  17. עבור אל dotnet-observability, והפעל את האפליקציה באמצעות Docker:

    cd ..
    docker compose up
    
  18. היכנס לפורטל Azure עם אותם אישורים שבהם השתמשת כדי להיכנס ל- Azure CLI.

  19. בפורטל Azure, בחר קבוצות משאבים.

  20. בחר את eShopLite המשאבים.

  21. בחר את eShopLiteInsights Application Insights.

  22. בחר את לוח המחוונים.

    מסך המציג תובנות אפליקציה המציגות את התקינות של האפליקציה eShopLite.

  23. כדי לראות שינויים במדדים, עבור אל האפליקציה eShopLite ושנה את המניות. לאחר מכן רענן את לוח המחוונים של 'תובנות יישום'.

  24. בחלונית TERMINAL, הקש Ctrl+C כדי לעצור את האפליקציה.