Kemampuan observasi untuk gRPC tanpa proxy
Kemampuan Cloud Service Mesh Observability untuk build gRPC tanpa proxy berdasarkan plugin OpenTelemetry gRPC yang sudah ada, mencatat metrik (latensi, ukuran pesan, dll.) untuk semua saluran dan server gRPC yang mendukung Cloud Service Mesh, dan memberikan atribut tambahan yang menampilkan informasi mesh topologi untuk traffic Cloud Service Mesh. gRPC saluran layanan dianggap telah diaktifkan Cloud Service Mesh jika mendapat dari bidang kontrol Cloud Service Mesh, sementara semua gRPC server dianggap telah mengaktifkan Cloud Service Mesh.
Atribut Jaring
Atribut mesh berikut tersedia di metrik.
Label Lingkungan Lokal:
csm.mesh_id
- ID mesh.
- Atribut lingkungan lokal lainnya diperoleh dari
Resource OpenTelemetry.
- Layanan Terkelola untuk Prometheus (GMP) dapat disiapkan untuk menggunakan infrastruktur Google untuk menyimpan metrik. Jika menggunakan ini, atribut sumber daya yang menggambarkan lingkungan lokal aplikasi secara otomatis ditambahkan sebagai MonitoredResource.
- Jika menggunakan infrastruktur non-Google untuk mengekspor dan menyimpan metrik, pengumpulan data harus menambahkan atribut pada metrik yang lingkungan tempat aplikasi berjalan.
Label Lingkungan Jarak Jauh:
csm.remote_workload_type
- Jenis peer jarak jauh. ("gcp_kubernetes_engine" untuk GKE).
- Berdasarkan jenis pembanding, atribut tambahan akan ada.
- Untuk peer yang berjalan di GKE -
csm.remote_workload_project_id
- ID project yang terkait dengan resource ini, misalnya "my-project".
csm.remote_workload_location
*Lokasi fisik cluster yang berisi container.csm.remote_workload_cluster_name
- Cluster tempat container dijalankan.
csm.remote_workload_namespace_name
The namespace where the container is running.
csm.remote_workload_name
- Nama workload jarak jauh. Ini harus berupa nama objek yang berisi definisi Pod (misalnya, Deployment, ReplicaSet, atau hanya nama Pod untuk Pod biasa).
Label Layanan: Informasi tentang layanan backend (cluster xDS) yang oleh RPC menjadi rute yang paling umum. Perhatikan bahwa ini hanya tersedia jika layanan backend memiliki telah dikonfigurasi melalui Gateway API.
csm.service_name
- Nama layanan.
csm.service_namespace_name
- Nama namespace layanan.
Istilah {i>remote_workload<i} mengacu pada {i>peer<i}, yaitu, untuk klien, server Pod yang menjadi target RPC adalah workload jarak jauh, sedangkan untuk server, Pod klien yang memulai RPC adalah workload jarak jauh.
Perhatikan bahwa atribut ini tidak akan tersedia di grpc.client.attempt.started
dan grpc.server.call.started
karena semua informasi mesh topologi
yang tersedia di titik
pengumpulan metrik ini.
Petunjuk penyiapan kemampuan observasi
Bagian ini menjelaskan cara mengaktifkan Cloud Service Mesh Observability untuk gRPC tanpa proxy pada penyiapan mesh layanan.
C++
Dukungan kemampuan observasi hanya tersedia melalui sistem build Bazel. Tujuan
target grpcpp_csm_observability
harus
ditambahkan sebagai dependensi.
Perubahan kode yang diperlukan
Kode berikut perlu ditambahkan ke klien dan server gRPC Anda di untuk memanfaatkan kemampuan observasi Cloud Service Mesh.
#include <grpcpp/ext/csm_observability.h>
int main() {
// …
auto observability = grpc::CsmObservabilityBuilder()
.SetMeterProvider(std::move(meter_provider))
.BuildAndRegister();
assert(observability.ok());
// …
}
Sebelum operasi gRPC apa pun, termasuk membuat saluran, server, atau kredensial, menggunakan CsmObservabilityBuilder API untuk mendaftarkan plugin. Contoh berikut menunjukkan cara menyiapkan Cloud Service Mesh Observability dengan Prometheus pengekspor.
opentelemetry::exporter::metrics::PrometheusExporterOptions opts;
opts.url = "0.0.0.0:9464";
auto prometheus_exporter =
opentelemetry::exporter::metrics::PrometheusExporterFactory::Create(opts);
auto meter_provider =
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>();
meter_provider->AddMetricReader(std::move(prometheus_exporter));
auto observability = grpc:::CsmObservabilityBuilder()
.SetMeterProvider(std::move(meter_provider))
.BuildAndRegister();
API SetMeterProvider()
di CsmObservabilityBuilder()
memungkinkan pengguna untuk
menetapkan MeterProvider
yang dapat dikonfigurasi
dengan pengekspor.
Java
Guna mengaktifkan Cloud Service Mesh Observability untuk aplikasi Java gRPC, lakukan langkah-langkah berikut:
Pastikan project menyertakan artefak
grpc-gcp-csm-observability
. Gunakan gRPC versi 1.65.0 atau yang lebih baru.Dalam metode
main()
, inisialisasi Cloud Service Mesh Observability dengan menyediakan mengonfigurasi instance OpenTelemetry SDK denganMeterProvider
untuk mengumpulkan dan mengekspor metrik.Sebelum Anda melakukan operasi gRPC apa pun seperti menyiapkan saluran atau server, pastikan untuk menggunakan
CsmObservability.Builder()
API untuk mendaftarkan OpenTelemetry SDK.Setelah instance CsmObservability dibuat, memanggil
registerGlobal()
pada instance mengaktifkan Cloud Service Mesh Observability untuk semua saluran dan server Cloud Service Mesh.Contoh berikut menunjukkan cara menyiapkan Cloud Service Mesh Observability menggunakan pengekspor Prometheus.
import io.grpc.gcp.csm.observability.CsmObservability;
...
public static void main(String[] args) {
...
int prometheusPort = 9464;
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
.registerMetricReader(
PrometheusHttpServer.builder().setPort(prometheusPort).build())
.build();
OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder()
.setMeterProvider(sdkMeterProvider)
.build();
CsmObservability observability = new CsmObservability.Builder()
.sdk(openTelemetrySdk)
.build();
observability.registerGlobal();
// ... (continue with channel and server configuration)
}
Go
Sebelum operasi gRPC, termasuk membuat ClientConn atau Server, atau
kredensial, konfigurasi Cloud Service Mesh Observability secara global dengan
MeterProvider
. Contoh berikut menunjukkan cara menyiapkan Cloud Service Mesh
Kemampuan observasi. Setelah menyiapkan Cloud Service MeshObservability, setiap
Saluran Mesh Layanan Cloud dan semua server akan mengambil OpenTelemetry
plugin yang dikonfigurasi dengan opsi yang disediakan dan dengan
Label Mesh Layanan Cloud. Saluran Mesh Layanan Non-Cloud akan mendapatkan
Plugin statistik OpenTelemetry tanpa Label Cloud Service Mesh.
import (
"context"
"google.golang.org/grpc/stats/opentelemetry"
"google.golang.org/grpc/stats/opentelemetry/csm"
"go.opentelemetry.io/otel/sdk/metric"
)
func main() {
reader := metric.NewManualReader()
provider := metric.NewMeterProvider(metric.WithReader(reader))
opts := opentelemetry.Options{
MetricsOptions: opentelemetry.MetricsOptions{
MeterProvider: provider,
},
}
cleanup := csm.EnableObservability(context.Background(), opts)
defer cleanup()
// Any created ClientConns and servers will be configured with an
// OpenTelemetry stats plugin configured with provided options.
}
Python
Dependensi gRPC berikut diperlukan untuk Cloud Service Mesh Kemampuan observasi:
grpcio>=1.65.0
grpcio-observability>=1.65.0
grpcio-csm-observability>=1.65.0
Sebelum operasi gRPC apa pun, termasuk membuat saluran, server, atau pribadi, gunakan API CsmOpenTelemetryPlugin untuk membuat dan mendaftarkan plugin:
import grpc_csm_observability
# ...
csm_plugin = grpc_csm_observability.CsmOpenTelemetryPlugin(
meter_provider=[your_meter_provider],
)
csm_plugin.register_global()
# Create server or client
Setelah semua operasi gRPC, gunakan kode berikut untuk membatalkan pendaftaran dan menghapus referensi:
csm_plugin.deregister_global()
Contoh berikut menunjukkan cara menyiapkan Kemampuan Observasi Cloud Service Mesh dengan pengekspor Prometheus:
import grpc_csm_observability
from opentelemetry.exporter.prometheus import PrometheusMetricReader
from prometheus_client import start_http_server
start_http_server(port=9464, addr="0.0.0.0")
reader = PrometheusMetricReader()
meter_provider = MeterProvider(metric_readers=[reader])
csm_plugin = CsmOpenTelemetryPlugin(
meter_provider=meter_provider,
)
csm_plugin.register_global()
# Clean up after use
csm_plugin.deregister_global()
Pada contoh sebelumnya, Anda dapat melakukan scraping localhost:9464/metrics
untuk mendapatkan
metrik yang dilaporkan oleh Cloud Service Mesh Observability.
Perhatikan bahwa agar atribut mesh yang ditambahkan ke metrik gRPC berfungsi, baik komputer klien dan server perlu diatur dengan kemampuan CsmObservability.
Jika menggunakan infrastruktur non-Google untuk mengekspor dan menyimpan metrik, pengumpulan data harus menambahkan atribut pada metrik yang menggambarkan lingkungan tempat aplikasi berjalan. Ini beserta {i>mesh<i} yang dijelaskan sebelumnya dapat digunakan untuk mendapatkan gambaran lalu lintas yang berjalan di jala.
Perubahan spesifikasi
Kemampuan Cloud Service Mesh Observability menentukan informasi topologi mesh variabel lingkungan yang perlu ditambahkan ke env kontainer, untuk klien dan server. Informasi ini disediakan bagi rekan-rekan untuk metrik pelaporan melalui kemampuan Observasi Mesh Layanan Cloud.
spec:
containers:
- image: IMAGE_NAME
name: CONTAINER_NAME
env:
- name: GRPC_XDS_BOOTSTRAP
value: "/tmp/grpc-xds/td-grpc-bootstrap.json" #created by td-grpc-bootstrap
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: NAMESPACE_NAME
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: CSM_WORKLOAD_NAME
value: CSM_WORKLOAD_NAME
- name: CONTAINER_NAME
value: CONTAINER_NAME
- name: OTEL_RESOURCE_ATTRIBUTES
value: k8s.pod.name=$(POD_NAME),k8s.namespace.name=$(NAMESPACE_NAME),k8s.container.name=CONTAINER_NAME
Mengganti hal berikut:
- IMAGE_NAME dengan nama gambar.
- CONTAINER_NAME dengan nama container.
- CSM_WORKLOAD_NAME dengan nama workload, misalnya deployment nama.