ARMS コンソールは、オープンソースのソリューションに完全に対応しています。 このトピックでは、カスタムの可観測性ダッシュボードの作成など、高度なカスタマイズが必要なシナリオ向けに、Grafana と Prometheus の使用方法について説明します。 また、カスタムクエリ文を記述してデータを取得する方法の例も示します。
背景情報
Managed Service for Prometheus は、デフォルトでアプリケーションモニタリングのデータソースを統合します。 Managed Service for Prometheus を使用して、アプリケーションのモニタリングデータを取得し、事前構築済みのダッシュボードを表示し、必要に応じてカスタマイズできます。
前提条件
アプリケーションモニタリングは、各リージョンに無料の Alibaba Cloud Prometheus インスタンスを自動的に作成します。 中国 (杭州) リージョンのアプリケーションモニタリングのすべてのメトリックは、同リージョンの Managed Service for Prometheus の arms_metrics_cn-hangzhou_cloud_hangzhou インスタンスに保存されます。
利用シーン
-
アプリケーションモニタリングのメトリックに基づいてダッシュボードを作成します。
-
日々の O&M (運用保守) のために、アプリケーションモニタリングのメトリックと他のデータソースの特定コンポーネントのメトリックを組み合わせて、専用のダッシュボードを作成します。
-
Web サイトのトラフィックピークの前に、アプリケーションモニタリングのメトリックと他のデータソースの上流および下流コンポーネントのメトリックを組み合わせて、シナリオ固有のダッシュボードを作成します。
-
Prometheus モニタリングを介して取得したアプリケーションモニタリングのデータを、セルフマネージドの Grafana に表示します。
-
Prometheus モニタリングから取得したアプリケーションモニタリングのデータに対して、さらなる開発を行います。
前提条件
-
ご利用のアプリケーションにエージェントがインストールされていること。 詳細については、「アプリケーションモニタリングのオンボーディング概要」をご参照ください。
-
Grafana をオンプレミスにインストール済みであるか、または Managed Service for Grafana のワークスペースを作成済みであること。
可視化ダッシュボードのカスタマイズ
ステップ 1:アプリケーションモニタリングのデータソースの追加
Managed Service for Prometheus は、デフォルトでアプリケーションモニタリングのデータソースを統合しているため、Grafana で対応する Managed Service for Prometheus インスタンスをデータソースとして追加するだけで済みます。
セルフマネージド Grafana
-
Prometheus の HTTP API エンドポイントを取得します。
-
ARMS コンソールで、 ページに移動します。 上部のメニューバーで、アプリケーションがデプロイされているリージョンを選択します。
Prometheus for Application Monitoring タイプのインスタンスは、アプリケーションモニタリングのデフォルトの統合インスタンスです。
-
アプリケーションモニタリングインスタンスの名前をクリックし、左側のナビゲーションウィンドウで [設定] をクリックして、HTTP API エンドポイントを表示します。
[設定] ページの下部にある [HTTP API アドレス (Grafana 読み取りアドレス)] セクションで、パブリック URL と内部 URL を確認できます。
-
(任意) Grafana からのデータ読み取りを保護するために、トークンの生成 をクリックして、Prometheus インスタンスの認証トークンを取得できます。
重要トークンを生成した後は、Grafana でデータソースを追加する際に、このトークンを設定する必要があります。 そうしないと、Grafana は Prometheus からモニタリングデータを読み取ることができません。
-
-
Grafana に Prometheus データソースを追加します。
このセクションでは、Grafana 10.x を例として説明します。 他のバージョンの Grafana でデータソースを追加する方法については、Grafana の公式ドキュメントをご参照ください。
-
管理者としてセルフマネージドの Grafana にログインします。
-
ページの左上隅にある
アイコンをクリックし、 を選択します。 -
[+ 新しいデータソースを追加] をクリックし、データソースタイプとして [Prometheus] を選択します。
-
[設定] タブで、[名前] フィールドにカスタム名を入力し、前のステップで取得した HTTP API エンドポイントを [Prometheus サーバー URL] フィールドに貼り付けます。
-
(任意) [カスタム HTTP ヘッダー] セクションで、[+ヘッダーを追加] をクリックし、ヘッダーを Authorization に、値を認証トークンに設定します。
-
タブの下部にある [保存してテスト] をクリックします。
-
Managed Service for Grafana
Alibaba Cloud Managed Service for Grafana を使用すると、ワンクリックでアプリケーションモニタリングのデータソースとダッシュボードを統合できます。
-
ARMS コンソールで、 に移動し、ご利用のワークスペースの ID をクリックします。
-
ワークスペースの情報 ページの クラウドサービスの統合 セクションで、[ARMS アプリケーションモニタリングサービス] をクリックし、対応するリージョンのインスタンスの右側にある 統合 をクリックします。
-
表示されたダイアログボックスで、確認 をクリックします。
-
同期が完了したら、右側の フォルダ アイコンをクリックします。
-
Grafana の [ダッシュボード] タブで、ダッシュボード名をクリックして、アプリケーションモニタリング用に事前構築されたデフォルトのダッシュボードを表示します。
アプリケーションモニタリング用に事前構築されたデフォルトのダッシュボードには、[DB]、[アプリケーション]、[API]、[ホスト] の 4 つのダッシュボードが含まれます。
-
ページの左上隅にある
アイコンをクリックし、 を選択して、追加されたアプリケーションモニタリングのデータソースを表示します。データソースが正常に追加されると、データソースリストに Prometheus データソースが表示されます。 名前は
arms_metrics_cn-hangzhou_cloud_hangzhou_xxxのようになり、対応する URL はhttp://cn-hangzhou.arms.aliyuncs.com:9090/api/v1/prometheus/<InstanceID>です。
ステップ 2:カスタムダッシュボードの設定
-
Grafana で、ページの左上隅にある
アイコンをクリックし、[ダッシュボード] をクリックします。 -
[ダッシュボード] ページで、 を選択します。 [新しいダッシュボード] ページで、[可視化を追加] をクリックしてパネルを作成します。
-
表示される [データソースの選択] ダイアログボックスで、アプリケーションモニタリングのデータソースを選択します。 データソース名は、デフォルトで arms_metrics_{regionid}_cloud です。
重要現在のデータソースにデータが存在することを確認してください。
-
タブ [A] のクエリエディターで、クエリメトリックを設定します。
PromQL クエリ
[コード] モードで、[メトリクスブラウザ] の右側に PromQL クエリ文を入力します。
ARMS コンソールのアプリケーションモニタリングのモニタリング詳細ページで、
アイコンをクリックすると、メトリックに対応する PromQL 文を表示できます。 詳細については、「クエリ文」をご参照ください。たとえば、[リクエスト数] メトリックパネルを展開すると、PromQL クエリエディターに対応するクエリ文が表示されます。例:
sum by (callType,)(sum_over_time_lorc(arms_app_requests_count_ign_destid_endpoint_ppid_prpc{pid="...",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm"}[1m]))。PromQL クエリ文の使用方法の詳細については、Prometheus の公式ドキュメントをご参照ください。
アプリケーションモニタリングのメトリック
[ビルダー] モードで、[メトリック] ドロップダウンリストから特定のメトリックを選択します。たとえば、
arms_jvm_threads_countを選択して JVM スレッド数をクエリします。 アプリケーションモニタリングがサポートするメトリックの詳細については、「アプリケーションモニタリングのメトリック」をご参照ください。[ラベルフィルター] セクションで、ラベルのフィルタリング条件を設定します。たとえば、
host= ターゲット IP です。 対応する PromQL クエリ文が自動的に生成されます。例:arms_jvm_threads_count{host="xxx.xxx.xx.67"}。 -
右側で、パネルタイトルを設定し、チャートタイプを選択します。
説明同じメトリックに対して、異なるチャートタイプを選択して、異なる粒度でデータを可視化できます。
右側のパネルエディターで、可視化タイプを [時系列] に設定します。 [パネルオプション] セクションで、[タイトル] フィールドに JVM スレッド数と入力します。
-
設定が完了したら、右上隅の [適用] をクリックします。
クエリ文のカスタマイズ
ARMS コンソールの Prometheus HTTP API と PromQL 文を使用して、シェルスクリプトや Java コードで HTTP リクエストを送信し、取得するデータをカスタマイズできます。
たとえば、Prometheus HTTP API エンドポイントが https://cn-hangzhou.arms.aliyuncs.com:9443/api/v1/prometheus/7a8f8e783c66a44a0f6a1dc9a0b8f1/1277589232893727/arms-metrics-99214ff7de7d0b2d/cn-hangzhou の場合、これを PromQL 文と次のフォーマットで組み合わせます。
{{Prometheus HTTP API}}/api/v1/query_range?query={{PromQL}}&start={{startTime}}&end={{endTime}}&step={{step}}
結果として得られるクエリ文は次のようになります。
https://cn-hangzhou.arms.aliyuncs.com:9443/api/v1/prometheus/7a8f8e783c66a44a0f6a1dc9a0b8f1/1277589232893727/arms-metrics-99214ff7de7d0b2d/cn-hangzhou/api/v1/query_range?query=sum by (callType,)(sum_over_time_lorc(arms_app_requests_count_ign_destid_endpoint_ppid_prpc{pid="ckv8e2vzfj@7e393063f3fd6ad",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm", }[1m]))&start=1728719399&end=1728722999&step=60s
応答データのサンプル:
{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"callType":"http"},"values":[[1728719399,"1575"],[1728719459,"1599"],[1728719519,"1593"],[1728719579,"1584"],[1728719639,"1578"],[1728719699,"1568"],[1728719759,"1561"],[1728719819,"1555"],[1728719879,"1547"],[1728719939,"1540"],[1728719999,"1533"],[1728720059,"1524"],[1728720119,"1518"],[1728720179,"1512"],[1728720239,"1503"],[1728720299,"1497"],[1728720359,"1491"],[1728720419,"1482"],[1728720479,"1476"],[1728720539,"1467"],[1728720599,"1464"],[1728720659,"1453"],[1728720719,"1448"],[1728720779,"1443"],[1728720839,"1434"],[1728720899,"1428"],[1728720959,"1419"],[1728721019,"1416"],[1728721079,"1407"],[1728721139,"1401"],[1728721199,"1395"],[1728721259,"1389"],[1728721319,"1381"],[1728721379,"1374"],[1728721439,"1366"],[1728721499,"1367"],[1728721559,"1350"],[1728721619,"1350"],[1728721679,"1344"],[1728721739,"1335"],[1728721799,"1331"],[1728721859,"1324"],[1728721919,"1320"],[1728721979,"1314"],[1728722039,"1305"],[1728722099,"1302"],[1728722159,"1296"],[1728722219,"1287"],[1728722279,"1284"],[1728722339,"1233"],[1728722399,"1272"],[1728722459,"1155"],[1728722519,"1116"],[1728722579,"1110"],[1728722639,"1107"],[1728722699,"1098"],[1728722759,"1095"],[1728722819,"1086"],[1728722879,"1083"],[1728722939,"1077"],[1728722999,"1184"]]}]}}
よくある質問
クエリの課金
はい。
PromQL クエリの速度制限
速度制限は有効ですが、その上限は単純なエントリーポイントでの 1 秒あたりのクエリ数 (QPS) に基づくものではありません。これは、クエリごとに消費されるリソース量が異なるためです。 すべての API をクエリしたり、30 日を超える期間のデータをクエリしたりするなどの高消費クエリは避け、クエリレートを 50 QPS 未満に保ってください。 持続的な高消費クエリを実行する必要がある場合は、事前にチケットを送信してクォータの引き上げをリクエストしてください。