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経由でパフォーマンスデータを取得できます。
準備
パフォーマンスデータの公開メカニズムを有効にします。
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) " ネット /http" _ " ネット /http/pprof" ) func main() { // 何かを... _ = http.ListenAndServe(":8080" 、nil) } "data-tag=" codeblock "outputclass=" language-go ""> パッケージメイン import (import (import) "net/http" _"net/http/pprof" ) func main() { // 何かを... _ = 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=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パフォーマンスデータを収集した後、パフォーマンスモニタリング機能を使用してパフォーマンスの問題をトラブルシューティングできます。 詳細については、「データクエリ」および「データ比較」をご参照ください。