すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:OpenTelemetry SDK forを使用して、C# アプリケーションからSimple Log Serviceにトレースデータをインポートします。NET

最終更新日:Sep 03, 2024

このトピックでは、OpenTelemetry SDK forを使用して、C# アプリケーションからSimple Log Serviceにトレースデータをインポートする方法について説明します。NETを使用します。

前提条件

  • トレースインスタンスが作成されます。 詳細については、「トレースインスタンスの作成」をご参照ください。

  • A. NET Framework開発環境がセットアップされています。

    説明

    このトピックのインポート方法は、のすべての公式バージョンをサポートします。. NET Frameworkを除く。NET Framework 3.5 SP1。 詳細については、「」をご参照ください。. NETコア. NETフレームワーク.

手順

  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}

    Simple Log Serviceプロジェクトのエンドポイント。 形式: https://${project}.${region-endpoint}:Port

    • ${project}: Simple Log Serviceプロジェクトの名前。

    • ${region-endpoint}: プロジェクトが存在するリージョンのSimple Log Serviceエンドポイント。 Simple Log Serviceには、内部エンドポイントまたはパブリックエンドポイントを使用してアクセスできます。 内部エンドポイントは、クラシックネットワークまたは仮想プライベートクラウド (VPC) 経由でアクセスできます。 インターネット経由でパブリックエンドポイントにアクセスできます。 詳細については、「エンドポイント」をご参照ください。

    • Port: ポート番号。 値は10010のように固定されます。

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

    ${project}

    Simple Log Serviceプロジェクトの名前。

    test-project

    ${instance}

    トレースインスタンスのID。 詳細については、「トレースインスタンスの作成」をご参照ください。

    インスタンストレース

    ${access-key-id}

    Alibaba CloudアカウントのAccessKey ID。

    Simple Log Serviceプロジェクトに対する書き込み権限のみを持つRAMユーザーのAccessKeyペアを使用することを推奨します。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 指定したプロジェクトの書き込み権限をRAMユーザーに付与する方法の詳細については、「カスタムポリシーを使用してRAMユーザーに権限を付与する」をご参照ください。 AccessKeyペアを取得する方法の詳細については、「AccessKeyペア」をご参照ください。

    LTAI4Fvyv ****

    ${access-key-secret}

    Alibaba CloudアカウントのAccessKeyシークレット。

    Simple Log Serviceプロジェクトに対する書き込み権限のみを持つRAMユーザーのAccessKeyペアを使用することを推奨します。

    HfJEw25sYldO ***

    ${service.nameスペース}

    サービスが属する名前空間。

    order

次のステップ