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

Simple Log Service:KubernetesクラスターのGoプログラムからパフォーマンスデータを収集する

最終更新日:Jan 02, 2025

pprofはGoのプロファイリングツールです。 Goプログラムのパフォーマンスを分析および改善するために使用され、Goプログラムのパフォーマンスデータを提供します。 Simple Log Serviceが提供するFull-stack ObservabilityアプリケーションのKubernetes Golang Pullモジュールを使用して、Kubernetesクラスター内のすべてのGoプログラムからパフォーマンスデータを簡単に収集できます。

前提条件

  • フルスタックのObservabilityインスタンスが作成されます。 詳細は、インスタンスの作成をご参照ください。

  • Kubernetesクラスターにモニタリングコンポーネントがインストールされていること。 詳細については、「モニタリングコンポーネントのインストール」をご参照ください。

    説明

    モニタリングコンポーネントをインストールするには、v1.7.1.0-monitor-aliyun以降のLogtailイメージを使用する必要があります。

実装

Kubernetesクラスターでは、Goプログラムからパフォーマンスデータを収集するコンポーネントとログを収集するコンポーネントの両方にDaemonSetデプロイメントモデルが使用されます。 ログ収集中、Logtailは異なるディメンションからのKubernetesリソースの選択をサポートします。 Goプログラムからのパフォーマンスデータ収集中に、Logtailは環境変数、Kubernetesラベル、名前空間、ポッド名、およびコンテナー名を使用してデータをフィルタリングすることもできます。 Goプログラムからのパフォーマンスデータの収集には、Goプロセス間の通信データが含まれ、Kubernetesリソースの選択は、関連のない多数のプロセスにヒットする可能性があります。 この場合、Logtailは、データスコープをさらに絞り込むために、ILOGTAIL_PROFILE_PORTという特別な環境変数を導入します。

Goは、pprofによって提供されるパフォーマンスデータの組み込みの公開メカニズムを提供します。 Goプログラムで組み込みの公開メカニズムを有効にすると、LogtailはHTTP経由でパフォーマンスデータを取得できます。

image.png

準備

  1. パフォーマンスデータの公開メカニズムを有効にします。

    Goプログラムからpprofパフォーマンスデータを収集する前に、公開メカニズムを有効にする必要があります。 次のコードを使用して、組み込みの露出メカニズムを有効にできます。 カスタム露出メカニズムを設定および有効にすることもできます。 pprofパフォーマンスデータが {host }:{ port}/debug/pprof/Portのアドレスに公開されていることを確認してください。 次のコードでは、pprofパフォーマンスデータはポート8080で公開されます。

    <g id="1" type="code" text="code id=" bq70mz "title=" "uuid=" lln374c7da41fzzmt0t "code=" パッケージメイン
    
    import (import (import)
    &quot; ネット /http&quot;
    _ &quot; ネット /http/pprof&quot;
    )
    
    func main() {
    
    // 何かを...
    
    _ = http.ListenAndServe(&quot;:8080&quot; 、nil)
    } "data-tag=" codeblock "outputclass=" language-go ""> パッケージメイン
    
    import (import (import)
    "net/http"
    _"net/http/pprof"
    )
    
    func main() {
    
    // 何かを...
    
    _ = http.ListenAndServe(":8080", nil)
    } 
  2. ILOGTAIL_PROFILE_PORT環境変数を設定します。

    ILOGTAIL_PROFILE_PORT環境変数を、データが公開されるポートに設定します。 例: ILOGTAIL_PROFILE_PORT=8080

