pprof は Go のプロファイリングツールです。Go プログラムのパフォーマンスを分析・改善するために使用され、Go プログラムに関するパフォーマンスデータを提供します。Simple Log Service が提供するフルスタック可観測性アプリケーションの Kubernetes Golang Pull モジュールを使用すると、Kubernetes クラスター内のすべての Go プログラムからパフォーマンスデータを簡単に収集できます。
フルスタック可観測性は、Go 言語向けに商用の自己開発エージェントを提供します。このエージェントは、より多くの機能と高い安定性を備えた非侵入型イベントトラッキングを提供します。詳細については、「Go アプリケーション監視の概要」をご参照ください。
前提条件
フルスタック可観測性のインスタンスが作成されていること。詳細については、「インスタンスの作成」をご参照ください。
Kubernetes クラスターにモニタリングコンポーネントがインストールされていること。詳細については、「モニタリングコンポーネントのインストール」をご参照ください。
説明モニタリングコンポーネントをインストールするには、v1.7.1.0-monitor-aliyun 以降の Logtail イメージを使用する必要があります。
収集の仕組み
Kubernetes クラスターでは、Go プログラムからパフォーマンスデータを収集するコンポーネントと、ログを収集するコンポーネントの両方に DaemonSet デプロイメントモデルが使用されます。ログ収集時に、Logtail はさまざまなディメンションでの Kubernetes リソース選択をサポートします。Go プログラムからのパフォーマンスデータ収集時に、Logtail は環境変数、Kubernetes ラベル、名前空間、Pod 名、およびコンテナー名を使用してデータをフィルターすることもできます。Go プログラムからのパフォーマンスデータの収集には、Go プロセス間の通信データが含まれ、Kubernetes リソース選択が多くの無関係なプロセスにヒットする可能性があります。このような場合、Logtail は ILOGTAIL_PROFILE_PORT という名前の特別な環境変数を導入して、データ範囲をさらに絞り込みます。
Go は、pprof が提供するパフォーマンスデータのための組み込みの公開メカニズムを提供します。Go プログラムで組み込みの公開メカニズムを有効にすると、Logtail は HTTP 経由でパフォーマンスデータを取得できます。

