フォーム読み込み中
こんにちは。ソフトバンクの木村です。
この記事は、ソフトバンク Advent Calendar 2022 の 6日目の記事になります
MSPサービスのオプションサービスである、クラウドネイティブ・アプリケーションプラットフォーム(CNAP)の開発業務を行っています。
CNAPの開発業務の中で、AWSが提供するPrometheusのマネージド・サービス「Amazon Managed Service for Prometheus(AMP)」の利用を検討したので、本記事ではサービスの機能概要や利用方法について解説します。
PrometheusとはOSSの監視ツールです。Prometheusはサービスディスカバリの機能が強力であることや、さまざまなリソースを簡単に監視対象にできるため、コンテナ・Kubernetesを利用したシステムにおいてはデファクトな監視ツールとなっています。
しかし、Prometheusは単体ではデータの永続的な保存が考慮されたアーキテクチャになっていません。そのため、データの長期保存を考慮する場合、CortexやThanosといった別のOSSストレージツールを組み合わせることになり、運用負荷が大きくなってしまいます。また、性能についても考慮が必要であり、大規模な運用になればなるほど運用負荷が大きくなってしまいます。
これらPrometheusの運用負荷を低減するために、いくつかのクラウドベンダがPrometheusのマネージドサービスを提供しています。今回はAWSが提供しているAmazon Managed Service for Prometheus(AMP)を紹介します
Amazon Managed Service for Prometheus(AMP)はAWSが提供するPrometheusのマネージドサービスです。
AMPの特徴は、Prometheus全体をマネージド・サービスとして提供するのではなく、Prometheusのメトリクスの保存先となるWorkspaceを提供するという点です。自分で構築したPrometheusサーバとAMPのWorkspaceを接続することでメトリクスの収集を行います。
AMPで構築されたWorkspaceのデータは自動的にマルチAZで保存されて、データの永続的な保存が考慮されたアーキテクチャになっています。また、Workspaceは保存されるメトリクス量やクエリ数に応じてオートスケールするため、性能の考慮をする必要もありません。
ここからは、AMPを利用する手順を説明します。
まず、メトリクスの保存先となるWorkspaceを構築します。以下のコマンドを利用してWorkspaceを構築します。コマンド実行後出力されたworkspaceIdがWorkspaceを特定するIDとなるので控えておきます。
$ aws amp create-workspace
{
"arn": "arn:aws:aps:ap-northeast-1:XXXXXXXXXXXX:workspace/ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": {
"statusCode": "CREATING"
},
"tags": {},
"workspaceId": "ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
先程控えたworkspaceIdを指定してWorkspaceの詳細情報を取得します。prometheusEndpointがPrometheusサーバからWorkspaceへ接続する際のURLとなるので、値を控えておきます。
$ aws amp describe-workspace --workspace-id ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
{
"workspace": {
"arn": "arn:aws:aps:ap-northeast-1:XXXXXXXXXXXX:workspace/ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"createdAt": "2022-11-26T17:40:45.120000+09:00",
"prometheusEndpoint": "https://aps-workspaces.ap-northeast-1.amazonaws.com/workspaces/ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/",
"status": {
"statusCode": "ACTIVE"
},
"tags": {},
"workspaceId": "ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
}
AMPのWorkspaceに接続するPrometheusサーバを準備します。今回はAWSが提供するマネージドKubernetesサービスであるAmazon Elastic Kubernetes Service (EKS)にて構築したクラスタ上に、Prometheusサーバとデータ確認用にダッシュボード製品であるGrafanaを構築します。
構築の際にはKubernetesのパッケージマネージャであるHelmを利用します。
PrometheusサーバからAMPのWorkspaceへメトリクスを取り込むため、またGrafanaからAMPのWorkspaceへクエリを実行するために、IAMサービスロールの設定を行います。
AWSの公式サイトにて、サービスロールの設定を一括で行うシェルスクリプトが用意されているので、そちらを利用して設定を行います。
シェルスクリプト内で実施している設定は以下になります。
今回はkube-prometheus-stackというHelmチャートを利用して、Prometheus・GrafanaおよびKubernetesの基本的なメトリクスを取得するexporter(kube-state-metrics/node-exporter)をまとめて構築します。
まず、PrometheusのHelmリポジトリの設定を行います。
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
次に、インストール時に利用する設定ファイルを作成します。設定ファイル作成の際、以下の内容を編集します。
$ cat prometheus_value.yaml
prometheus:
serviceAccount:
name: amp-iamproxy-ingest-service-account
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::XXXXXXXXXXXX:role/amp-iamproxy-ingest-role
prometheusSpec:
remoteWrite:
- url: https://aps-workspaces.ap-northeast-1.amazonaws.com/workspaces/ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/api/v1/remote_write
sigv4:
region: ap-northeast-1
queueConfig:
maxSamplesPerSend: 1000
maxShards: 200
capacity: 2500
grafana:
serviceAccount:
name: amp-iamproxy-query-service-account
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::XXXXXXXXXXXX:role/amp-iamproxy-query-role
grafana.ini:
auth:
sigv4_auth_enabled: true
sidecar:
datasources:
defaultDatasourceEnabled: false
additionalDataSources:
- name: amp-prometheus
type: prometheus
uid: amp-prometheus
url: https://aps-workspaces.ap-northeast-1.amazonaws.com/workspaces/ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/
access: proxy
isDefault: true
jsonData:
sigV4Auth: true
sigV4AuthType: default
sigV4Region: ap-northeast-1
version: 1
作成した設定ファイルを指定して、インストールします。
$ kubectl create namespace prometheus-namespace
$ helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack -n prometheus-namespace -f prometheus_value.yaml
GrafanaにログインしてPrometheusメトリクスを確認します。通常の運用ではGrafanaにパブリックIPを付与してアクセスしますが、今回は検証のためGrafanaに対してport-forwardしてアクセスします。
$ kubectl port-forward -n prometheus-namespace svc/kube-prometheus-stack-grafana 28080:80
kube-prometheus-stackを利用して構築した場合、Grafanaの初期のユーザ名はadmin、パスワードはこちらのファイルに設定されている値になります。
ダッシュボードの一覧から、Kubernetes / Compute Resource / Cluster を選択し、Data source amp-prometheus を選択し、以下の通りメトリクスが取得できていれば成功です。
今回はAmazon Managed Service for Prometheus(AMP)について紹介しました。AMPを利用することで、Prometheusの運用負荷の低減が可能になります。
AMPには今回紹介しなかったセキュリティ関連の機能やアラートマネージャの機能もあります。また、今回はEKSクラスタ上に構築したGrafanaからAMPのメトリクスを参照しましたが、AWSにはGrafanaのマネージド・サービスである、Amazon Managed Grafana(AMG)という製品もあります。これらの機能もあわせて、AMPを利用してみてはいかがでしょうか。
以上、最後までお読みいただきありがとうございました。
それでは、ソフトバンク Advent Calendar 2022 の 7日目にバトンを渡します。舩木さんよろしくお願いします。
ソフトバンクはAWS アドバンストティアサービスパートナーです。「はじめてのAWS導入」から大規模なサービス基盤や基幹システムの構築まで、お客さまのご要望にあわせて最適なAWS環境の導入を支援します。
MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。
クラウドネイティブ・アプリケーションプラットフォーム(CNAP)とは標準化されたアプリケーション実行環境を手軽に利用できるサービスです。リリースプロセスを自動化し、開発者自身がセルフサービスで実行環境を準備できるようになります。
条件に該当するページがございません