Managed Service for Prometheus では、カスタムリソース定義 (CRD) に基づいて ServiceMonitor を作成し、検出および監視する必要のあるサービスを指定できます。ServiceMonitor を作成するときは、検出する Pod の名前空間を定義し、matchLabel
パラメーターを設定して、監視するサービスを指定できます。このトピックでは、Spring Boot フレームワークに基づいて ServiceMonitor を作成し、サービスを検出および監視する方法について説明します。
デモ
デモをダウンロードして、ServiceMonitor の機能を試すことができます。
手順 1: 依存関係を追加する
Maven プロジェクトを作成し、pom.xml ファイルに次の依存関係を追加します。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
プロジェクトの src/resources/applications.properties ファイルに次の構成を追加します。
management.endpoints.web.exposure.include=prometheus
プロジェクトを開始し、ブラウザーを使用して
http://{host}:{port}/actuator/prometheus
にアクセスします。次の図に示すように、Java 仮想マシン (JVM) の監視に関する情報が返されます。
手順 2: Kubernetes クラスターをデプロイする
イメージをビルドし、イメージの Dockerfile をイメージリポジトリにアップロードします。詳細については、ソースコードホスティングプラットフォームをバインドする を参照してください。
次のサンプルコードに基づいて Deployment を作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: micrometer-prometheus namespace: default labels: app: demo-prometheus spec: replicas: 3 selector: matchLabels: app: demo-prometheus template: metadata: labels: app: demo-prometheus spec: containers: - name: micrometer-prometheus image: manjusakalza/micrometer-prometheus:latest ports: - containerPort: 8080
次のサンプルコードに基づいて Service を作成します。
apiVersion: v1 kind: Service metadata: name: prometheus-metrics-demo namespace: default labels: micrometer-prometheus-discovery: 'true' spec: selector: app: demo-prometheus ports: - protocol: TCP port: 8080 targetPort: 8080 name: metrics
手順 3: ServiceMonitor を作成する
ServiceMonitor を作成するには、次のサンプル YAML ファイルを使用します。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: micrometer-demo
namespace: default
spec:
endpoints:
- interval: 15s
path: /actuator/prometheus
port: metrics #ポート番号ではなくポート名を指定します。
namespaceSelector:
any: true
selector:
matchLabels:
micrometer-prometheus-discovery: 'true'
サンプル YAML ファイルには、次のパラメーターが含まれています。
name
パラメーターとnamespace
パラメーター (metadata
内) は、ServiceMonitor に必要な主要なメタデータを指定します。endpoints
パラメーター (spec
内) は、Managed Service for Prometheus がメトリックを収集するために使用するエンドポイントを指定します。endpoints
パラメーターの値は配列です。配列の各要素はエンドポイントです。複数のendpoints
を指定できます。各endpoint
には、次のパラメーターが含まれています。interval
: Managed Service for Prometheus が現在のendpoint
を使用してメトリックを収集する間隔。単位: 秒。この例では、Managed Service for Prometheus は 15 秒 (15s
) ごとにメトリックを収集します。path
: Managed Service for Prometheus によって収集されたメトリックデータが格納されるパス。この例では、パスは/actuator/prometheus
に設定されています。port
: メトリックの収集に使用されるポート。このパラメーターは、手順 2 で作成した Service に指定したname
パラメーターの値に設定します。この例では、ポートは 手順 2metrics
に設定されています。重要ポート番号ではなくポート名を指定してください。
namespaceSelector
パラメーター (spec
内) は、検出するサービスの名前空間を指定します。namespaceSelector
セクションには、次の 2 つの相互に排他的なパラメーターが含まれています。any
: このパラメーターの値はtrue
に固定されています。このパラメーターを指定すると、セレクターセクションで指定されたフィルター条件を満たすすべてのサービスが監視されます。matchNames
: 監視するサービスのnamespaces
を指定する配列。たとえば、default 名前空間と arms-prom 名前空間のサービスのみを監視する場合は、次のmatchNames
設定を使用します。namespaceSelector: matchNames: - default - arms-prom
selector
セクション (spec
内) は、サービスをフィルタリングするために使用される条件を指定します。この例では、作成した Service のラベルは micrometer-prometheus-discovery: 'true' です。したがって、次の
selector
設定が使用されます。selector: matchLabels: micrometer-prometheus-discovery: 'true'
Managed Service for Prometheus では、次の 2 つの方法で ServiceMonitor を作成できます。
コンソールを使用して ServiceMonitor を作成する
Managed Service for Prometheus コンソール にログインします。
左側のナビゲーションペインで、インスタンス をクリックします。
Prometheus インスタンス の名前をクリックします。
左側のナビゲーションペインで、サービスディスカバリー をクリックし、構成 タブをクリックします。
構成 タブで、ServiceMonitor タブをクリックし、Servicemonitor の追加 をクリックします。
Servicemonitor の追加 ダイアログボックスで、YAML コンテンツを入力し、OK をクリックします。
CLI を使用して ServiceMonitor を作成する
YAML ファイルをコンピューターに保存します。
次のコマンドを実行して、YAML ファイルを適用します。
kubectl apply -f {YAML ファイルのパス}
手順 4: ServiceMonitor を検証する
次の操作を実行して、Managed Service for Prometheus がサービスを検出できるかどうかを確認します。
Managed Service for Prometheus コンソール にログインします。
左側のナビゲーションペインで、インスタンス をクリックします。
Prometheus インスタンス の名前をクリックします。
左側のナビゲーションペインで、サービスディスカバリー をクリックします。次に、ターゲット タブをクリックします。
ターゲット タブで、名前が {namespace}/{serviceMonitorName}/x 形式のサービスが存在するかどうかを確認します。
サービス名 の左側にある [表示] アイコンをクリックします。次に、サービス名の下にある表の [エンドポイント] 列のリンクをクリックします。
メトリックが想定どおりに収集されているかどうかを確認します。