Halaman ini menunjukkan cara mengonfigurasi cluster untuk Google Distributed Cloud agar log dan metrik kustom dari aplikasi pengguna dikirim ke Cloud Logging dan Cloud Monitoring dan Google Cloud Managed Service for Prometheus.
Untuk pengalaman logging dan pemantauan aplikasi pengguna terbaik, kami sangat sebaiknya gunakan konfigurasi berikut:
Aktifkan Google Cloud Managed Service for Prometheus dengan menyetel
enableGMPForApplications
ketrue
dalam objekStackdriver
. Ini memungkinkan Anda memantau dan memberikan pemberitahuan terkait beban kerja secara global, menggunakan Prometheus. Untuk petunjuk dan informasi tambahan, lihat Mengaktifkan Google Cloud Managed Service for Prometheus pada halaman ini.Aktifkan Cloud Logging untuk aplikasi pengguna dengan menyetel
enableCloudLoggingForApplications
ketrue
dalam objekStackdriver
. Konfigurasi ini menyediakan logging untuk workload Anda. Untuk petunjuk dan informasi tambahan, lihat Mengaktifkan Cloud Logging untuk aplikasi pengguna pada halaman ini.
Mengaktifkan Google Cloud Managed Service for Prometheus
Konfigurasi untuk Google Cloud Managed Service for Prometheus ditentukan dalam
Objek Stackdriver
bernama stackdriver
. Untuk informasi tambahan, termasuk
praktik terbaik dan pemecahan masalah, lihat
Dokumentasi Google Cloud Managed Service for Prometheus.
Untuk mengonfigurasi objek stackdriver
guna mengaktifkan setelan Dikelola Google Cloud
Layanan untuk Prometheus:
Buka objek stackdriver untuk mengedit:
kubectl --kubeconfig=CLUSTER_KUBECONFIG \ --namespace kube-system edit stackdriver stackdriver
Ganti
CLUSTER_KUBECONFIG
dengan jalur file {i> cluster kubeconfig<i} 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
Simpan dan tutup file yang telah diedit.
Komponen Prometheus yang dikelola Google akan dimulai secara otomatis di cluster dalam namespace
gmp-system
.Periksa komponen Prometheus yang dikelola Google:
kubectl --kubeconfig=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 evaluasi aturan dan pemberitahuan. Untuk menyiapkan evaluasi aturan, lihat Evaluasi aturan.
Menjalankan aplikasi contoh
Layanan terkelola menyediakan
manifes untuk aplikasi contoh,
prom-example
, yang menampilkan metrik Prometheus pada port metrics
-nya. Tujuan
menggunakan tiga replika.
Untuk men-deploy aplikasi:
Buat namespace
gmp-test
untuk resource yang Anda buat sebagai bagian dari contoh aplikasi:kubectl --kubeconfig=CLUSTER_KUBECONFIG create ns gmp-test
Terapkan manifes aplikasi dengan perintah berikut:
kubectl -n gmp-test apply \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
Mengonfigurasi resource PodMonitoring
Di bagian ini, Anda akan mengonfigurasi
PodMonitoring
sumber daya khusus untuk mengambil data metrik yang
dipancarkan oleh aplikasi contoh dan
kirimkan ke Google Cloud Managed Service for Prometheus. Resource kustom PodMonitoring
menggunakan penyalinan target. Dalam hal ini, agen kolektor akan melakukan scraping /metrics
endpoint tempat aplikasi contoh memunculkan data.
Resource kustom PodMonitoring
menyalin target di namespace tempat
yang hanya di-deploy. Untuk melakukan scraping target di beberapa namespace, deploy
PodMonitoring
resource kustom di setiap namespace. Anda dapat memverifikasi
Resource PodMonitoring
diinstal di namespace yang diinginkan dengan menjalankan
perintah berikut:
kubectl --kubeconfig CLUSTER_KUBECONFIG get podmonitoring -A
Untuk dokumentasi referensi tentang semua Google Cloud Managed Service for Prometheus resource kustom, lihat referensi prometheus-engine/doc/api.
Manifes berikut menentukan resource PodMonitoring
, prom-example
, di
namespace gmp-test
. Resource menemukan semua Pod di namespace yang memiliki label
app
dengan nilai prom-example
. Pod yang cocok adalah
disalin pada port bernama metrics
, setiap 30 detik, pada /metrics
Jalur HTTP.
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 CLUSTER_KUBECONFIG -n gmp-test apply \
-f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/pod-monitoring.yaml
Google Cloud Managed Service for Prometheus kini melakukan scraping Pod yang cocok.
Membuat kueri data metrik
Cara paling sederhana untuk memverifikasi 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:
Pada panel navigasi, pilih Metrics Explorer.
Gunakan Bahasa Kueri Prometheus (PromQL) untuk menentukan data yang akan ditampilkan di bagan:
Di toolbar panel Select a metric, pilih Code Editor.
Pilih PromQL di tombol Language. Tombol bahasa adalah di bagian bawah panel Code Editor.
Masukkan kueri Anda ke dalam editor kueri. Misalnya, untuk membuat diagram jumlah rata-rata detik yang dihabiskan CPU di 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 informasi selengkapnya tentang penggunaan PromQL, lihat PromQL di Cloud Monitoring.
Screenshot berikut menampilkan diagram yang menampilkan
Metrik anthos_container_cpu_usage_seconds_total
:
Jika Anda mengumpulkan data dalam jumlah besar, Anda mungkin ingin memfilter metrik yang diekspor untuk menekan biaya.
Mengaktifkan Cloud Logging untuk aplikasi pengguna
Konfigurasi untuk Cloud Logging dan Cloud Monitoring disimpan di objek Stackdriver bernama stackdriver
.
Buka objek stackdriver untuk mengedit:
kubectl --kubeconfig=CLUSTER_KUBECONFIG \ --namespace kube-system edit stackdriver stackdriver
Ganti
CLUSTER_KUBECONFIG
dengan jalur file kubeconfig cluster 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
Simpan dan tutup file yang telah 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 CLUSTER_KUBECONFIG apply -f my-app.yaml
Lihat log aplikasi
Konsol
Buka Logs Explorer di konsol Google Cloud.
Klik Resource. Di menu ALL RESOURCE TYPES, pilih Kubernetes Penampung.
Di bagian CLUSTER_NAME, pilih nama cluster pengguna Anda.
Di bagian NAMESPACE_NAME, pilih default.
Klik Add, lalu klik Run Query.
Di bawah 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 CLI
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 Anda.Di output, Anda dapat melihat entri log dari
monitoring-example
Penyebaran. 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 dan jaringan logging aplikasi
traffic dari cluster ke Cloud Logging. Dimulai dengan
Google Distributed Cloud rilis 1.15.0, saat enableCloudLoggingForApplications
disetel ke true
, Anda dapat memfilter log aplikasi berdasarkan kriteria berikut:
- Label pod (
podLabelSelectors
) - Namespace (
namespaces
) - Ekspresi reguler untuk konten log (
contentRegexes
)
Google Distributed Cloud hanya mengirimkan hasil filter ke Cloud Logging.
Menentukan filter log aplikasi
Konfigurasi untuk Logging ditentukan dalam Stackdriver
objek bernama stackdriver
.
Buka objek
stackdriver
untuk mengedit:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ edit stackdriver stackdriver
Ganti USER_CLUSTER_KUBECONFIG dengan jalur ke file {i> kubeconfig cluster<i} 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 telah diedit.
(Opsional) Jika Anda menggunakan
podLabelSelectors
, mulai ulangstackdriver-log-forwarder
DaemonSet untuk menerapkan perubahan Anda segera mungkin:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ rollout restart daemonset stackdriver-log-forwarder
Biasanya,
podLabelSelectors
akan efektif setelah 10 menit. Memulai ulang DaemonSetstackdriver-log-forwarder
membuat perubahan lebih efektif dengan 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
). Lalu, untuk memverifikasi
filter berfungsi, jalankan Pod di namespace prod
untuk mengujinya
kondisi filter.
Untuk menentukan dan menguji filter log aplikasi:
Tentukan filter log aplikasi di objek Stackdriver:
Pada contoh
appLogFilter
berikut, hanyaERROR
atauWARN
yang mencatat log dalam Namespaceprod
dipertahankan. Semua log untuk Pod yang memiliki labeldisableGCPLogging=yes
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 menghasilkanERROR
danINFO
entri log: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
, bukanINFO
entri.Tambahkan label
disableGCPLogging=yes
ke Pod:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG label pods pod1 \ --namespace prod disableGCPLogging=yes
Log yang difilter tidak akan lagi berisi entri untuk Pod
pod1
.
Definisi API filter log aplikasi
Definisi untuk filter log aplikasi dideklarasikan dalam stackdriver definisi resource kustom.
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