GNU/Linux >> Belajar Linux >  >> Cent OS

Cara Memantau Kubernetes Dengan Prometheus

Pendahuluan

Prometheus adalah kerangka instrumentasi sumber terbuka. Prometheus dapat menyerap sejumlah besar data setiap detik, sehingga cocok untuk beban kerja yang kompleks.

Gunakan Prometheus untuk memantau server, VM, database, dan memanfaatkan data tersebut untuk menganalisis kinerja aplikasi dan infrastruktur Anda.

Artikel ini menjelaskan cara menyiapkan pemantauan Prometheus di cluster Kubernetes.

Prasyarat

  • Kluster Kubernetes
  • Sebuah kubectl yang terkonfigurasi sepenuhnya antarmuka baris perintah pada mesin lokal Anda

Memantau Cluster Kubernetes dengan Prometheus

Prometheus adalah sistem berbasis tarikan. Ia mengirimkan permintaan HTTP, yang disebut scrape , berdasarkan konfigurasi yang ditentukan dalam file penerapan . Tanggapan untuk scrape . ini permintaan disimpan dan diuraikan dalam penyimpanan bersama dengan metrik untuk pengikisan itu sendiri.

Penyimpanannya adalah database khusus di server Prometheus dan dapat menangani arus data yang sangat besar. Dimungkinkan untuk memantau ribuan mesin secara bersamaan dengan satu server.

Data perlu diekspos dan diformat dengan tepat sehingga Prometheus dapat mengumpulkannya. Prometheus dapat mengakses data langsung dari pustaka klien aplikasi atau dengan menggunakan eksportir.

Eksportir digunakan untuk data yang tidak dapat Anda kendalikan sepenuhnya (misalnya, metrik kernel). Eksportir adalah perangkat lunak yang ditempatkan di sebelah aplikasi Anda. Tujuannya adalah untuk menerima permintaan HTTP dari Prometheus, memastikan data dalam format yang didukung, dan kemudian memberikan data yang diminta ke server Prometheus.

Semua aplikasi Anda sekarang dilengkapi untuk menyediakan data ke Prometheus. Kami masih perlu memberi tahu Prometheus di mana mencari data itu. Prometheus menemukan target untuk dikikis dengan menggunakan Penemuan Layanan .

Cluster Kubernetes Anda sudah memiliki label dan anotasi serta mekanisme yang sangat baik untuk melacak perubahan dan status elemennya. Oleh karena itu, Prometheus menggunakan Kubernetes API untuk menemukan target.

Penemuan layanan Kubernetes yang dapat Anda ekspos ke Prometheus adalah:

  • simpul
  • titik akhir
  • layanan
  • pod
  • masuk

Prometheus mengambil metrik tingkat mesin secara terpisah dari informasi aplikasi. Satu-satunya cara untuk mengekspos memori, ruang disk, penggunaan CPU, dan metrik bandwidth adalah dengan menggunakan pengekspor simpul . Selain itu, metrik tentang cgroup juga perlu diungkapkan.

Untungnya, eksportir cAdvisor sudah tertanam di level node Kubernetes dan dapat dengan mudah diekspos.

Setelah sistem mengumpulkan data, Anda dapat mengaksesnya dengan menggunakan bahasa kueri PromQL, mengekspornya ke antarmuka grafis seperti Grafana, atau menggunakannya untuk mengirim lansiran dengan Alertmanager.

Instal Prometheus Monitoring di Kubernetes

Pemantauan Prometheus dapat diinstal pada klaster Kubernetes dengan menggunakan sekumpulan file YAML (Yet Another Markup Language). File-file ini berisi konfigurasi, izin, dan layanan yang memungkinkan Prometheus mengakses sumber daya dan menarik informasi dengan menggores elemen cluster Anda.

File YAML mudah dilacak, diedit, dan dapat digunakan kembali tanpa batas. File yang disajikan dalam tutorial ini tersedia dengan mudah dan gratis di repositori online seperti GitHub.

Buat Namespace Pemantauan

Semua resource di Kubernetes dimulai di namespace. Kecuali satu ditentukan, sistem menggunakan namespace default. Untuk memiliki kontrol yang lebih baik atas proses pemantauan cluster, kita akan menentukan namespace pemantauan.

Nama namespace harus berupa label yang kompatibel dengan DNS. Untuk referensi mudah, kita akan memberi nama namespace:monitoring .

Ada dua cara untuk membuat namespace pemantauan untuk mengambil metrik dari Kubernetes API.

Opsi 1:

Masukkan perintah sederhana ini di antarmuka baris perintah Anda dan buat pemantauan namespace di host Anda:

kubectl create namespace monitoring

Opsi 2:

Buat dan terapkan file .yml:

apiVersion: v1
kind: Namespace
metadata:
  name: monitoring

Metode ini nyaman karena Anda dapat menerapkan file yang sama di masa mendatang. Terapkan file ke cluster Anda dengan memasukkan perintah berikut di terminal perintah Anda:

kubectl -f apply namespace monitoring.yml

Terlepas dari metode yang digunakan, buat daftar namespace yang ada dengan menggunakan perintah ini:

kubectl get namespaces

Konfigurasikan File Penerapan Prometheus

Bagian berikut berisi elemen-elemen yang diperlukan untuk berhasil menyiapkan scraping Prometheus pada cluster Kubernetes Anda dan elemen-elemennya.

Bagian dapat diimplementasikan sebagai .yml individual file yang dieksekusi secara berurutan. Setelah Anda membuat setiap file, itu dapat diterapkan dengan memasukkan perintah berikut:

kubectl -f apply [name_of_file].yml

Dalam contoh ini, semua elemen ditempatkan ke dalam satu .yml file dan diterapkan secara bersamaan.

prometheus.yml file dalam contoh kita menginstruksikan kubectl untuk mengirimkan permintaan ke server Kubernetes API. Berkasnya berisi:

  1. Izin yang memungkinkan Prometheus mengakses semua pod dan node.
  2. Prometheus configMap yang menentukan elemen mana yang harus dihapus.
  3. Petunjuk penerapan Prometheus.
  4. Layanan yang memberi Anda akses ke antarmuka pengguna Prometheus.

Peran Klaster, Akun Layanan, dan Pengikatan Peran Klaster

Ruang nama dirancang untuk membatasi izin peran default jika kita ingin mengambil data di seluruh kluster, kita perlu memberi Prometheus akses ke semua sumber daya kluster itu. File .yml Prometheus dasar yang menyediakan akses ke seluruh cluster memiliki elemen berikut:

1. Tentukan Peran Cluster

Kata kerja pada setiap aturan menentukan tindakan yang dapat dilakukan peran tersebut pada apiGroups.

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups:
  - extensions
  resources:
  - ingresses
  verbs: ["get", "list", "watch"]

2. Buat Akun Layanan

Selain itu, kita perlu membuat akun layanan untuk menerapkan peran ini ke:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: monitoring

3. Terapkan ClusterRoleBinding

Terakhir, kita perlu menerapkan ClusterRoleBinding . Tindakan ini akan mengikat Akun Layanan ke Peran Cluster yang dibuat sebelumnya.

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: monitoring

Dengan menambahkan sumber daya ini ke file kami, kami telah memberikan akses ke seluruh cluster Prometheus dari pemantauan ruang nama.

Prometheus ConfigMap

Bagian file ini memberikan instruksi untuk proses pengikisan. Instruksi khusus untuk setiap elemen cluster Kubernetes harus disesuaikan agar sesuai dengan persyaratan pemantauan dan penyiapan cluster Anda.

1. Aturan Gosok Global

apiVersion: v1
data:
  prometheus.yml: |
    global:
      scrape_interval: 10s

2. Mengikis Node

Penemuan layanan ini mengekspos node yang membentuk cluster Kubernetes Anda. Kubelet berjalan di setiap node dan merupakan sumber informasi yang berharga.

2.1 Gosok kubelet

    scrape_configs:
    - job_name: 'kubelet'
      kubernetes_sd_configs:
      - role: node
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true  # Required with Minikube.

2.2 Scrape cAdvisor (informasi tingkat penampung)

kubelet hanya memberikan informasi tentang dirinya sendiri dan bukan wadahnya. Untuk menerima informasi dari tingkat kontainer, kita perlu menggunakan eksportir. cAdvisor sudah disematkan dan hanya membutuhkan metrik_jalur : /metrics/cadvisor bagi Prometheus untuk mengumpulkan data kontainer:

    - job_name: 'cadvisor'
      kubernetes_sd_configs:
      - role: node
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true  # Required with Minikube.
      metrics_path: /metrics/cadvisor

3. Mengikis APIServer

Gunakan peran titik akhir untuk menargetkan setiap instance aplikasi. Bagian file ini memungkinkan Anda untuk mengikis server API di cluster Kubernetes Anda.

    - job_name: 'k8apiserver'
      kubernetes_sd_configs:
      - role: endpoints
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true  # Required if using Minikube.
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
   - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
        action: keep
        regex: default;kubernetes;https