Logtail構成の作成

  1. にログインします。Simple Log Serviceコンソール.

  2. [ログアプリケーション] セクションで、[インテリジェントO&M] タブをクリックします。 次に、[フルスタックの表示] をクリックします。

  3. [Simple Log Serviceのフルスタックの観察可能性] ページで、管理するインスタンスをクリックします。

  4. 左側のナビゲーションウィンドウで、[パフォーマンスモニタリング] をクリックします。

  5. インスタンスでパフォーマンスモニタリングを初めて使用する場合は、[有効化] をクリックします。

  6. 左側のナビゲーションツリーで、[データインポート] をクリックします。 [データアクセス設定] ページで、[Kubernetes Golang Pull] を見つけます。

    ホストモニタリングデータのLogtail設定を初めて作成するときは、スイッチをオンにして設定ページに移動します。 Logtail設定を作成した場合は、アイコンをクリックして创建設定ページに移動します。

  7. [既存のマシングループを使用] をクリックします。

    モニタリングコンポーネントのインストール後、Simple Log Service{instanceID}-{clusterID}-k8s-nodesという名前のマシングループを自動的に作成します。 このマシングループを使用できます。

  8. {instanceID}-{clusterID}-k8s-nodesマシングループを選択し、[ソースサーバーグループ] セクションから [応用サーバーグループ] セクションに移動し、[次へ] をクリックします。

    重要

    マシングループのハートビートステータスがFAILの場合、[自動再試行] をクリックします。 問題が解決しない場合は、Logtailマシングループにハートビートがない場合はどうすればよいですか?

  9. [データソースの指定] ステップで、次のパラメーターを設定し、[完了] をクリックします。

    パラメーター

    説明

    一般設定

    設定名

    Logtail設定の名前。

    クラスター

    Kubernetesクラスターの名前。

    このパラメーターを設定すると、Simple Log ServiceはLogtail設定を使用して収集されたパフォーマンスデータにcluster=Cluster nameタグを追加します。

    重要

    クラスター名が一意であることを確認してください。 そうしないと、データの競合が発生する可能性があります。

    プロフィールホワイトリスト

    収集するデータの種類。

    収集間隔

    データが収集される間隔。 単位は秒です。

    タイムアウト期間

    データ収集のタイムアウト期間。 単位は秒です。

    最大ボディサイズ

    収集できるデータの最大サイズ。 (単位:KB)

    Kubernetes Selector設定

    名前空間

    名前空間の名前を一致させるために使用される正規表現。 このパラメータは、データの収集元の名前空間を指定します。

    ポッド名

    ポッドの名前を一致させるために使用される正規表現。 このパラメータは、データの収集元となるポッドを指定します。

    コンテナ名

    コンテナーの名前を一致させるために使用される正規表現。 このパラメーターは、データの収集元となるコンテナーを指定します。

    環境変数ホワイトリスト

    環境変数のホワイトリスト。 ホワイトリストは、データが収集されるコンテナを指定します。 このパラメーターはデフォルトで空となります。 このパラメーターを空のままにすると、KubernetesクラスターでGoプログラムを実行するすべてのコンテナーからデータが収集されます。 環境変数ホワイトリストを設定する場合、Keyパラメーターは必須で、valueパラメーターはオプションです。

    • EnvValueパラメーターが空の場合、EnvKeyで指定されたキーが環境変数に含まれるコンテナーが一致します。

    • EnvValueパラメーターが空でない場合、EnvKeyとEnvValueで指定されたキーと値のペアで環境変数が構成されているコンテナーが一致します。

      デフォルトでは、EnvValueパラメーターの値に対して文字列照合が実行されます。 コンテナは、環境変数の値がEnvValueパラメーターの値と同じである場合にのみ一致します。 EnvValueパラメーターにキャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、EnvKeyパラメーターをNGINX_SERVICE_PORTに設定し、EnvValueパラメーターを ^(80 | 6379)$ に設定した場合、ポート番号が80のコンテナーとポート番号が6379のコンテナーが一致します。

    キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアの1つで構成される環境変数がコンテナーにある場合、コンテナーは照合されます。

    環境変数ブラックリスト

    環境変数ブラックリスト。 ブラックリストは、データが収集されないコンテナを指定します。 このパラメーターはデフォルトでは空です。これは、データがすべてのコンテナーから収集されることを示します。 環境変数ブラックリストを設定する場合、Keyパラメーターは必須で、valueパラメーターはオプションです。

    • EnvValueパラメーターが空の場合、EnvKeyで指定されたキーが環境変数に含まれるコンテナーは除外されます。

    • EnvValueパラメーターが空でない場合、EnvKeyとEnvValueで指定されたキーと値のペアで環境変数が構成されているコンテナーは除外されます。

      デフォルトでは、EnvValueパラメーターの値に対して文字列照合が実行されます。 コンテナは、環境変数の値がEnvValueパラメーターの値と同じである場合にのみ一致します。 EnvValueパラメーターにキャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、EnvKeyパラメーターをNGINX_SERVICE_PORTに設定し、EnvValueパラメーターを ^(80 | 6379)$ に設定した場合、ポート番号が80のコンテナーとポート番号が6379のコンテナーが一致します。

    キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアの1つで構成される環境変数がコンテナーにある場合、コンテナーは除外されます。

    K8sラベルホワイトリスト

    Kubernetesラベルのホワイトリスト。 ホワイトリストは、データが収集されるコンテナを指定します。 Kubernetesラベルホワイトリストを設定する場合、Keyパラメーターは必須で、valueパラメーターはオプションです。

    • LabelValueパラメーターが空の場合、KubernetesラベルにLabelKeyで指定されたキーが含まれているコンテナーが一致します。

    • LabelValueパラメーターが空でない場合、KubernetesラベルがLabelKeyとLabelValueで指定されたキーと値のペアで構成されているコンテナーが一致します。

      デフォルトでは、LabelValueパラメーターの値に対して文字列照合が実行されます。 コンテナーは、Kubernetesラベルの値がLabelValueパラメーターの値と同じである場合にのみ一致します。 キャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、LabelKeyパラメーターをappに設定し、LabelValueパラメーターを ^(test1 | test2)$ に設定した場合、Kubernetesラベルがapp:test1またはapp:test2で構成されるコンテナが一致します。

    キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアのいずれかで構成されるKubernetesラベルがコンテナーに含まれている場合、コンテナーは照合されます。

    K8sラベルブラックリスト

    Kubernetesラベルブラックリスト。 ブラックリストは、データが収集されないコンテナを指定します。 Kubernetesラベルブラックリストを設定する場合、Keyパラメーターは必須で、valueパラメーターはオプションです。

    • LabelValueパラメーターが空の場合、KubernetesラベルにLabelKeyで指定されたキーが含まれているコンテナーは除外されます。

    • LabelValueパラメーターが空でない場合、KubernetesラベルがLabelKeyとLabelValueで指定されたキーと値のペアで構成されているコンテナーは除外されます。

      デフォルトでは、LabelValueパラメーターの値に対して文字列照合が実行されます。 コンテナーは、Kubernetesラベルの値がLabelValueパラメーターの値と同じである場合にのみ一致します。 キャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、LabelKeyパラメーターをappに設定し、LabelValueパラメーターを ^(test1 | test2)$ に設定した場合、Kubernetesラベルがapp:test1またはapp:test2で構成されるコンテナが一致します。

    キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアのいずれかで構成されるKubernetesラベルがコンテナーに含まれている場合、コンテナーは除外されます。

    容器ラベルのホワイトリスト

    コンテナーラベルのホワイトリスト。 ホワイトリストは、データが収集されるコンテナを指定します。 このパラメーターはデフォルトで空となります。 このパラメーターを空のままにすると、KubernetesクラスターでGoプログラムを実行するすべてのコンテナーからデータが収集されます。 コンテナーラベルのホワイトリストを設定する場合、Keyパラメーターは必須で、valueパラメーターはオプションです。

    • LabelValueパラメーターが空の場合、コンテナーラベルにLabelKeyで指定されたキーが含まれているコンテナーが一致します。

    • LabelValueパラメーターが空でない場合、コンテナーラベルがLabelKeyとLabelValueで指定されたキーと値のペアで構成されているコンテナーが一致します。

      デフォルトでは、LabelValueパラメーターの値に対して文字列照合が実行されます。 コンテナーは、コンテナーラベルの値がLabelValueパラメーターの値と同じである場合にのみ一致します。 LabelValueパラメーターに、キャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、LabelKeyパラメーターをio.kubernetes.container.nameに設定し、LabelValueパラメーターを ^(nginx | cube)$ に設定すると、nginxという名前のコンテナーとcubeという名前のコンテナーが一致します。

    キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアの1つで構成されるコンテナーラベルがコンテナーにある場合、コンテナーは照合されます。

    Container Labelブラックリスト

    コンテナーラベルのブラックリスト。 ブラックリストは、データが収集されないコンテナを指定します。 このパラメーターはデフォルトでは空です。これは、データがすべてのコンテナーから収集されることを示します。 コンテナーラベルブラックリストを設定する場合、Keyパラメーターは必須で、valueパラメーターはオプションです。

    • LabelValueパラメーターが空の場合、コンテナーラベルにLabelKeyで指定されたキーが含まれているコンテナーは除外されます。

    • LabelValueパラメーターが空でない場合、コンテナーラベルがLabelKeyとLabelValueで指定されたキーと値のペアで構成されているコンテナーは除外されます。

      デフォルトでは、LabelValueパラメーターの値に対して文字列照合が実行されます。 コンテナーは、コンテナーラベルの値がLabelValueパラメーターの値と同じである場合にのみ一致します。 LabelValueパラメーターに、キャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、LabelKeyパラメーターをio.kubernetes.container.nameに設定し、LabelValueパラメーターを ^(nginx | cube)$ に設定すると、nginxという名前のコンテナーとcubeという名前のコンテナーが一致します。

    キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアのいずれかで構成されるコンテナーラベルがコンテナーに含まれている場合、コンテナーは除外されます。

    設定が完了すると、Simple Log Serviceは自動的にMetricstoreなどのアセットを作成します。 詳細については、「アセット」をご参照ください。

次のステップ

GoプログラムからFull-stack Observabilityにpprofパフォーマンスデータを収集した後、パフォーマンスモニタリング機能を使用してパフォーマンスの問題をトラブルシューティングできます。 詳細については、「データクエリ」および「データ比較」をご参照ください。