Meminta log proxy
Cloud Service Mesh mendukung dua jenis log akses yang berbeda di Cloud Logging: Log lalu lintas (juga (dikenal sebagai log akses Google Cloud Observability) dan Log akses Envoy. Halaman ini menunjukkan cara mengaktifkan, menonaktifkan, melihat, dan menafsirkan log tersebut. Perhatikan bahwa log lalu lintas diaktifkan secara default.
Mengaktifkan dan menonaktifkan log akses
Mesh Layanan Cloud Terkelola
Log akses Envoy
Jalankan perintah berikut untuk mengaktifkan log akses Envoy dan menonaktifkan traffic log:
cat <<EOF | kubectl apply -n istio-system -f -
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
name: enable-envoy-disable-sd
namespace: istio-system
spec:
accessLogging:
- providers:
- name: envoy
- providers:
- name: stackdriver
disabled: true
EOF
Perhatikan bahwa nama penyedia untuk log traffic adalah stackdriver
.
Log lalu lintas
Secara default, log traffic diaktifkan dan log akses Envoy dinonaktifkan. Jika Anda sebelumnya mengaktifkan log akses Envoy dan ingin mengaktifkan log lalu lintas dan nonaktifkan log akses Envoy, jalankan perintah berikut:
cat <<EOF | kubectl apply -n istio-system -f -
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
name: disable-envoy-enable-sd
namespace: istio-system
spec:
accessLogging:
- providers:
- name: envoy
disabled: true
- providers:
- name: stackdriver
EOF
Keduanya
Untuk mengaktifkan log akses dan log traffic Envoy, jalankan perintah berikut berikut:
cat <<EOF | kubectl apply -n istio-system -f - apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: enable-envoy-and-sd-access-log namespace: istio-system spec: accessLogging: - providers: - name: envoy - name: stackdriver EOF
Untuk menonaktifkan log akses dan log traffic Envoy, jalankan perintah berikut berikut:
cat <<EOF | kubectl apply -n istio-system -f - apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: disable-envoy-and-sd namespace: istio-system spec: accessLogging: - providers: - name: envoy disabled: true - providers: - name: stackdriver disabled: true EOF
istiod
terkelola
Log akses Envoy
Jalankan perintah berikut untuk mengaktifkan logging akses Envoy:
Jalankan perintah berikut untuk menambahkan
accessLogFile: /dev/stdout
:cat <<EOF | kubectl apply -f - apiVersion: v1 data: mesh: |- accessLogFile: /dev/stdout kind: ConfigMap metadata: name: istio-release-channel namespace: istio-system EOF
dengan release-channel sebagai saluran rilis Anda (
asm-managed
,asm-managed-stable
, atauasm-managed-rapid
).Jalankan perintah berikut untuk melihat configmap:
kubectl get configmap istio-release-channel -n istio-system -o yaml
Untuk memverifikasi bahwa logging akses telah diaktifkan, pastikan Baris
accessLogFile: /dev/stdout
muncul di bagianmesh:
.... apiVersion: v1 data: mesh: | .... accessLogFile: /dev/stdout ...
Log lalu lintas
Log lalu lintas diaktifkan secara default.
Dalam cluster
Log akses Envoy
Untuk informasi selengkapnya, lihat Aktifkan logging akses Envoy.
Log lalu lintas
Log lalu lintas diaktifkan secara {i>default<i}, kecuali jika Cloud Service Mesh diinstal di Google Distributed Cloud dengan Istio CA (sebelumnya dikenal sebagai Citadel).
Untuk mengaktifkan log traffic di Google Distributed Cloud dengan Istio CA
saat menginstal Cloud Service Mesh dalam cluster,
lalu gunakan flag --option stackdriver
. Atau, Anda dapat mengaktifkan traffic
log di Google Distributed Cloud dengan Istio CA
setelah menginstal Cloud Service Mesh dalam cluster.
Melihat log akses
Log akses Envoy
Command line
Untuk melihat log akses Envoy di log istio-proxy, jalankan perintah berikut:
kubectl logs POD_NAME -n NAMESPACE_NAME -c istio-proxy
Logs Explorer
Untuk melihat log akses Envoy di Logs Explorer:
Buka Logs Explorer:
Pilih project Google Cloud yang sesuai.
Jalankan kueri berikut:
resource.type="k8s_container" \
resource.labels.container_name="istio-proxy"
resource.labels.cluster_name="CLUSTER_NAME" \
resource.labels.namespace_name="NAMESPACE_NAME" \
resource.labels.pod_name="POD_NAME"
Log lalu lintas
Untuk melihat log lalu lintas di Logs Explorer:
Buka Logs Explorer:
Pilih project Google Cloud yang sesuai.
Jalankan kueri berikut tergantung pada apakah Anda melihat klien atau log akses server:
Log server
resource.labels.cluster_name="CLUSTER_NAME" logName="projects/PROJECT_NAME/logs/server-accesslog-stackdriver"
Log klien
resource.labels.cluster_name="CLUSTER_NAME" logName="projects/PROJECT_NAME/logs/client-accesslog-stackdriver"
Untuk melihat log traffic di halaman Cloud Service Mesh untuk Layanan selama rentang waktu tertentu, ikuti langkah-langkah berikut:
Di Konsol Google Cloud, buka halaman Cloud Service Mesh.
Di bagian Layanan, pilih nama Layanan yang ingin Anda periksa.
Buka halaman Metrics.
Tentukan rentang waktu dari menu drop-down Rentang Waktu atau menetapkan rentang kustom dengan linimasa.
Di bagian filter_list Pilih opsi filter, klik Lihat log traffic.
Log traffic diberi nama server-accesslog-stackdriver dan dilampirkan ke resource yang dimonitor (k8s_container atau gce_instance) layanan Anda gunakan. Log traffic berisi informasi berikut:
Properti permintaan HTTP, seperti ID, URL, ukuran, latensi, dan {i>header<i}.
Informasi workload sumber dan tujuan, seperti nama, namespace, identitas, dan label umum.
Jika perekaman aktivitas diaktifkan, informasi rekaman aktivitas, seperti pengambilan sampel, ID rekaman aktivitas, dan ID span.
Contoh entri log terlihat seperti berikut:
{ insertId: "1awb4hug5pos2qi" httpRequest: { requestMethod: "GET" requestUrl: "YOUR-INGRESS/productpage" requestSize: "952" status: 200 responseSize: "5875" remoteIp: "10.8.0.44:0" serverIp: "10.56.4.25:9080" latency: "1.587232023s" protocol: "http" } resource: { type: "k8s_container" labels: { location: "us-central1-a" project_id: "YOUR-PROJECT" pod_name: "productpage-v1-76589d9fdc-ptnt9" cluster_name: "YOUR-CLUSTER-NAME" container_name: "productpage" namespace_name: "default" } } timestamp: "2020-04-28T19:55:21.056759Z" severity: "INFO" labels: { destination_principal: "spiffe://cluster.local/ns/default/sa/bookinfo-productpage" response_flag: "-" destination_service_host: "productpage.default.svc.cluster.local" source_app: "istio-ingressgateway" service_authentication_policy: "MUTUAL_TLS" source_name: "istio-ingressgateway-5ff85d8dd8-mwplb" mesh_uid: "YOUR-MESH-UID" request_id: "021ce752-9001-4ac6-b6d6-3b15f5d3632" destination_namespace: "default" source_principal: "spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account" destination_workload: "productpage-v1" destination_version: "v1" source_namespace: "istio-system" source_workload: "istio-ingressgateway" destination_name: "productpage-v1-76589d9fdc-ptnt9" destination_app: "productpage" } trace: "projects/YOUR-PROJECT/traces/d4197f59b7a43e3aeff3571bac99d536" receiveTimestamp: "2020-04-29T03:07:14.362416217Z" spanId: "43226343ca2bb2b1" traceSampled: true logName: "projects/YOUR-PROJECT/logs/server-accesslog-stackdriver" receiveTimestamp: "2020-04-28T19:55:32.185229100Z" }
Menafsirkan telemetri Cloud Service Mesh
Bagian berikut menjelaskan cara memeriksa status mesh dan peninjauan Anda berbagai telemetri yang berisi detail berguna untuk membantu pemecahan masalah.
Menafsirkan metrik bidang kontrol
Mesh Layanan Cloud Terkelola
Cloud Service Mesh dengan bidang kontrol Cloud Service Mesh terkelola tidak mendukung metrik bidang kontrol.
istiod
terkelola
Cloud Service Mesh dengan bidang kontrol istiod
terkelola tidak mendukung
inspeksi metrik bidang kontrol di bagian ini.
Dalam cluster
Saat menginstal Cloud Service Mesh dengan bidang kontrol dalam cluster, istiod
mengekspor metrik ke Kemampuan Observasi Google Cloud untuk pemantauan secara default.
istiod
memberi awalan metrik ini dengan istio.io/control
dan memberikan insight tentang
status bidang kontrol, seperti jumlah proxy yang terhubung ke setiap kontrol
yaitu instance bidang, peristiwa konfigurasi, push, dan validasi.
Amati atau pecahkan masalah bidang kontrol menggunakan langkah-langkah berikut.
Muat dasbor contoh:
git clone https://github.com/GoogleCloudPlatform/monitoring-dashboard-samples && cd monitoring-dashboard-samples/dashboards && git checkout servicemesh
Instal dasbor Cloud Service Mesh:
gcloud monitoring dashboards create --config-from-file=dashboards/servicemesh/anthos-service-mesh-control-plane-monitoring.json
Cari dasbor bernama
Istio Control Plane Dashboard
dalam daftar. Untuk informasi selengkapnya, lihat Melihat dasbor yang diinstal.
Untuk daftar lengkap metrik yang tersedia, lihat Metrik yang diekspor.
Mendiagnosis penundaan konfigurasi
Mesh Layanan Cloud Terkelola
Cloud Service Mesh dengan bidang kontrol Cloud Service Mesh terkelola tidak mendukung mendiagnosis penundaan konfigurasi.
istiod
terkelola
Cloud Service Mesh dengan bidang kontrol istiod terkelola tidak mendukung mendiagnosis penundaan konfigurasi.
Dalam cluster
Langkah-langkah berikut menjelaskan cara menggunakan metrik pilot_proxy_convergence_time
untuk mendiagnosis penundaan antara perubahan
konfigurasi dan semua {i>proxy<i} yang konvergen.
Jalankan perintah shell dalam pod:
kubectl debug --image istio/base --target istio-proxy -it $(kubectl get pod -l app=pilot -o jsonpath='{.items[0].metadata.name}' -n istio-system) -n istio-system -- curl -s
Akses
localhost:15014
dangrep
untukconvergence
dalam metrik:curl http://localhost:15014/metrics | grep convergence
Menafsirkan log traffic
Informasi berikut menjelaskan cara menggunakan log traffic untuk memecahkan masalah masalah koneksi. Log lalu lintas diaktifkan secara default.
Cloud Service Mesh mengekspor data ke log traffic yang dapat membantu Anda men-debug jenis masalah berikut:
- Arus traffic dan kegagalan
- Perutean permintaan end-to-end
Log traffic diaktifkan secara default untuk penginstalan Cloud Service Mesh di
Google Kubernetes Engine. Anda dapat mengaktifkan log traffic dengan menjalankan kembali asmcli install
. Gunakan
opsi yang sama dengan yang awalnya Anda instal tetapi menghilangkan overlay kustom yang
Stackdriver telah dinonaktifkan.
Ada dua jenis log traffic:
Log akses server memberikan tampilan permintaan dari sisi server. Lokasi tersebut ada di bawah
server-accesslog-stackdriver
, dilampirkan kek8s_container
yang dipantau resource Anda Gunakan sintaks URL berikut untuk menampilkan log akses sisi server:https://console.cloud.google.com/logs/viewer?advancedFilter=logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"&project=PROJECT_ID
Log akses klien memberikan tampilan permintaan dari sisi klien. Mereka berada di
client-accesslog-stackdriver
, dilampirkan ke resource yang dimonitork8s_pod
. Gunakan sintaksis URL berikut untuk menampilkan log akses sisi klien:https://console.cloud.google.com/logs/viewer?advancedFilter=logName="projects/PROJECT_ID/logs/client-accesslog-stackdriver"&project=PROJECT_ID
Log akses berisi informasi berikut:
- Properti permintaan HTTP, seperti ID, URL, ukuran, latensi, dan header umum.
- Informasi workload sumber dan tujuan, seperti nama, namespace, identitas, dan label umum.
- Informasi revisi dan layanan kanonis sumber dan tujuan.
- Jika perekaman aktivitas diaktifkan, log akan berisi informasi rekaman aktivitas, seperti pengambilan sampel, ID trace, dan ID span.
Log lalu lintas dapat berisi label berikut:
route_name
upstream_cluster
X-Envoy-Original-Path
Ini adalah contoh entri log:
{ "insertId": "1j84zg8g68vb62z", "httpRequest": { "requestMethod": "GET", "requestUrl": "http://35.235.89.201:80/productpage", "requestSize": "795", "status": 200, "responseSize": "7005", "remoteIp": "10.168.0.26:0", "serverIp": "10.36.3.153:9080", "latency": "0.229384205s", "protocol": "http" }, "resource": { "type": "k8s_container", "labels": { "cluster_name": "istio-e2e22", "namespace_name": "istio-bookinfo-1-68819", "container_name": "productpage", "project_id": "***", "location": "us-west2-a", "pod_name": "productpage-v1-64794f5db4-8xbtf" } }, "timestamp": "2020-08-13T21:37:42.963881Z", "severity": "INFO", "labels": { "protocol": "http", "upstream_host": "127.0.0.1:9080", "source_canonical_service": "istio-ingressgateway", "source_namespace": "istio-system", "x-envoy-original-path": "", "source_canonical_revision": "latest", "connection_id": "32", "upstream_cluster": "inbound|9080|http|productpage.istio-bookinfo-1-68819.svc.cluster.local", "requested_server_name": "outbound_.9080_._.productpage.istio-bookinfo-1-68819.svc.cluster.local", "destination_version": "v1", "destination_workload": "productpage-v1", "source_workload": "istio-ingressgateway", "destination_canonical_revision": "v1", "mesh_uid": "cluster.local", "source_principal": "spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account", "x-envoy-original-dst-host": "", "service_authentication_policy": "MUTUAL_TLS", "destination_principal": "spiffe://cluster.local/ns/istio-bookinfo-1-68819/sa/bookinfo-productpage", "response_flag": "-", "log_sampled": "false", "destination_service_host": "productpage.istio-bookinfo-1-68819.svc.cluster.local", "destination_name": "productpage-v1-64794f5db4-8xbtf", "destination_canonical_service": "productpage", "destination_namespace": "istio-bookinfo-1-68819", "source_name": "istio-ingressgateway-6845f6d664-lnfvp", "source_app": "istio-ingressgateway", "destination_app": "productpage", "request_id": "39013650-4e62-9be2-9d25-78682dd27ea4", "route_name": "default" }, "logName": "projects/***/logs/server-accesslog-stackdriver", "trace": "projects/***t/traces/466d77d15753cb4d7749ba5413b5f70f", "receiveTimestamp": "2020-08-13T21:37:48.758673203Z", "spanId": "633831cb1fda4fd5", "traceSampled": true }
Anda dapat menggunakan log ini dengan berbagai cara:
- Melakukan integrasi dengan Cloud Trace, yang merupakan fitur opsional di dan Cloud Service Mesh.
- Ekspor log traffic ke BigQuery, tempat Anda dapat menjalankan kueri seperti memilih semua permintaan memerlukan waktu lebih dari 5 detik.
- Buat metrik berbasis log.
- Memecahkan masalah error
404
dan503
Memecahkan masalah error 404
dan 503
Contoh berikut menjelaskan cara menggunakan log ini untuk memecahkan masalah saat
permintaan gagal dengan kode respons 404
atau 503
.
Di log akses klien, telusuri entri seperti berikut:
httpRequest: { requestMethod: "GET" requestUrl: "://IP_ADDRESS/src/Util/PHP/eval-stdin.php" requestSize: "2088" status: 404 responseSize: "75" remoteIp: "10.168.0.26:34165" serverIp: "10.36.3.149:8080" latency: "0.000371440s" protocol: "http" }
Buka label di entri log akses. Find (Menemukan) kolom
response_flag
yang terlihat seperti berikut:response_flag: "NR"
Nilai
NR
adalah akronim dariNoRoute
, yang berarti tidak ada rute yang ditemukan untuk tujuan atau tidak ada rantai filter yang cocok untuk downstream koneksi jarak jauh. Demikian pula, Anda dapat menggunakan labelresponse_flag
untuk memecahkan masalah503
error.Jika Anda melihat error
503
di log akses klien dan server, pastikan nama port yang ditetapkan untuk setiap layanan sesuai dengan nama protokol yang digunakan di antara mereka. Misalnya, jika klien biner golang terhubung ke server golang menggunakan HTTP, tetapi port-nya diberi namahttp2
, protokol tidak akan melakukan negosiasi otomatis dengan benar.
Untuk informasi selengkapnya, lihat tanda respons.
Menafsirkan log akses Envoy
Langkah-langkah berikut menjelaskan cara menggunakan log akses Envoy untuk menampilkan traffic di antara kedua ujung koneksi untuk tujuan pemecahan masalah.
Log akses Envoy berguna untuk mendiagnosis masalah seperti:
- Arus traffic dan kegagalan
- Perutean permintaan end-to-end
Log akses Envoy tidak diaktifkan secara default di Cloud Service Mesh dan dapat untuk cluster dalam mesh.
Anda bisa memecahkan masalah kegagalan koneksi atau permintaan dengan menghasilkan aktivitas di aplikasi Anda yang memicu permintaan HTTP, kemudian memeriksa permintaan di log sumber atau tujuan.
Jika Anda memicu permintaan muncul dan muncul di log proxy sumber, permintaan itu
menunjukkan bahwa pengalihan traffic iptables
berfungsi dengan benar dan Envoy
{i>proxy<i} menangani lalu lintas. Jika melihat error di log, buat Envoy
dump konfigurasi dan periksa konfigurasi cluster Envoy untuk memastikan
benar. Jika Anda melihat permintaan tetapi log tidak memiliki error, periksa tujuan
log proxy.
Jika permintaan muncul di log proxy tujuan, hal ini menunjukkan bahwa mesh itu sendiri berfungsi dengan benar. Jika Anda melihat error, jalankan Envoy dump konfigurasi dan verifikasi nilai yang benar untuk port traffic yang disetel di untuk konfigurasi pemroses.
Jika masalah berlanjut setelah melakukan langkah sebelumnya, Envoy mungkin
tidak dapat menegosiasikan otomatis protokol antara file bantuan dan aplikasinya
pod. Pastikan nama port layanan Kubernetes, misalnya http-80
,
cocok dengan protokol
yang digunakan aplikasi.
Menggunakan Logs Explorer untuk mengkueri log
Anda dapat menggunakan antarmuka Logs Explorer
untuk membuat kueri log akses Envoy tertentu. Misalnya, untuk membuat
kueri semua permintaan yang
aktifkan MULTUAL_TLS
dan gunakan protokol grpc
, tambahkan kode berikut ke
kueri log akses server:
labels.protocol="grpc" labels.service_authentication_policy="MULTUAL_TLS"
Menetapkan kebijakan log akses
Mesh Layanan Cloud Terkelola
Guna mengonfigurasi log akses untuk Cloud Service Mesh dengan Bidang kontrol Cloud Service Mesh, lihat Mengaktifkan log akses.
istiod
terkelola
Guna mengonfigurasi log akses untuk Cloud Service Mesh dengan bidang kontrol istiod, lihat Mengaktifkan log akses.
Dalam cluster
Menetapkan kebijakan log akses untuk Cloud Service Mesh dengan kontrol dalam cluster pesawat:
Buat file overlay kustom
IstioOperator
yang menyertakan tagAccessLogPolicyConfig
untuk skenario Anda.Teruskan file ini ke
asmcli
menggunakan opsi--custom_overlay
untuk mengupdate konfigurasi bidang kontrol dalam cluster. Untuk informasi tentang menjalankanasmcli install
dengan file overlay kustom, lihat Instal dengan fitur opsional.
Melihat informasi khusus layanan atau workload
Jika Anda mengalami masalah dengan layanan atau workload tertentu, bukan masalah pada lebar mesh
memeriksa masing-masing {i>proxy<i} Envoy, dan mengumpulkan informasi yang relevan
dari mereka. Untuk mengumpulkan informasi tentang beban kerja tertentu dan {i>proxy<i}-nya,
Anda dapat menggunakan pilot-agent
:
kubectl exec POD_NAME -n NAMESPACE_NAME -c istio-proxy -- pilot-agent request GET SCOPE
Dalam contoh, SCOPE adalah salah satu dari berikut ini:
certs
- Sertifikat dalam instance Envoyclusters
- Cluster dengan Envoy yang dikonfigurasiconfig_dump
- Membuang konfigurasi Envoylisteners
- Pemroses dengan Envoy dikonfigurasilogging
- Melihat dan mengubah setelan loggingstats
- Statistik Envoystats/prometheus
- Statistik Envoy sebagai catatan Prometheus
Melihat status soket proxy
Anda dapat langsung memeriksa status soket proxy Envoy menggunakan {i>checkout<i}.
Menampilkan daftar soket yang ada, termasuk soket di
TIME_WAIT
, yang dapat berdampak negatif terhadap skalabilitas jika jumlahnya tinggi:kubectl debug --image istio/base --target istio-proxy -it POD_NAME -n NAMESPACE_NAME -- ss -anopim
Menampilkan ringkasan statistik soket:
kubectl debug --image istio/base --target istio-proxy -it POD_NAME -n NAMESPACE_NAME -- ss -s
Untuk informasi selengkapnya, lihat Pengantar Perintah ss.
Log istio-proxy
dan istio-init
Selain itu, ambil log istio-proxy
dan tinjau kontennya untuk menemukan
yang mungkin menunjukkan penyebab masalah:
kubectl logs POD_NAME -n NAMESPACE_NAME -c istio-proxy
Anda dapat melakukan hal yang sama untuk penampung init
:
kubectl logs POD_NAME -n NAMESPACE_NAME -c istio-init
Langkah selanjutnya
Berintegrasi dengan Cloud Trace. Cloud Trace adalah fitur opsional di Cloud Service Mesh.