4. Scrape Pods untuk Layanan Kubernetes (tidak termasuk Server API)

Kikis pod yang mendukung semua layanan Kubernetes dan abaikan metrik server API.

- job_name: 'k8services'
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels:
          - __meta_kubernetes_namespace
          - __meta_kubernetes_service_name
        action: drop
        regex: default;kubernetes
      - source_labels:
          - __meta_kubernetes_namespace
        regex: default
        action: keep
      - source_labels: [__meta_kubernetes_service_name]
        target_label: job

5. Peran Pod

Temukan semua port pod dengan metrik nama dengan menggunakan nama container sebagai label tugas.

- job_name: 'k8pods'
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - source_labels: [__meta_kubernetes_pod_container_port_name]
        regex: metrics
        action: keep
      - source_labels: [__meta_kubernetes_pod_container_name]
        target_label: job
kind: ConfigMap
metadata:
  name: prometheus-config

6. Konfigurasikan ReplicaSet

Tentukan jumlah replika yang Anda butuhkan, dan template yang akan diterapkan ke kumpulan pod yang ditentukan.

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: prometheus
spec:
  selector:
    matchLabels:
      app: prometheus
  replicas: 1
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      serviceAccountName: prometheus
      containers:
      - name: prometheus
        image: prom/prometheus:v2.1.0
        ports:
        - containerPort: 9090
          name: default
        volumeMounts:
        - name: config-volume
          mountPath: /etc/prometheus
      volumes:
      - name: config-volume
        configMap:
         name: prometheus-config

7. Tentukan nodePort

Prometheus saat ini berjalan di cluster. Menambahkan bagian berikut ke prometheus.yml our kami file akan memberi kami akses ke data yang dikumpulkan Prometheus.

kind: Service
apiVersion: v1
metadata:
  name: prometheus
spec:
  selector:
    app: prometheus
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 9090
    targetPort: 9090
    nodePort: 30909

Terapkan File prometheus.yml

Peta konfigurasi yang ditentukan dalam file memberikan data konfigurasi ke setiap pod pada penerapan:

kubectl apply -f prometheus.yml

Gunakan URL node individual dan nodePort yang ditentukan di prometheus.yml file untuk mengakses Prometheus dari browser Anda. Misalnya:

http://192.153.99.106:30909

Dengan memasukkan URL atau IP node Anda, dan dengan menentukan port dari file yml, Anda telah berhasil mendapatkan akses ke Prometheus Monitoring.

Bagaimana cara Memantau metrik status-kube? (Opsional)

Anda sekarang dapat memantau infrastruktur Kubernetes Anda sepenuhnya, serta instance aplikasi Anda. Namun, ini tidak termasuk metrik pada informasi yang dimiliki Kubernetes tentang resource di cluster Anda.

Metrik status-kube adalah eksportir yang memungkinkan Prometheus untuk mengikis informasi itu juga. Buat file YAML untuk eksportir kube-state-metrics:

---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: kube-state-metrics
spec:
  selector:
    matchLabels:
      app: kube-state-metrics
  replicas: 1
  template:
    metadata:
      labels:
        app: kube-state-metrics
    spec:
      serviceAccountName: prometheus
      containers:
      - name: kube-state-metrics
        image: quay.io/coreos/kube-state-metrics:v1.2.0
        ports:
        - containerPort: 8080
          name: monitoring
---
kind: Service
apiVersion: v1
metadata:
  name: kube-state-metrics
spec:
  selector:
    app: kube-state-metrics
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080

Terapkan file dengan memasukkan perintah berikut:

kubectl apply -f kube-state-metrics.yml

Setelah Anda menerapkan file, akses Prometheus dengan memasukkan IP/URL node dan nodePort yang ditentukan seperti yang ditentukan sebelumnya.


Cent OS
  1. Cara menggunakan Ansible untuk mengatur pemantauan sistem dengan Prometheus

  2. Cara Menginstal Kubernetes dengan Minikube di Ubuntu 20.04

  3. Cara Memantau Sistem dengan Sysstat di Centos

  1. Bagaimana Cara Membuat Daftar Monitor yang Terhubung Dengan Xrandr?

  2. Cara memantau penggunaan sumber daya server Anda dengan Munin di CentOS 6

  3. Cara Memantau Keamanan Server Linux dengan Osquery

  1. Cara Mengatur Cluster Kubernetes dengan Rancher

  2. Cara Menyebarkan RabbitMQ di Kubernetes

  3. Cara Menginstal Kubernetes(k8s) dengan Minikube di CentOS 8