Grafana を使用した TiDB 監視のベスト プラクティス

TiUPを使用してTiDBクラスタを展開するトポロジ構成に Grafana と Prometheus を追加すると、 Grafana + Prometheus 監視プラットフォームのセットが同時にデプロイされ、TiDB クラスター内のさまざまなコンポーネントとマシンのメトリックを収集して表示します。このドキュメントでは、Grafana を使用して TiDB を監視するためのベスト プラクティスについて説明します。メトリックを使用して TiDB クラスターの状態を分析し、問題を診断するのに役立つことを目的としています。

監視アーキテクチャ

プロメテウスは、多次元データ モデルと柔軟なクエリ言語を備えた時系列データベースです。2 グラファナ 、メトリックを分析および視覚化するためのオープン ソース監視システムです。

The monitoring architecture in the TiDB cluster

TiDB 2.1.3 以降のバージョンでは、TiDB モニタリングはプル方式をサポートしています。これは、次のような利点がある優れた調整です。

  • Prometheus を移行する必要がある場合、TiDB クラスター全体を再起動する必要はありません。調整の前に、Prometheus を移行するには、ターゲット アドレスを更新する必要があるため、クラスター全体を再起動する必要があります。
  • 監視ポイントが 1 つになることを防ぐために、Grafana + Prometheus 監視プラットフォーム (高可用性ではない) の 2 つの別々のセットを展開できます。
  • 単一障害点となる可能性のある Pushgateway が削除されます。

監視データのソースと表示

TiDB の 3 つのコア コンポーネント (TiDBサーバー、TiKVサーバー、PDサーバー) は、HTTP インターフェイスを介してメトリックを取得します。これらのメトリックはプログラム コードから収集され、ポートは次のとおりです。

成分ポート
TiDBサーバー10080
TiKVサーバー20181
PDサーバー2379

HTTP インターフェイスを介して SQL ステートメントの QPS を確認するには、次のコマンドを実行します。TiDBサーバーを例に挙げます。

curl http://__tidb_ip__:10080/metrics |grep tidb_executor_statement_total
# Check the real-time QPS of different types of SQL statements. The numbers below are the cumulative values of counter type (scientific notation). tidb_executor_statement_total{type="Delete"} 520197 tidb_executor_statement_total{type="Explain"} 1 tidb_executor_statement_total{type="Insert"} 7.20799402e+08 tidb_executor_statement_total{type="Select"} 2.64983586e+08 tidb_executor_statement_total{type="Set"} 2.399075e+06 tidb_executor_statement_total{type="Show"} 500531 tidb_executor_statement_total{type="Use"} 466016

上記のデータは Prometheus に保存され、Grafana に表示されます。パネルを右クリックし、次の図に示すように編集ボタンをクリックするか (または直接Eキーを押します)。

The Edit entry for the Metrics tab

[編集]ボタンをクリックすると、[メトリック] タブにtidb_executor_statement_totalメトリック名を含むクエリ式が表示されます。パネル上のいくつかの項目の意味は次のとおりです。

  • rate[1m] : 1分間の成長率。カウンター型のデータにのみ使用できます。
  • sum : 値の合計。
  • by type : 合計データは元のメトリック値のタイプ別にグループ化されます。
  • Legend format : メトリック名の形式。
  • Resolution : ステップ幅のデフォルトは 15 秒です。解像度は、複数のピクセルに対して 1 つのデータ ポイントを生成するかどうかを意味します。

[メトリック]タブのクエリ式は次のとおりです。

The query expression on the Metrics tab

Prometheusは多くのクエリ式と関数をサポートしています。詳細については、 プロメテウス公式サイトを参照してください。

Grafanaのヒント

このセクションでは、Grafana を使用して TiDB のメトリックを効率的に監視および分析するための 7 つのヒントを紹介します。

ヒント1: すべてのディメンションをチェックし、クエリ式を編集する

セクション監視データのソースと表示に示した例では、データはタイプ別にグループ化されています。他のディメンションでグループ化できるかどうか、またどのディメンションが使用可能かをすばやく確認したい場合は、次の方法を使用できます。クエリ式にメトリック名のみを残し、計算は行わず、 Legend formatフィールドを空白のままにします。このようにすると、元のメトリックが表示されます。たとえば、次の図は、3 つのディメンション ( instancejobtype ) があることを示しています。

Edit query expression and check all dimensions

次に、 typeの後にinstanceディメンションを追加し、 Legend formatフィールドに{{instance}}追加して、クエリ式を変更できます。このようにして、各 TiDBサーバーで実行されるさまざまな種類の SQL ステートメントの QPS を確認できます。

Add an instance dimension to the query expression

ヒント2: Y軸のスケールを切り替える

