Kemampuan observasi untuk gRPC tanpa proxy
Observabilitas Cloud Service Mesh untuk gRPC tanpa proxy dibuat berdasarkan plugin OpenTelemetry gRPC yang ada, mencatat metrik (latensi, ukuran pesan, dll.) untuk semua saluran dan server gRPC yang mengaktifkan Cloud Service Mesh, dan memberikan atribut tambahan yang menampilkan informasi mesh topologi untuk traffic Cloud Service Mesh. Saluran gRPC dianggap mengaktifkan Cloud Service Mesh jika mendapatkan konfigurasi dari bidang kontrol Cloud Service Mesh, sedangkan semua server gRPC dianggap mengaktifkan Cloud Service Mesh.
Atribut Mesh
Atribut mesh berikut tersedia di metrik.
Label Lingkungan Lokal:
csm.mesh_id
- ID mesh.
- Atribut lingkungan lokal lainnya diperoleh dari
Resource OpenTelemetry.
- Managed Service for Prometheus (GMP) dapat disiapkan untuk menggunakan infrastruktur Google guna menyimpan metrik. Jika menggunakan ini, atribut resource yang mendeskripsikan lingkungan lokal aplikasi akan otomatis ditambahkan sebagai MonitoredResource.
- Jika menggunakan infrastruktur non-Google untuk mengekspor dan menyimpan metrik, pipeline pengumpulan harus menambahkan atribut pada metrik yang menjelaskan lingkungan tempat aplikasi berjalan.
Label Lingkungan Jarak Jauh:
csm.remote_workload_type
- Jenis peer jarak jauh. ("gcp_kubernetes_engine" untuk GKE).
- Berdasarkan jenis peer, atribut tambahan akan ada.
- Untuk peer yang berjalan di GKE -
csm.remote_workload_project_id
- ID project yang terkait dengan resource ini, seperti "my-project".
csm.remote_workload_location
*Lokasi fisik cluster yang berisi penampung.csm.remote_workload_cluster_name
- Cluster tempat penampung berjalan.
csm.remote_workload_namespace_name
The namespace where the container is running.
csm.remote_workload_name
- Nama beban kerja 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 menjadi tujuan RPC. Perhatikan bahwa opsi ini hanya tersedia jika layanan backend telah dikonfigurasi melalui Gateway API.
csm.service_name
- Nama layanan.
csm.service_namespace_name
- Nama namespace layanan.
Istilah remote_workload mengacu pada peer, yaitu, untuk klien, Pod server 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 tidak
tersedia di titik pengumpulan metrik ini.
Petunjuk penyiapan kemampuan observasi
Bagian ini menjelaskan cara mengaktifkan Observasi Cloud Service Mesh untuk gRPC tanpa proxy pada penyiapan mesh layanan.
C++
Dukungan observasi hanya tersedia melalui sistem build Bazel. grpcpp_csm_observability
target
harus
ditambahkan sebagai dependensi.
Perubahan kode yang diperlukan
Kode berikut perlu ditambahkan ke klien dan server gRPC Anda untuk menggunakan 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, gunakan CsmObservabilityBuilder API untuk mendaftarkan plugin. Contoh berikut menunjukkan cara menyiapkan Observabilitas Cloud Service Mesh dengan eksportir Prometheus.
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();
SetMeterProvider()
API di CsmObservabilityBuilder()
memungkinkan pengguna
menetapkan objek MeterProvider
yang dapat dikonfigurasi dengan eksportir.
Java
Untuk mengaktifkan Observabilitas Cloud Service Mesh untuk aplikasi gRPC Java, 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()
, lakukan inisialisasi Observabilitas Cloud Service Mesh dengan menyediakan instance OpenTelemetry SDK yang dikonfigurasi denganMeterProvider
untuk mengumpulkan dan mengekspor metrik.Sebelum Anda melakukan operasi gRPC seperti menyiapkan saluran atau server, pastikan untuk menggunakan
CsmObservability.Builder()
API untuk mendaftarkan OpenTelemetry SDK.Setelah instance CsmObservability dibuat, memanggil
registerGlobal()
pada instance akan mengaktifkan Observasi Cloud Service Mesh untuk semua saluran dan server Cloud Service Mesh.Contoh berikut menunjukkan cara menyiapkan Observabilitas Cloud Service Mesh menggunakan eksportir 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, konfigurasikan Observabilitas Cloud Service Mesh secara global dengan
MeterProvider
. Contoh berikut menunjukkan cara menyiapkan Observabilitas Cloud Service Mesh. Setelah menyiapkan Cloud Service MeshObservability, semua
Cloud Service Mesh Channel dan semua server akan mengambil plugin statistik
OpenTelemetry yang dikonfigurasi dengan opsi yang disediakan dan dengan Label Cloud Service Mesh tambahan. Saluran Non-Cloud Service Mesh 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 Observabilitas Cloud Service Mesh:
grpcio>=1.65.0
grpcio-observability>=1.65.0
grpcio-csm-observability>=1.65.0
Sebelum operasi gRPC, termasuk membuat saluran, server, atau kredensial, gunakan CsmOpenTelemetryPlugin API 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 membersihkan resource:
csm_plugin.deregister_global()
Contoh berikut menunjukkan cara menyiapkan Observabilitas Cloud Service Mesh dengan eksportir 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 meng-scrape localhost:9464/metrics
untuk mendapatkan metrik yang dilaporkan oleh Observasi Cloud Service Mesh.
Perhatikan bahwa agar atribut mesh yang ditambahkan ke metrik gRPC berfungsi, biner klien dan server harus disiapkan dengan CsmObservability.
Jika menggunakan infrastruktur non-Google untuk mengekspor dan menyimpan metrik, pipeline pengumpulan harus menambahkan atribut pada metrik yang menjelaskan lingkungan tempat aplikasi berjalan. Hal ini beserta atribut mesh yang dijelaskan sebelumnya dapat digunakan untuk mendapatkan tampilan traffic yang berjalan di mesh.
Perubahan spesifikasi
Observabilitas Cloud Service Mesh menentukan informasi topologi mesh melalui variabel lingkungan yang perlu ditambahkan ke env penampung, baik untuk klien maupun server. Informasi ini disediakan untuk peer untuk pelaporan metrik melalui Kemampuan Observasi Cloud Service Mesh.
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 kode berikut:
- IMAGE_NAME dengan nama image.
- CONTAINER_NAME dengan nama penampung.
- CSM_WORKLOAD_NAME dengan nama beban kerja, misalnya nama deployment.