全部產品
Search
文件中心

Simple Log Service:通過OpenTelemetry接入C# Trace資料

更新時間:Jul 21, 2024

本文介紹通過OpenTelemetry .NET SDK將C#應用的Trace資料接入到Log Service的操作步驟。

前提條件

  • 已建立Trace執行個體。更多資訊,請參見建立Trace執行個體
  • 已安裝.NET Framework開發環境。

    說明

    本文中的接入方式支援除.NET Framework 3.5 SP1外的所有官方所支援的版本。更多資訊,請參見.NET Core.NET Framework

操作步驟

  1. 添加依賴包。

    dotnet add package OpenTelemetry --version 1.2.0-beta1
    dotnet add package OpenTelemetry.Exporter.Console --version 1.2.0-beta1
    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol --version 1.2.0-beta1
    dotnet add package OpenTelemetry.Extensions.Hosting --version 1.0.0-rc8
    dotnet add package OpenTelemetry.Instrumentation.AspNetCore --version 1.0.0-rc8
    dotnet add package Grpc.Core --version 2.36.4
  2. 運行代碼。

    如下代碼中的變數需根據實際情況替換。關於變數的詳細說明,請參見變數說明

    using System;
    using OpenTelemetry;
    using OpenTelemetry.Trace;
    using System.Diagnostics;
    using System.Collections.Generic;
    using OpenTelemetry.Resources;
    using Grpc.Core;
    
    namespace mydemo
    {
        class Program
        {
             private static readonly ActivitySource MyActivitySource = new ActivitySource(
            "MyCompany.MyProduct.MyLibrary");
    
            static void Main(string[] args) {
                using var tracerProvider = Sdk.CreateTracerProviderBuilder()
               .SetSampler(new AlwaysOnSampler())
               .AddSource("MyCompany.MyProduct.MyLibrary")
               .AddOtlpExporter(opt => {
                    opt.Endpoint = new Uri("${endpoint}");
                    opt.Headers = "x-sls-otel-project=${project},x-sls-otel-instance-id=${instance},x-sls-otel-ak-id=${access-key-id},x-sls-otel-ak-secret=${access-key-secret}";
               })
                .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault()
               .AddAttributes(new Dictionary<string, object> {
                   {"service.name", "${service}" },
                   {"service.version","${version}"},
                   {"service.host","${host}"},
                   {"service.namespace","${service.namespace}"}
                   }))
               .Build();
    
                using (var activity = MyActivitySource.StartActivity("SayHello"))
                {
                    activity?.SetTag("foo", 1);
                    activity?.SetTag("bar", "Hello, World!");
                    activity?.SetTag("baz", new int[] { 1, 2, 3 });
                }
                Console.WriteLine("Hello World!");
    
            }
        }
    }

    表 1. 變數說明

    變數

    說明

    樣本

    ${service}

    服務名。根據您的實際情境取值即可。

    payment

    ${version}

    服務版本號碼。建議按照va.b.c格式定義。

    v0.1.2

    ${host}

    主機名稱。

    localhost

    ${endpoint}

    Log ServiceProject的接入地址,格式為https://${project}.${region-endpoint}:Port,其中:

    • ${project}:Log ServiceProject名稱。

    • ${region-endpoint}:Log ServiceProject所在地區的訪問網域名稱,支援公網和阿里雲內網(傳統網路、VPC)。更多資訊,請參見服務入口

    • Port:網路連接埠,固定為10010。

    https://test-project.cn-hangzhou.log.aliyuncs.com:10010

    ${project}

    Log ServiceProject名稱。

    test-project

    ${instance}

    Trace服務執行個體ID。更多資訊,請參見建立Trace執行個體

    instance-traces

    ${access-key-id}

    阿里雲帳號AccessKey ID。

    建議您使用只具備Log ServiceProject寫入許可權的RAM使用者的AccessKey(包括AccessKey ID和AccessKey Secret)。授予RAM使用者向指定Project寫入資料許可權的具體操作,請參見授權。如何擷取AccessKey的具體操作,請參見存取金鑰

    LTAI4Fvyv****

    ${access-key-secret}

    阿里雲帳號AccessKey Secret。

    建議您使用只具備Log ServiceProject寫入許可權的RAM使用者的AccessKey。

    HfJEw25sYldO***

    ${service.namespace}

    服務歸屬的命名空間。

    order

後續步驟