クエリ期間を例にとると、Y 軸はデフォルトで 2 進対数スケール (log 2 n) に設定されており、表示のギャップが狭くなります。変化を強調するには、線形スケールに切り替えることができます。次の 2 つの図を比較すると、表示の違いが簡単にわかり、SQL ステートメントの実行が遅い時間を特定できます。

もちろん、線形スケールはすべての状況に適しているわけではありません。たとえば、1 か月間のパフォーマンスの傾向を観察する場合、線形スケールではノイズが発生し、観察が困難になる可能性があります。

Y 軸はデフォルトで 2 進対数スケールを使用します。

The Y-axis uses a binary logarithmic scale

Y 軸を線形スケールに切り替えます。

Switch to a linear scale

ヒント:

ヒント 2 とヒント 1 を組み合わせると、 SELECTステートメントとUPDATEのステートメントのどちらが遅いかをすぐに分析するのに役立つsql_typeディメンションを見つけることができます。また、遅い SQL ステートメントのインスタンスを見つけることもできます。

ヒント3: Y軸のベースラインを変更して変化を強調する

線形スケールに切り替えても、傾向がまだ見えない場合があります。たとえば、次の図では、クラスターをスケーリングした後、 Store sizeのリアルタイムの変化を観察したいのですが、ベースラインが大きいため、小さな変化は見えません。このような状況では、Y 軸のベースラインを0からautoに変更して、上部を拡大することができます。下の 2 つの図を確認すると、データ移行が始まっていることがわかります。

ベースラインのデフォルトは0です。

Baseline defaults to 0

ベースラインをautoに変更します。

Change the baseline to auto

ヒント4: 共有のクロスヘアまたはツールチップを使用する

設定パネルには、デフォルトでDefaultに設定されているグラフ ツールチップパネル オプションがあります。

Graphic presentation tools

次の図に示すように、共有クロスヘア共有ツールチップをそれぞれ使用して効果をテストできます。その後、スケールがリンクして表示されるため、問題を診断するときに 2 つのメトリックの相関関係を確認するのに便利です。

グラフィックプレゼンテーションツールを共有クロスヘアに設定します。

Set the graphical presentation tool to Shared crosshair

グラフィカルプレゼンテーションツールを共有ツールチップに設定します。

Set the graphic presentation tool to Shared Tooltip

ヒント5: 履歴のメトリックを確認するには、 IP address:port numberを入力します。

PD のダッシュボードには、現在のリーダーの指標のみが表示されます。履歴内の PD リーダーのステータスを確認する場合、その PD リーダーがinstanceフィールドのドロップダウン リストに存在しない場合は、手動でIP address:2379を入力してリーダーのデータを確認できます。

Check the metrics in history

ヒント6: Avg関数を使用する

通常、凡例ではデフォルトでMaxCurrent関数のみが使用可能です。指標が大きく変動する場合は、凡例にAvg機能などの他のサマリー関数を追加して、一定期間の全体的な傾向を確認できます。

Avg関数などの集計関数を追加します。

Add summary functions such as Avg

次に、全体的な傾向を確認します。

Add Avg function to check the overall trend

ヒント7: PrometheusのAPIを使用してクエリ式の結果を取得する

Grafana は Prometheus の API を通じてデータを取得しており、この API を使用して情報を取得することもできます。また、次のような用途もあります。

  • クラスターのサイズやステータスなどの情報を自動的に取得します。
  • 1 日あたりの QPS の合計量、1 日あたりの QPS のピーク値、1 日あたりの応答時間のカウントなど、レポートの情報を提供するために式に小さな変更を加えます。
  • 重要な指標について定期的な健全性検査を実行します。

Prometheus の API は次のようになります。

The API of Prometheus

curl -u user:pass 'http://__grafana_ip__:3000/api/datasources/proxy/1/api/v1/query_range?query=sum(tikv_engine_size_bytes%7Binstancexxxxxxxxx20181%22%7D)%20by%20(instance)&start=1565879269&end=1565882869&step=30' |python -m json.tool
{ "data": { "result": [ { "metric": { "instance": "xxxxxxxxxx:20181" }, "values": [ [ 1565879269, "1006046235280" ], [ 1565879299, "1006057877794" ], [ 1565879329, "1006021550039" ], [ 1565879359, "1006021550039" ], [ 1565882869, "1006132630123" ] ] } ], "resultType": "matrix" }, "status": "success" }

まとめ

Grafana + Prometheus 監視プラットフォームは非常に強力なツールです。これをうまく活用することで効率が向上し、TiDB クラスターの状態を分析する時間を大幅に節約できます。さらに重要なのは、問題の診断に役立つことです。このツールは、特に大量のデータがある場合、TiDB クラスターの運用と保守に非常に役立ちます。

このページは役に立ちましたか?