2017-09-22 14 views
3

私はPrometheusにいくつかのメトリクスをエクスポートすることを検討しています。私は何をしようとしているのか心配しています。プロメテウスのハイカーディナリティラベルはどのように危険ですか?

私のシステムはワークフローエンジンで構成されており、ワークフローの各ステップのメトリックをいくつか追跡したいと思います。これは、wfengine_step_duration_secondsと呼ばれるゲージメトリックによって、妥当と思われます。私の問題は、私のワークフロー全体で何千ものステップがあることです。

ドキュメントhereによれば、私はプログラムで名前の一部を生成するはずがありません。つまり、wfengine_step1_duration_secondswfengine_step2_duration_secondsのような名前の使用は除外されます。これは、ステップ名がプログラム的である(時々刻々と変化する)ためです。

解決策は、ステップ名のラベルです。ただし、ドキュメントherehereは、カーディナリティの高いラベルを使用することを強く警告しているため、これにも問題があります。具体的には、「メトリクスの基数を10以下に」、100以上の基数には「次元数を減らす、または分析を監視から外す」などの代替ソリューションを検討することをお勧めします。

私は、数千(1,000〜10,000)のラベル値を探しています。そうでなければ、メトリックの数が極端に多くなることはないので、これはPrometheusを適切に使用するか、各ステップごとに個別の持続時間ではなく、集計された単一の持続時間など、より一般的なメトリクスに限定すべきですか?

答えて

1

あなたの最大のメトリクスのために100基数以下を維持するガイドラインは、あなたがサービスの1000個のレプリカを持っていることを前提としています。それは合理的に安全な上限です。このコードを使用するすべての人が常に低いレプリカ数を持つことがわかっている場合は、計装でカーディナリティが高くなる可能性があります。

そう言っても何千ものラベルはまだ注意が必要です。それが既に数万になっている場合、数十万になる前にどれくらいの時間がかかりますか?長期的には、このデータを基数が与えられたログに移動しなければならない可能性が高いので、今すぐ実行することをお勧めします。

+0

ラベル付きのこれらのレプリカを区別しなかった場合、レプリカの数はどのように多くなりますか? – Mark

+0

私はそれについてもっと考えると、その限界は意味をなさない(または私は何かを誤解している)。たとえば、仮説的なCPU使用率メト​​リックでは、ホスト名をメトリック名に(プログラムで)入れ、ラベルを使用して(したがって10または100台のサーバーに制限する)、サーバーごとのメトリックをすべて破棄しないでください壊れたサーバーを修正する能力を失う)? – Mark

+0

カーディナリティは、メトリクスまたはラベルのいずれであっても、カーディナリティです。 –

関連する問題