Halaman ini menunjukkan cara mengonfigurasi cluster pengguna untuk GKE di VMware sehingga log dan metrik kustom dari aplikasi pengguna dikirim ke Cloud Logging dan Cloud Monitoring.
Anda juga dapat menggunakan Google Cloud Managed Service for Prometheus untuk memantau beban kerja. Ini adalah layanan penyimpanan dan kueri yang terkelola sepenuhnya dari Google Cloud untuk metrik Prometheus. Untuk menggunakan fitur ini, aktifkan Managed Service for Prometheus dan Cloud Logging dengan mengikuti langkah-langkah di bawah.
Mengaktifkan Layanan Terkelola untuk Prometheus bagi aplikasi pengguna
Konfigurasi Managed Service for Prometheus disimpan dalam objek Stackdriver bernama stackdriver
.
Buka objek
stackdriver
untuk diedit:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Ganti USER_CLUSTER_KUBECONFIG dengan jalur file cluster kubeconfig pengguna Anda.
Di bagian
spec
, tetapkanenableGMPForApplications
ketrue
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableGMPForApplications: true enableVPC: ... optimizedMetrics: true
Tutup file yang diedit. Tindakan ini akan mulai menjalankan komponen Prometheus (GMP) yang dikelola Google di cluster.
Untuk memeriksa komponen, jalankan perintah berikut:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace gmp-system get pods
Output perintah ini akan mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE collector-abcde 2/2 Running 1 (5d18h ago) 5d18h collector-fghij 2/2 Running 1 (5d18h ago) 5d18h collector-klmno 2/2 Running 1 (5d18h ago) 5d18h gmp-operator-68d49656fc-abcde 1/1 Running 0 5d18h rule-evaluator-7c686485fc-fghij 2/2 Running 1 (5d18h ago) 5d18h
Google Cloud Managed Service for Prometheus mendukung pemberitahuan dan evaluasi aturan. Untuk menyiapkan evaluasi aturan, lihat Evaluasi aturan.
Menjalankan aplikasi contoh
Di bagian ini, Anda akan membuat aplikasi yang memunculkan metrik Prometheus, dan menggunakan Prometheus yang dikelola Google untuk mengumpulkan metrik. Untuk mengetahui informasi selengkapnya, lihat Google Cloud Managed Service for Prometheus.
Men-deploy aplikasi contoh
Buat namespace
gmp-test
untuk resource yang Anda buat sebagai bagian dari aplikasi contoh:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG create ns gmp-test
Layanan terkelola menyediakan manifes untuk aplikasi contoh yang memunculkan metrik Prometheus pada port
metrics
-nya. Aplikasi ini menggunakan tiga replika.Untuk men-deploy contoh aplikasi, jalankan perintah berikut:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
Mengonfigurasi resource PodMonitoring
Untuk menyerap data metrik yang dikeluarkan oleh aplikasi contoh, Anda menggunakan scraping target. Layanan terkelola menggunakan resource kustom (CR) PodMonitoring untuk mengonfigurasi scraping target dan penyerapan metrik. Anda dapat mengonversi resource operator prometheus yang sudah ada ke CR PodMonitoring.
CR PodMonitoring melakukan scraping hanya ke target dalam namespace tempat CR di-deploy. Untuk melakukan scraping target di beberapa namespace, deploy CR PodMonitoring yang sama di setiap namespace. Anda dapat memastikan bahwa resource PodMonitoring terinstal di namespace yang diinginkan dengan menjalankan perintah berikut:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get podmonitoring -A
Untuk dokumentasi referensi tentang semua CR Managed Service for Prometheus, lihat referensi prometheus-engine/doc/api.
Manifes berikut menentukan resource PodMonitoring, prom-example
, dalam
namespace gmp-test
. Resource ini menemukan semua Pod di namespace yang memiliki label
app
dengan nilai prom-example
. Pod yang cocok akan disalin pada port bernama metrics
, setiap 30 detik, di jalur HTTP /metrics
.
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: prom-example spec: selector: matchLabels: app: prom-example endpoints: - port: metrics interval: 30s
Untuk menerapkan resource ini, jalankan perintah berikut:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/pod-monitoring.yaml
Managed Service for Prometheus kini melakukan scraping Pod yang cocok.
Data metrik kueri
Cara termudah untuk memastikan bahwa data Prometheus Anda diekspor adalah dengan menggunakan kueri PromQL di Metrics Explorer di konsol Google Cloud.
Untuk menjalankan kueri PromQL, lakukan hal berikut:
Di konsol Google Cloud, buka halaman Monitoring atau klik tombol berikut:
Di panel navigasi, pilih Metrics Explorer.
Gunakan Bahasa Kueri Prometheus (PromQL) untuk menentukan data yang akan ditampilkan di diagram:
Di toolbar panel Select a metric, pilih Code Editor.
Pilih PromQL di tombol Bahasa. Tombol bahasa berada di bagian bawah panel Code Editor.
Masukkan kueri Anda ke dalam editor kueri. Misalnya, untuk membuat diagram jumlah detik rata-rata yang dihabiskan CPU dalam setiap mode selama satu jam terakhir, gunakan kueri berikut:
avg(rate(kubernetes_io:anthos_container_cpu_usage_seconds_total {monitored_resource="k8s_node"}[1h]))
Untuk mengetahui informasi selengkapnya tentang penggunaan PromQL, baca artikel PromQL di Cloud Monitoring.
Screenshot berikut menunjukkan diagram yang menampilkan metrik anthos_container_cpu_usage_seconds_total
:
Jika mengumpulkan banyak data, Anda dapat memfilter metrik yang diekspor untuk menekan biaya.
Mengaktifkan Cloud Logging untuk aplikasi pengguna
Konfigurasi untuk Logging disimpan di objek Stackdriver bernama stackdriver.
Buka objek
stackdriver
untuk diedit:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Ganti USER_CLUSTER_KUBECONFIG dengan jalur file cluster kubeconfig pengguna Anda.
Di bagian
spec
, tetapkanenableCloudLoggingForApplications
ketrue
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableCloudLoggingForApplications: true enableVPC: ... optimizedMetrics: true
Tutup file yang diedit.
Menjalankan aplikasi contoh
Di bagian ini, Anda akan membuat aplikasi yang menulis log kustom.
Simpan manifes Deployment berikut ke file bernama
my-app.yaml
.apiVersion: apps/v1 kind: Deployment metadata: name: "monitoring-example" namespace: "default" labels: app: "monitoring-example" spec: replicas: 1 selector: matchLabels: app: "monitoring-example" template: metadata: labels: app: "monitoring-example" spec: containers: - image: gcr.io/google-samples/prometheus-dummy-exporter:latest name: prometheus-example-exporter imagePullPolicy: Always command: - /bin/sh - -c - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090 resources: requests: cpu: 100m
Membuat Deployment:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Melihat log aplikasi
Konsol
Buka Logs explorer di Google Cloud Console.
Klik Resource. Pada ALL_RESOURCE_TYPES, pilih
Kubernetes Container
.Pada CLUSTER_NAME, pilih nama cluster pengguna Anda.
Pada NAMESPACE_NAME, pilih
default
.Klik Add, lalu klik Run Query.
Di bagian Query results, Anda dapat melihat entri log dari Deployment
monitoring-example
. Contoh:{ "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n", "insertId": "1oa4vhg3qfxidt", "resource": { "type": "k8s_container", "labels": { "pod_name": "monitoring-example-7685d96496-xqfsf", "cluster_name": ..., "namespace_name": "default", "project_id": ..., "location": "us-west1", "container_name": "prometheus-example-exporter" } }, "timestamp": "2020-11-14T01:24:24.358600252Z", "labels": { "k8s-pod/pod-template-hash": "7685d96496", "k8s-pod/app": "monitoring-example" }, "logName": "projects/.../logs/stdout", "receiveTimestamp": "2020-11-14T01:24:39.562864735Z" }
gcloud
Jalankan perintah ini:
gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \ resource.type="k8s_container" AND resource.labels.namespace_name="default"'
Ganti PROJECT_ID dengan ID project pemantauan logging Anda.
Dalam output, Anda dapat melihat entri log dari Deployment
monitoring-example
. Contoh:insertId: 1oa4vhg3qfxidt labels: k8s-pod/app: monitoring-example k8s- pod/pod-template-hash: 7685d96496 logName: projects/.../logs/stdout receiveTimestamp: '2020-11-14T01:24:39.562864735Z' resource: labels: cluster_name: ... container_name: prometheus-example-exporter location: us-west1 namespace_name: default pod_name: monitoring-example-7685d96496-xqfsf project_id: ... type: k8s_container textPayload: | 2020/11/14 01:24:24 Starting to listen on :9090 timestamp: '2020-11-14T01:24:24.358600252Z'
Filter log aplikasi
Pemfilteran log aplikasi dapat mengurangi penagihan logging aplikasi dan traffic jaringan dari cluster ke Cloud Logging. Mulai
GKE di VMware rilis 1.15.0, jika enableCloudLoggingForApplications
ditetapkan ke true
, Anda dapat memfilter log aplikasi berdasarkan kriteria berikut:
- Label pod (
podLabelSelectors
) - Namespace (
namespaces
) - Ekspresi reguler untuk konten log (
contentRegexes
)
GKE di VMware hanya mengirimkan hasil filter ke Cloud Logging.
Menentukan filter log aplikasi
Konfigurasi untuk Logging ditentukan dalam objek Stackdriver bernama stackdriver
.
Buka objek
stackdriver
untuk diedit:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ edit stackdriver stackdriver
Ganti USER_CLUSTER_KUBECONFIG dengan jalur ke file kubeconfig cluster pengguna Anda.
Tambahkan bagian
appLogFilter
kespec
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: enableCloudLoggingForApplications: true projectID: ... clusterName: ... clusterLocation: ... appLogFilter: keepLogRules: - namespaces: - prod ruleName: include-prod-logs dropLogRules: - podLabelSelectors: - disableGCPLogging=yes ruleName: drop-logs
Simpan dan tutup file yang diedit.
(Opsional) Jika Anda menggunakan
podLabelSelectors
, mulai ulang DaemonSetstackdriver-log-forwarder
untuk menerapkan perubahan sesegera mungkin:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ rollout restart daemonset stackdriver-log-forwarder
Biasanya,
podLabelSelectors
akan berlaku setelah 10 menit. Memulai ulangstackdriver-log-forwarder
DaemonSet akan membuat perubahan berlaku lebih cepat.
Contoh: Sertakan log ERROR
atau WARN
hanya di namespace prod
Contoh berikut mengilustrasikan cara kerja filter log aplikasi. Anda menentukan filter yang menggunakan namespace (prod
), ekspresi reguler (.*(ERROR|WARN).*
), dan label Pod (disableGCPLogging=yes
). Kemudian, untuk memastikan filter berfungsi, jalankan Pod di namespace prod
untuk menguji kondisi filter ini.
Untuk menentukan dan menguji filter log aplikasi:
Tentukan filter log aplikasi pada objek Stackdriver:
Pada contoh
appLogFilter
berikut, hanya logERROR
atauWARN
dalam namespaceprod
yang disimpan. Setiap log untuk Pod dengan labeldisableGCPLogging=yes
akan dihapus:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: ... appLogFilter: keepLogRules: - namespaces: - prod contentRegexes: - ".*(ERROR|WARN).*" ruleName: include-prod-logs dropLogRules: - podLabelSelectors: - disableGCPLogging=yes # kubectl label pods pod disableGCPLogging=yes ruleName: drop-logs ...
Deploy Pod di namespace
prod
dan jalankan skrip yang menghasilkan entri logERROR
danINFO
:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG run pod1 \ --image gcr.io/cloud-marketplace-containers/google/debian10:latest \ --namespace prod --restart Never --command -- \ /bin/sh -c "while true; do echo 'ERROR is 404\\nINFO is not 404' && sleep 1; done"
Log yang difilter hanya boleh berisi entri
ERROR
, bukan entriINFO
.Tambahkan label
disableGCPLogging=yes
ke Pod:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG label pods pod1 \ --namespace prod disableGCPLogging=yes
Log yang difilter tidak lagi berisi entri untuk Pod
pod1
.
Definisi API filter log aplikasi
Definisi untuk filter log aplikasi dideklarasikan dalam definisi resource kustom stackdriver.
Untuk mendapatkan definisi resource kustom stackdriver, jalankan perintah berikut:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get crd stackdrivers.addons.gke.io \
--namespace kube-system -o yaml
Mengaktifkan Logging dan Pemantauan untuk aplikasi pengguna (Lama)
Perhatikan bahwa sangat direkomendasikan untuk menggunakan enableGMPForApplications
dan enableCloudLoggingForApplications
di atas guna mengaktifkan pemantauan dan logging untuk aplikasi pengguna.
Langkah-langkah berikut masih dapat dilakukan, tetapi tidak direkomendasikan. Harap baca masalah umum ini sebelum menggunakan langkah-langkah berikut.
Bagian ini menjelaskan cara mengaktifkan Logging dan Monitoring jika Anda tidak menggunakan Managed Service for Prometheus.
Konfigurasi untuk Logging dan Monitoring disimpan dalam objek Stackdriver bernama stackdriver
.
Buka objek
stackdriver
untuk diedit:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Ganti USER_CLUSTER_KUBECONFIG dengan jalur file cluster kubeconfig pengguna Anda.
Di bagian
spec
, tetapkanenableStackdriverForApplications
ketrue
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableStackdriverForApplications: true enableVPC: ... optimizedMetrics: true
Tutup file yang diedit.
Menganotasi beban kerja
Untuk mengaktifkan pengumpulan metrik kustom dari aplikasi, tambahkan anotasi prometheus.io/scrape: "true"
ke manifes Layanan atau Pod aplikasi, atau tambahkan anotasi yang sama ke bagian spec.template
dalam manifes Deployment atau DaemonSet agar dapat diteruskan ke Pod-nya.
Untuk menghindari pembersihan sampah memori metrik, sebaiknya tetapkan interval scrape metrik ke satu menit.
Menjalankan aplikasi contoh
Di bagian ini, Anda akan membuat aplikasi yang menulis log kustom dan menampilkan metrik kustom.
Simpan manifes Layanan dan Deployment berikut ke file bernama
my-app.yaml
. Perhatikan bahwa Layanan memiliki anotasiprometheus.io/scrape: "true"
:kind: Service apiVersion: v1 metadata: name: "monitoring-example" namespace: "default" annotations: prometheus.io/scrape: "true" spec: selector: app: "monitoring-example" ports: - name: http port: 9090 --- apiVersion: apps/v1 kind: Deployment metadata: name: "monitoring-example" namespace: "default" labels: app: "monitoring-example" spec: replicas: 1 selector: matchLabels: app: "monitoring-example" template: metadata: labels: app: "monitoring-example" spec: containers: - image: gcr.io/google-samples/prometheus-dummy-exporter:latest name: prometheus-example-exporter imagePullPolicy: Always command: - /bin/sh - -c - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090 resources: requests: cpu: 100m
Buat Deployment dan Layanan:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Melihat log aplikasi
Konsol
Buka Logs explorer di Google Cloud Console.
Klik Resource. Pada ALL_RESOURCE_TYPES, pilih
Kubernetes Container
.Pada CLUSTER_NAME, pilih nama cluster pengguna Anda.
Pada NAMESPACE_NAME, pilih
default
.Klik Add, lalu klik Run Query.
Di bagian Query results, Anda dapat melihat entri log dari Deployment
monitoring-example
. Contoh:{ "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n", "insertId": "1oa4vhg3qfxidt", "resource": { "type": "k8s_container", "labels": { "pod_name": "monitoring-example-7685d96496-xqfsf", "cluster_name": ..., "namespace_name": "default", "project_id": ..., "location": "us-west1", "container_name": "prometheus-example-exporter" } }, "timestamp": "2020-11-14T01:24:24.358600252Z", "labels": { "k8s-pod/pod-template-hash": "7685d96496", "k8s-pod/app": "monitoring-example" }, "logName": "projects/.../logs/stdout", "receiveTimestamp": "2020-11-14T01:24:39.562864735Z" }
gcloud
Jalankan perintah ini:
gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \ resource.type="k8s_container" AND resource.labels.namespace_name="default"'
Ganti PROJECT_ID dengan ID project pemantauan logging Anda.
Dalam output, Anda dapat melihat entri log dari Deployment
monitoring-example
. Contoh:insertId: 1oa4vhg3qfxidt labels: k8s-pod/app: monitoring-example k8s- pod/pod-template-hash: 7685d96496 logName: projects/.../logs/stdout receiveTimestamp: '2020-11-14T01:24:39.562864735Z' resource: labels: cluster_name: ... container_name: prometheus-example-exporter location: us-west1 namespace_name: default pod_name: monitoring-example-7685d96496-xqfsf project_id: ... type: k8s_container textPayload: | 2020/11/14 01:24:24 Starting to listen on :9090 timestamp: '2020-11-14T01:24:24.358600252Z'
Melihat metrik aplikasi di konsol Google Cloud
Aplikasi contoh Anda mengekspos metrik kustom bernama example_monitoring_up
.
Anda dapat melihat nilai metrik tersebut di Konsol Google Cloud.
Buka Metrics Explorer di Konsol Google Cloud.
Untuk Resource type, pilih
Kubernetes Pod
atauKubernetes Container
.Untuk metric, pilih
external.googleapis.com/prometheus/example_monitoring_up
.Pada diagram, Anda dapat melihat bahwa
example_monitoring_up
memiliki nilai berulang 1.