すべてのプロダクト
Search
ドキュメントセンター

Managed Service for Prometheus:ServiceMonitor を使用してサービスを検出および監視する

最終更新日:Dec 27, 2024

Managed Service for Prometheus では、カスタムリソース定義 (CRD) に基づいて ServiceMonitor を作成し、検出および監視する必要のあるサービスを指定できます。ServiceMonitor を作成するときは、検出する Pod の名前空間を定義し、matchLabel パラメーターを設定して、監視するサービスを指定できます。このトピックでは、Spring Boot フレームワークに基づいて ServiceMonitor を作成し、サービスを検出および監視する方法について説明します。

デモ

デモをダウンロードして、ServiceMonitor の機能を試すことができます。

手順 1: 依存関係を追加する

  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>
  2. プロジェクトの src/resources/applications.properties ファイルに次の構成を追加します。

    management.endpoints.web.exposure.include=prometheus
  3. プロジェクトを開始し、ブラウザーを使用して http://{host}:{port}/actuator/prometheus にアクセスします。

    次の図に示すように、Java 仮想マシン (JVM) の監視に関する情報が返されます。ServiceMonitor返回示例

手順 2: Kubernetes クラスターをデプロイする

  1. イメージをビルドし、イメージの Dockerfile をイメージリポジトリにアップロードします。詳細については、ソースコードホスティングプラットフォームをバインドする を参照してください。

  2. 次のサンプルコードに基づいて 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
  3. 次のサンプルコードに基づいて 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 を作成する

  1. Managed Service for Prometheus コンソール にログインします。

  2. 左側のナビゲーションペインで、インスタンス をクリックします。

  3. Prometheus インスタンス の名前をクリックします。

  4. 左側のナビゲーションペインで、サービスディスカバリー をクリックし、構成 タブをクリックします。

  5. 構成 タブで、ServiceMonitor タブをクリックし、Servicemonitor の追加 をクリックします。

  6. Servicemonitor の追加 ダイアログボックスで、YAML コンテンツを入力し、OK をクリックします。

CLI を使用して ServiceMonitor を作成する

  1. YAML ファイルをコンピューターに保存します。

  2. 次のコマンドを実行して、YAML ファイルを適用します。

    kubectl apply -f {YAML ファイルのパス}

手順 4: ServiceMonitor を検証する

次の操作を実行して、Managed Service for Prometheus がサービスを検出できるかどうかを確認します。

  1. Managed Service for Prometheus コンソール にログインします。

  2. 左側のナビゲーションペインで、インスタンス をクリックします。

  3. Prometheus インスタンス の名前をクリックします。

  4. 左側のナビゲーションペインで、サービスディスカバリー をクリックします。次に、ターゲット タブをクリックします。

    ターゲット タブで、名前が {namespace}/{serviceMonitorName}/x 形式のサービスが存在するかどうかを確認します。ServiceMonitor在Target页签显示

  5. サービス名 の左側にある [表示] アイコンをクリックします。次に、サービス名の下にある表の [エンドポイント] 列のリンクをクリックします。

    メトリックが想定どおりに収集されているかどうかを確認します。ServiceMonitor的Target的endpoint