導入
このチュートリアルでは、DigitalOcean App Platform にデプロイされた Web アプリケーションを使用して、DigitalOcean で管理されている PostgreSQL データベースの集計メトリックを収集する方法を学習します。.
このデモではサンプルの Node.js アプリケーションを使用し、このチュートリアルで作成する Managed DigitalOcean PostgreSQL データベースに接続します。.
このチュートリアルの最後には、App Platform Web アプリケーションに接続された管理対象 PostgreSQL データベースからメトリックをスクレイピングして表示する Prometheus ダッシュボードが完成します。.
前提条件
始める前に、次の前提条件が満たされていることを確認してください。
- DigitalOcean アカウント。.
- App Platform にデプロイされたサンプル Node.js アプリケーション。.
- Postgres データベースがデプロイされ、App Platform アプリケーションに接続されました。.
- 読み取り/書き込み(rw)アクセス権限を持つ個人用アクセストークンが作成されます。個人用アクセストークンの作成方法については、こちらのチュートリアルをご覧ください。.
ステップ1 – マネージドPostgreSQLデータベースの設定
まず、PostgreSQL データベースを作成しましょう。.
DigitalOcean クラウド コントロール パネルのデータベース セクションに移動します。.
「データベースクラスターの作成」をクリックし、PostgreSQLを選択します。下の画像に示すように、データセンターのリージョンとVPCネットワークを選択する必要があります。
次に、データベースとして PostgreSQL を選択し、データベースのその他の設定を選択します。.
データベース設定を構成し、画面の指示に従って、「データベース クラスターの作成」をクリックします。.
PostgreSQL マネージド データベース クラスターが作成されると、次のタブで概要、分析情報、レポート、設定を確認できます。
ステップ2 – アプリケーションプラットフォームにNode.js Webアプリケーションインスタンスをデプロイする
手順に従ってサンプル Node.js アプリをデプロイするか、この github リポジトリを使用して App Platform 上にサンプル Node.js アプリを作成できます。.
後者を使用する場合は、このGitHubリポジトリを自分のGitHubアカウントにフォークして、クラウドにコピーを保存する必要があります。GitHubリポジトリの「フォーク」ボタンをクリックし、画面の指示に従ってください。.
次に、DigitalOcean クラウド ポータルにログインし、「アプリの作成」 -> 「アプリ プラットフォーム」に移動します。.
次に、「その他: サンプル アプリを選択」の下にある「サンプル アプリ」ドロップダウン メニューから Node.js サンプル アプリを選択し、「次へ」をクリックします。.
画面の指示に従ってアプリケーションリソース、一般設定、環境変数を設定し、「次へ」をクリックします。完了したら、アプリケーションの一般設定を確認します。完了したら、「リソースの作成」をクリックします。アプリケーションを作成した後、アプリケーションプラットフォームにデプロイされるまでには少し時間がかかります。.
アプリケーションがデプロイされ、ビルドされると、アプリケーションの概要を確認し、ブラウザでデプロイされたアプリケーションにアクセスできます。.
ステップ3 – PostgreSQLデータベースをアプリプラットフォームに接続する
このステップでは、このチュートリアルのステップ 1 で作成したマネージド PostgreSQL データベースを、ステップ 2 で作成した Node.js アプリケーション サンプルに接続します。.
デプロイされたアプリ プラットフォーム アプリに移動し、デプロイされたアプリ ダッシュボードの [作成] ボタンをクリックして、[データベースの作成/アタッチ] をクリックします。
次に、「以前に作成した DigitalOcean データベース」を選択し、最近デプロイした PostgreSQL マネージド データベース クラスターを選択して、下部にある「データベースをアタッチ」ボタンをクリックします。.
データベースの概要セクションで、App Platform アプリが信頼できるソースとして正常に追加されたことを確認できます。.
ステップ4 – /metricsエンドポイントからスクレイピング可能なメトリクスを取得する
/metricsエンドポイントを通じて、データベースクラスターのメトリクスをプログラムで表示できます。このエンドポイントには、コントロールパネルのInsightsタブでアクセスできるメトリクスの20倍以上が含まれています。.
curl コマンドを使用してメトリック エンドポイントにアクセスするか、Postman を使用して Prometheus などの監視システムでそれらのメトリックを視覚化することができます。.
まず、DigitalOceanコントロールパネルのAPIセクションに移動し、新しい個人アクセストークンを作成し、「フルアクセストークンを生成」をクリックします。このアクセストークンは次の手順で必要となりますので、メモしておいてください。.
この例では、Postman を使用してすべての HTTP リクエストを実行します。または、App Platform インスタンスから curl コマンドを実行して API リクエストへのレスポンスを取得することもできます。.
ホスト名とポートを取得します。
まず、GET リクエストを https://api.digitalocean.com/v2/databases/{UUID} に送信して、クラスター メトリックのホスト名を取得する必要があります。.
App Platformインスタンスから以下のcurlコマンドを実行します。コンソールセクションに移動してください。
ホスト名とデータベースの資格情報を取得するには、次のコマンドを使用します。
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl --silent -XGET --location 'https://api.digitalocean.com/v2/databases/{UUID}' --header 'Content-Type: application/json' --header "Authorization: Bearer $RO_DIGITALOCEAN_TOKEN"{UUID} と $RO_DIGITALOCEAN_TOKEN を、管理対象の PostgreSQL データベースの UUID と個人アクセス パスワードに置き換えてください。.
このコマンドを実行すると、管理対象の PostgreSQL データベース クラスターの詳細が出力されます。
Output
"database": {
"id": "192a6077-d103-4e72-bd2c-e370fd6b5608",
"name": "db-postgresql-nyc3-66505",
"engine": "pg",
"version": "16",
"semantic_version": "16.3",
"connection": {
"protocol": "postgresql",
"uri": "postgresql://doadmin:AVNS_uVoGq5jCPdaxW3hghhV@db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
"database": "defaultdb",
"host": "db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 25060,
"user": "doadmin",
"password": "AVNS_uVoGq5jCPdaxW3hghhV",
"ssl": true
},
"private_connection": {
"protocol": "postgresql",
"uri": "postgresql://doadmin:AVNS_uVoGq5jCPdaxW3hghhV@private-db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
"database": "defaultdb",
"host": "private-db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 25060,
"user": "doadmin",
"password": "AVNS_uVoGq5jCPdaxW3hghhV",
"ssl": true
},
"metrics_endpoints": [
{
"host": "db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 9273
}
],
"users": [
{
"name": "doadmin",
"role": "primary",
"password": "XXXXXXXXXXX"
}
],
"db_names": [
"defaultdb"
],
"num_nodes": 1,
"region": "nyc3",
"status": "online",
"created_at": "2024-06-10T21:04:32Z",
"maintenance_window": {
"day": "monday",
"hour": "00:07:46",
"pending": false
},
"size": "db-s-1vcpu-1gb",
"tags": [
"testtestnn"
],
"private_network_uuid": "xxxxxxxxxx",
"project_id": "xxxxxxxxxxx",
"read_only": false,
"version_end_of_life": "2028-11-09T00:00:00Z",
"version_end_of_availability": "2028-05-09T00:00:00Z",
"storage_size_mib": 10240
}
}上記の出力では、ホストとポートのペアに注目してください。今回の場合、ホストはdb-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com、ポートは9273です。.
また、システムに Postman をインストールし、データベースの信頼できるソース設定でシステムの IP アドレスを信頼できるソースとして追加している場合は、上記の HTTP GET リクエストを Postman で実行できます。.
URL https://api.digitalocean.com/v2/databases/{UUID} を追加し、認証タブの個人アクセス コードを、ベアラー トークンとして選択された検証タイプに置き換えるだけです。.
クラスターメトリックの検証を取得する
次に、クラスターメトリクスの認証情報が必要です。これらは、管理者トークンまたは書き込みトークンを使用して https://api.digitalocean.com/v2/databases/metrics/credentials に GET リクエストを送信することで取得できます。.
App Platform サンプル アプリケーションから次の curl コマンドを使用します。
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl --silent -XGET --location 'https://api.digitalocean.com/v2/databases/metrics/credentials' --header 'Content-Type: application/json' --header "Authorization: Bearer xxxxxxxxxxxxxxxxx"ユーザー名とパスワードを含むクラスター メトリックの資格情報が提供されます。.
Output{
"credentials": {
"basic_auth_username": "prom2prh",
"basic_auth_password": "xxxxxxxxxxxxx"
}
}/metricsエンドポイントにアクセスする
cURL を使用してエンドポイントにアクセスするには、GET リクエストを https://$HOST:9273/metrics に送信し、ホスト名、ユーザー名、およびパスワードの変数を前の手順で見つけた資格情報に置き換えます。
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl -XGET -k -u $USERNAME:$PASSWORD https://$HOST:9273/metrics次のような多くのメタデータが提供されるはずです。
Output...
1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0.7
# HELP system_n_cpus Telegraf collected metric
# TYPE system_n_cpus gauge
system_n_cpus{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 1
# HELP system_n_unique_users Telegraf collected metric
# TYPE system_n_unique_users gauge
system_n_unique_users{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0
# HELP system_n_users Telegraf collected metric
# TYPE system_n_users gauge
system_n_users{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0
# HELP system_uptime Telegraf collected metric
# TYPE system_uptime counter
system_uptime{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 640073
...ステップ5 – Prometheusでメトリクスを視覚化する
Prometheusを使用してエンドポイントにアクセスするには、以下の設定をprometheus.ymlファイルにコピーし、ホスト名、ユーザー名、パスワード、CA証明書のパスを置き換えます。これにより、Prometheusはエンドポイントへのアクセスに必要なすべての認証情報を使用するようになります。
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'dbaas_cluster_metrics_svc_discovery'
scheme: https
tls_config:
ca_file: /path/to/ca.crt
dns_sd_configs:
- names:
- $TARGET_ADDRESS
type: 'A'
port: 9273
refresh_interval: 15s
metrics_path: '/metrics'
basic_auth:
username: $BASIC_AUTH_USERNAME
password: $BASIC_AUTH_PASSWORD$TARGET_ADDRESS、$BASIC_AUTH_USERNAME、および $BASIC_AUTH_PASSWORD を、上記の手順で取得したホスト名、ユーザー名、およびパスワードに置き換えてください。.
次に、以下の接続スクリプトをup.shというファイルにコピーします。このスクリプトはenvsubstを実行し、前の手順で作成した設定でPrometheusコンテナを起動します。.
#!/bin/bash
envsubst < prometheus.yml > /tmp/dbaas-prometheus.yml
docker run -p 9090:9090 \
-v /tmp/dbaas-prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheusブラウザで http://localhost:9090/targets にアクセスし、複数のホストが稼働していることを確認します。.
次に、http://localhost:9090/graph にアクセスして、Prometheus からデータベース メトリックをクエリします。.
詳細については、Prometheus DNS SD のドキュメントと TLS 構成のドキュメントを参照してください。.
各メトリックについて学習して理解するには、この公式の PostgreSQL 監視統計ドキュメントを参照してください。.
管理された PostgreSQL データベースのスクレイピング可能なメトリックを収集する方法についても詳しく説明します。.
結果
このチュートリアルでは、DigitalOcean アプリケーション プラットフォームにデプロイされた Node.js ウェブ アプリケーションと Prometheus を使用して、DigitalOcean 上のマネージド PostgreSQL データベースを設定し、メトリクスをスクレイピングする方法を説明します。スクレイピング可能なメトリクスを有効にすると、データベースのパフォーマンスと健全性を簡単に監視でき、最適なパフォーマンスを確保し、問題が発生した場合に詳細なトラブルシューティングを行うことができます。.


