事前準備
パフォーマンスデータの公開メカニズムを有効にします。
Go pprof パフォーマンスデータを収集する前に、Go プログラムからデータを公開するメカニズムを有効にする必要があります。 次のコードを使用して、組み込みの公開メカニズムを有効にするか、カスタムのメカニズムを作成できます。 pprof データが
{host}:{port}/debug/pprof/portで公開されるようにしてください。 次の例では、ポート 8080 で pprof パフォーマンスデータを公開します。package main import ( "net/http" _ "net/http/pprof" ) func main() { // do something... _ = http.ListenAndServe(":8080", nil) }`ILOGTAIL_PROFILE_PORT` 環境変数を設定します。
`ILOGTAIL_PROFILE_PORT` 環境変数をデータが公開されるポートに設定します。例:`ILOGTAIL_PROFILE_PORT=8080`。
Logtail 構成の作成
Simple Log Service コンソールにログインします。
[ログアプリケーション] セクションで、[インテリジェント O&M] タブをクリックします。次に、[フルスタック可観測性] をクリックします。
[Simple Log Service フルスタック可観測性] ページで、対象のインスタンスをクリックします。
左側のナビゲーションウィンドウで、[パフォーマンス監視] をクリックします。
このインスタンスで初めてパフォーマンス監視を使用する場合は、[今すぐ有効にする] をクリックします。
左側のナビゲーションツリーで、[データインポート] をクリックします。[データアクセス構成] ページで、[Kubernetes Golang Pull] を見つけます。
ホストモニタリングデータ用に初めて Logtail 構成を作成する場合は、スイッチをオンにして構成ページに移動します。Logtail 構成を作成済みの場合は、
アイコンをクリックして構成ページに移動します。[既存のマシングループを使用] をクリックします。
モニタリングコンポーネントをインストールすると、Simple Log Service は、
{instanceID}-{clusterID}-k8s-nodes}という名前のマシングループを自動的に作成します。このマシングループを直接使用できます。[ソースマシングループ] リストから対象のマシングループ (
{instanceID}-{clusterID}-k8s-nodes) を選択し、[適用済みマシングループ] リストに移動します。次に、[次へ] をクリックします。重要マシングループのハートビートステータスが [FAIL] の場合は、[自動再試行] をクリックできます。問題が解決しない場合は、「Logtail マシングループにハートビートがない場合の対処法」をご参照ください。
[データソースの指定] ステップで、以下のパラメーターを設定し、[完了] をクリックします。
パラメーター
説明
[一般構成]
設定名
Logtail 構成の名前。
クラスター
Kubernetes クラスターの名前を指定します。
このパラメーターを設定すると、Simple Log Service は、Logtail 構成を使用して収集されたパフォーマンスデータに cluster=クラスター名 のタグを追加します。
重要クラスター名が一意であることを確認してください。そうでない場合、データ競合が発生する可能性があります。
[プロファイルホワイトリスト]
収集したいデータのタイプ。
収集間隔
データが収集される間隔。単位:秒。
タイムアウト期間
データ収集のタイムアウト期間。単位:秒。
最大ボディサイズ
収集できるデータの最大サイズ。単位:KB。
Kubernetes セレクター構成
名前空間
名前空間の名前に一致するために使用される正規表現。このパラメーターは、データが収集される名前空間を指定します。
ポッド名
Pod の名前に一致するために使用される正規表現。このパラメーターは、データが収集される Pod を指定します。
コンテナ名
コンテナーの名前に一致するために使用される正規表現。このパラメーターは、データが収集されるコンテナーを指定します。
環境変数 ホワイトリスト
環境変数ホワイトリストは、データを収集するコンテナーを指定します。デフォルトでは、このパラメーターは空であり、すべてのコンテナー内のすべての Kubernetes Go プログラムからパフォーマンスデータが収集されることを意味します。ホワイトリストを構成する場合、キーは必須で、値はオプションです。
値を空のままにすると、指定されたキーを持つ環境変数を持つすべてのコンテナーが照合対象となります。
値を指定すると、正確なキーと値のペアである環境変数を持つコンテナーのみが照合対象となります。
デフォルトでは、値は文字列として照合されます。値が環境変数の値と同一である場合にのみ一致が見つかります。値が
^で始まり$で終わる場合、正規表現として扱われます。たとえば、[キー] を NGINX_SERVICE_PORT に、[値] を ^(80|6379)$ に設定します。これにより、サービスポートが 80 または 6379 のコンテナーが照合対象となります。
キーと値のペアは OR 演算子で結合されます。コンテナーに、指定されたキーと値のペアのいずれかに一致する環境変数がある場合、そのコンテナーが照合対象となります。
環境変数ブラックリスト
環境変数ブラックリストは、データを収集しないコンテナーを指定します。デフォルトでは、このパラメーターは空であり、除外されるコンテナーがないことを意味します。ブラックリストを構成する場合、キーは必須で、値はオプションです。
値を空のままにすると、指定されたキーを持つ環境変数を持つすべてのコンテナーが除外されます。
値を指定すると、正確なキーと値のペアである環境変数を持つコンテナーのみが除外されます。
デフォルトでは、`value` は文字列照合を使用し、指定された `value` が環境変数の値と同一である必要があります。値が
^で始まり$で終わる場合、正規表現照合が使用されます。たとえば、[キー] を NGINX_SERVICE_PORT に、[値] を ^(80|6379)$ に設定すると、このルールはサービスポートが 80 または 6379 のコンテナーに一致します。
キーと値のペアは OR 演算子で結合されます。コンテナーに、指定されたキーと値のペアのいずれかに一致する環境変数がある場合、そのコンテナーは除外されます。
[K8s ラベルホワイトリスト]
Kubernetes ラベルホワイトリストは、データを収集するコンテナーを指定します。ホワイトリストを構成する場合、キーは必須で、値はオプションです。
値を空のままにすると、指定されたキーを持つ Kubernetes ラベルを持つすべてのコンテナーが照合対象となります。
値を指定すると、正確なキーと値のペアである Kubernetes ラベルを持つコンテナーのみが照合対象となります。
デフォルトでは、値は文字列として照合されます。値が Kubernetes ラベルの値と同一である場合にのみ一致が見つかります。値が
^で始まり$で終わる場合、正規表現として扱われます。たとえば、[キー] を app に、[値] を ^(test1|test2)$ に設定します。これにより、Kubernetes ラベル app:test1 または app:test2 を持つコンテナーが照合対象となります。
キーと値のペアは OR 演算子で結合されます。コンテナーに、指定されたキーと値のペアのいずれかに一致する Kubernetes ラベルがある場合、そのコンテナーが照合対象となります。
[K8s ラベルブラックリスト]
Kubernetes ラベルブラックリストは、データを収集しないコンテナーを指定します。ブラックリストを構成する場合、キーは必須で、値はオプションです。
値を空のままにすると、指定されたキーを持つ Kubernetes ラベルを持つすべてのコンテナーが除外されます。
値を指定すると、正確なキーと値のペアである Kubernetes ラベルを持つコンテナーのみが除外されます。
デフォルトでは、`value` は文字列として照合されます。これは、`value` が Kubernetes ラベルの値と同一である場合にのみ一致が発生することを意味します。値が
^で始まり$で終わる場合、正規表現として扱われます。たとえば、[キー] を app に、[値] を ^(test1|test2)$ に設定すると、Kubernetes ラベル `app:test1` または `app:test2` を持つコンテナーが照合対象となります。
キーと値のペアは OR 演算子で結合されます。コンテナーに、指定されたキーと値のペアのいずれかに一致する Kubernetes ラベルがある場合、そのコンテナーは除外されます。
コンテナ ラベル ホワイトリスト
コンテナーラベルホワイトリストは、データを収集するコンテナーを指定します。デフォルトでは、このパラメーターは空であり、すべてのコンテナー内のすべての Kubernetes Go プログラムからパフォーマンスデータが収集されることを意味します。ホワイトリストを構成する場合、キーは必須で、値はオプションです。
値を空のままにすると、指定されたキーを持つコンテナーラベルを持つすべてのコンテナーが照合対象となります。
値を指定すると、正確なキーと値のペアであるコンテナーラベルを持つコンテナーのみが照合対象となります。
デフォルトでは、値は文字列として照合されます。値がコンテナーラベルの値と同一である場合にのみ一致が見つかります。値が
^で始まり$で終わる場合、正規表現として扱われます。たとえば、[キー] を io.kubernetes.container.name に、[値] を ^(nginx|cube)$ に設定します。これにより、nginx または cube という名前のコンテナーが照合対象となります。
キーと値のペアは OR 演算子で結合されます。コンテナーに、指定されたキーと値のペアのいずれかに一致するコンテナーラベルがある場合、そのコンテナーが照合対象となります。
コンテナラベルブラックリスト
コンテナーラベルブラックリストは、データを収集しないコンテナーを指定します。デフォルトでは、このパラメーターは空であり、除外されるコンテナーがないことを意味します。ブラックリストを構成する場合、キーは必須で、値はオプションです。
値を空のままにすると、指定されたキーを持つコンテナーラベルを持つすべてのコンテナーが除外されます。
値を指定すると、正確なキーと値のペアであるコンテナーラベルを持つコンテナーのみが除外されます。
デフォルトでは、`value` はコンテナーのラベル値に対する完全な文字列一致に使用されます。値が
^で始まり$で終わる場合、正規表現として扱われます。たとえば、[キー] を io.kubernetes.container.name に、[値] を ^(nginx|cube)$ に設定すると、この構成は `nginx` または `cube` という名前のコンテナーに一致します。
キーと値のペアは OR 演算子で結合されます。コンテナーに、指定されたキーと値のペアのいずれかに一致するコンテナーラベルがある場合、そのコンテナーは除外されます。
構成を完了すると、Simple Log Service は Metricstore などのアセットを自動的に作成します。詳細については、「アセット」をご参照ください。
次のステップ
Go プログラムからフルスタック可観測性に pprof パフォーマンスデータを収集した後、パフォーマンス監視機能を使用してパフォーマンスの問題をトラブルシューティングできます。詳細については、「データクエリ」および「データ比較」をご参照ください。