全部产品
Search
文档中心

Managed Service for Prometheus:Buat penemuan layanan menggunakan ServiceMonitor

更新时间:Dec 09, 2025

Managed Service for Prometheus mendukung penemuan layanan melalui Custom Resource Definition (CRD) ServiceMonitor. Anda dapat menggunakan ServiceMonitor untuk menentukan namespace tempat Pod ditemukan dan memilih Services yang akan dipantau dengan matchLabel. Topik ini menjelaskan cara membuat konfigurasi penemuan layanan menggunakan ServiceMonitor untuk aplikasi berbasis framework Spring Boot.

Demo

Unduh proyek demo untuk contoh lengkap pembuatan konfigurasi penemuan layanan menggunakan ServiceMonitor.

Langkah 1: Tambahkan dependensi

  1. Buat aplikasi Maven dan tambahkan dependensi berikut ke file 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. Tambahkan konfigurasi berikut ke file src/resources/application.properties dalam proyek.

    management.endpoints.web.exposure.include=prometheus
  3. Jalankan proyek dan akses http://{host}:{port}/actuator/prometheus di browser.

    Data pemantauan untuk Java Virtual Machine (JVM) yang sesuai akan ditampilkan. Gambar berikut menunjukkan contohnya.ServiceMonitor返回示例

Langkah 2: Terapkan kluster Kubernetes

  1. Bangun citra dan unggah ke repositori image. Untuk informasi selengkapnya, lihat Bind a source code hosting platform.

  2. Buat deployment menggunakan konfigurasi YAML berikut.

    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. Buat Service menggunakan konfigurasi YAML berikut.

    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

Langkah 3: Buat ServiceMonitor

  1. Simpan file YAML ke komputer Anda dan jalankan kubectl apply -f {path/to/the/YAML/file} untuk menerapkan file tersebut.

Berikut adalah contoh file YAML untuk ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: micrometer-demo
  namespace: default
spec:
  endpoints:
    - interval: 15s
      path: /actuator/prometheus
      port: metrics    # Catatan: Konfigurasikan nama port, bukan nomor port.
  namespaceSelector:
    any: true
  selector:
    matchLabels:
      micrometer-prometheus-discovery: 'true'

Bidang-bidang dalam file YAML ini dijelaskan sebagai berikut:

  • Bidang metadata name dan namespace menentukan metadata utama untuk ServiceMonitor.

  • Bidang spec endpoints menentukan titik akhir server tempat Prometheus mengambil metrik. endpoints merupakan array yang memungkinkan Anda menentukan beberapa endpoints. Setiap endpoint berisi tiga bidang berikut:

    • interval: Menentukan interval pengambilan metrik oleh Prometheus dari endpoint saat ini. Satuannya adalah detik. Dalam contoh ini, nilainya diatur menjadi 15s.

    • path: Menentukan path pengambilan untuk Prometheus. Dalam contoh ini, nilainya diatur menjadi /actuator/prometheus.

    • port: Nama port layanan tempat metrik dikumpulkan. Atur parameter ini ke nilai parameter name yang ditentukan untuk Service yang Anda buat di Langkah 2. Dalam contoh ini, parameter ini diatur menjadi metrics.

      Penting

      Konfigurasikan nama port, bukan nomor port.

  • Bidang spec namespaceSelector menentukan cakupan penemuan Service. namespaceSelector berisi dua bidang yang saling eksklusif, yaitu:

    • any: Hanya memiliki satu nilai, true. Jika bidang ini diatur ke `true`, sistem akan memantau semua Services yang sesuai dengan kondisi filter selector di semua namespace.

    • matchNames: Array yang menentukan namespaces yang akan dipantau. Misalnya, untuk hanya memantau Services di namespace default dan arms-prom, atur matchNames sebagai berikut:

      namespaceSelector:
        matchNames:
        - default
        - arms-prom
  • Bidang spec selector digunakan untuk memilih Services.

    Service yang digunakan dalam contoh ini memiliki label micrometer-prometheus-discovery: 'true'. Oleh karena itu, atur selector sebagai berikut:

    selector:
      matchLabels:
        micrometer-prometheus-discovery: 'true'

Untuk menggunakan fitur basic auth, lihat contoh file YAML berikut.

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: cloud-open-api-monitor     #  Tetapkan nama unik untuk ServiceMonitor.
  namespace: default   #  Tetapkan namespace tempat ServiceMonitor berada.
spec:
  endpoints:
  - interval: 30s
    # Tentukan interval pengambilan metrik oleh Prometheus dari endpoint saat ini.
    port: tcp-8080
    # Masukkan path yang diekspos dalam kode Prometheus exporter.
    path: /api/actuator/prometheus
    basicAuth:
      password:
        name: basic-auth
        key: <password>
      username:
        name: basic-auth
        key: <userName>
    scheme: http
  namespaceSelector:
    any: true
  selector:
    matchLabels:
      # Cocokkan Services dengan label berikut.
      edas.oam.acname: cloud-open-api

Jika Anda tidak memiliki izin yang diperlukan untuk menggunakan fitur basic auth, tambahkan ClusterRole dengan izin yang diperlukan ke kluster. Kemudian, bind ClusterRole tersebut ke ServiceAccount bernama arms-prom-operator di namespace arms-prom menggunakan ClusterRoleBinding. Hal ini memberikan izin yang diperlukan kepada Prometheus Agent.

  • File YAML ClusterRole

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: prometheus-agent-role
      labels:
        app: prometheus-agent
    rules:
      - apiGroups: [""]
        resources: ["pods", "services", "endpoints", "nodes"]
        verbs: ["get", "list", "watch"]  # Sesuaikan jika diperlukan.
      - apiGroups: ["monitoring.coreos.com"]  # Sesuaikan apiGroups jika diperlukan.
        resources: ["*"]
        verbs: ["get", "list", "watch", "create", "update", "delete"]  # Sesuaikan jika diperlukan.
    
  • File YAML ClusterRoleBinding

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: prometheus-agent-binding
    subjects:
      - kind: ServiceAccount
        name: arms-prom-operator  # Nama akun layanan
        namespace: arms-prom      # Namespace tempat akun layanan berada.
    roleRef:
      kind: ClusterRole
      name: prometheus-agent-role  # Nama ClusterRole yang didefinisikan di atas.
      apiGroup: rbac.authorization.k8s.io
    

Langkah 4: Verifikasi ServiceMonitor

Lakukan langkah-langkah berikut untuk memverifikasi bahwa Prometheus berhasil menemukan layanan tersebut.

  1. Masuk ke Konsol Managed Service for Prometheus. Di panel navigasi sebelah kiri, klik Integration Management.

  2. Pada tab Integrated Environments, klik nama lingkungan kontainer target dalam daftar Container Service.

  3. Klik tab Self-Monitoring.

    Pada tab Targets, periksa apakah terdapat target bernama {namespace}/{serviceMonitorName}/x.ServiceMonitor在Target页签显示

  4. Klik baris target {namespace}/{serviceMonitorName}/x untuk memperluasnya, lalu klik tautan endpoint.

    Verifikasi bahwa metrik ditampilkan dengan benar.ServiceMonitor的Target的endpoint