From a01973cd440f800c2fd4ef414608e6e7c5f963a4 Mon Sep 17 00:00:00 2001 From: theemadnes Date: Thu, 22 Jan 2026 09:22:57 +0000 Subject: [PATCH 1/2] add request logging for gRPC mode and bump python image and curl binary --- quickstarts/whereami/Dockerfile | 4 +-- quickstarts/whereami/README.md | 6 ++--- quickstarts/whereami/app.py | 24 ++++++++++++++++- quickstarts/whereami/cloudbuild.yaml | 26 +++++++++---------- quickstarts/whereami/helm-chart/Chart.yaml | 4 +-- quickstarts/whereami/k8s-grpc/deployment.yaml | 2 +- quickstarts/whereami/k8s/deployment.yaml | 2 +- 7 files changed, 45 insertions(+), 23 deletions(-) diff --git a/quickstarts/whereami/Dockerfile b/quickstarts/whereami/Dockerfile index 2ba4c0b12d..99cd0d47db 100644 --- a/quickstarts/whereami/Dockerfile +++ b/quickstarts/whereami/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.13.5-slim +FROM python:3.13.11-slim #MAINTAINER Alex Mattson "alex.mattson@gmail.com" @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ wget && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ - wget -O /bin/curl https://github.com/moparisthebest/static-curl/releases/download/v8.11.0/curl-amd64 && \ + wget -O /bin/curl https://github.com/moparisthebest/static-curl/releases/download/v8.17.0/curl-amd64 && \ chmod +x /bin/curl COPY ./requirements.txt /app/requirements.txt diff --git a/quickstarts/whereami/README.md b/quickstarts/whereami/README.md index d90a172cd9..787fbbe72f 100644 --- a/quickstarts/whereami/README.md +++ b/quickstarts/whereami/README.md @@ -19,7 +19,7 @@ Prometheus metrics are exposed from `whereami` at `x.x.x.x/metrics` in both Flas `whereami` is a single-container app, designed and packaged to run on Kubernetes. In its simplest form it can be deployed in a single line with only a few parameters. ```bash -$ kubectl run --image=us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.25 --expose --port 8080 whereami +$ kubectl run --image=us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.26 --expose --port 8080 whereami ``` The `whereami` pod listens on port `8080` and returns a very simple JSON response that indicates who is responding and where they live. This example assumes you're executing the `curl` command from a pod in the same K8s cluster & namespace (although the following examples show how to access from external clients): @@ -99,7 +99,7 @@ spec: serviceAccountName: whereami containers: - name: whereami - image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.25 + image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.26 resources: requests: memory: "512Mi" @@ -564,7 +564,7 @@ If you'd like to deploy `whereami` via its Helm chart, you could leverage the fo Deploy the default setup of `whereami` (HTTP frontend): ```sh helm install whereami oci://us-docker.pkg.dev/google-samples/charts/whereami \ - --version 1.2.25 + --version 1.2.26 ``` Deploy `whereami` as HTTP backend by running the previous `helm install` command with the following parameters: diff --git a/quickstarts/whereami/app.py b/quickstarts/whereami/app.py index e34937c644..2b2f0d93bf 100644 --- a/quickstarts/whereami/app.py +++ b/quickstarts/whereami/app.py @@ -129,6 +129,28 @@ def GetPayload(self, request, context): payload = whereami_payload.build_payload(None) return whereami_pb2.WhereamiReply(**payload) +# Custom gRPC server interceptor for request logging +class RequestLoggingInterceptor(grpc.ServerInterceptor): + def __init__(self): + self._logger = logging.getLogger(__name__) + + def intercept_service(self, continuation, handler_call_details): + handler = continuation(handler_call_details) + + # This interceptor only supports unary-unary RPCs + if not handler or not handler.unary_unary: + return handler + + def logging_wrapper(request, context): + self._logger.info( + f"gRPC request received: Method='{handler_call_details.method}', Peer='{context.peer()}'") + return handler.unary_unary(request, context) + + return grpc.unary_unary_rpc_method_handler( + logging_wrapper, + request_deserializer=handler.request_deserializer, + response_serializer=handler.response_serializer) + # if selected will serve gRPC endpoint on port 9090 # see https://github.com/grpc/grpc/blob/master/examples/python/xds/server.py @@ -138,7 +160,7 @@ def grpc_serve(): # working on a proper workaround server = grpc.server( futures.ThreadPoolExecutor(max_workers=multiprocessing.cpu_count()+5), - interceptors=(PromServerInterceptor(),)) # interceptor for metrics + interceptors=(PromServerInterceptor(), RequestLoggingInterceptor(),)) # interceptor for metrics and logging # Add the application servicer to the server. whereami_pb2_grpc.add_WhereamiServicer_to_server(WhereamigRPC(), server) diff --git a/quickstarts/whereami/cloudbuild.yaml b/quickstarts/whereami/cloudbuild.yaml index 937ac8e21c..17a3ac87a9 100644 --- a/quickstarts/whereami/cloudbuild.yaml +++ b/quickstarts/whereami/cloudbuild.yaml @@ -23,21 +23,21 @@ steps: - '-t' - 'gcr.io/google-samples/whereami:v1' - '-t' - - 'gcr.io/google-samples/whereami:v1.2.25' + - 'gcr.io/google-samples/whereami:v1.2.26' - '-t' - - 'gcr.io/google-samples/whereami:sample-public-image-v1.2.25-${SHORT_SHA}' + - 'gcr.io/google-samples/whereami:sample-public-image-v1.2.26-${SHORT_SHA}' - '-t' - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:v1' - '-t' - - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.25' + - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.26' - '-t' - - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:sample-public-image-v1.2.25-${SHORT_SHA}' + - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:sample-public-image-v1.2.26-${SHORT_SHA}' - '-t' - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:v1' - '-t' - - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.25' + - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.26' - '-t' - - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:sample-public-image-v1.2.25-${SHORT_SHA}' + - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:sample-public-image-v1.2.26-${SHORT_SHA}' - '.' dir: 'quickstarts/whereami' - name: ubuntu @@ -47,15 +47,15 @@ steps: curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash cd quickstarts/whereami/helm-chart helm package . # This creates a file similar to whereami-X.Y.Z.tgz - helm push whereami-1.2.25.tgz oci://us-docker.pkg.dev/google-samples/charts + helm push whereami-1.2.26.tgz oci://us-docker.pkg.dev/google-samples/charts images: - 'gcr.io/google-samples/whereami:v1' - - 'gcr.io/google-samples/whereami:v1.2.25' - - 'gcr.io/google-samples/whereami:sample-public-image-v1.2.25-${SHORT_SHA}' + - 'gcr.io/google-samples/whereami:v1.2.26' + - 'gcr.io/google-samples/whereami:sample-public-image-v1.2.26-${SHORT_SHA}' - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:v1' - - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.25' - - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:sample-public-image-v1.2.25-${SHORT_SHA}' + - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.26' + - 'us-docker.pkg.dev/google-samples/containers/gke/whereami:sample-public-image-v1.2.26-${SHORT_SHA}' - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:v1' - - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.25' - - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:sample-public-image-v1.2.25-${SHORT_SHA}' + - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.26' + - 'europe-docker.pkg.dev/google-samples/containers/gke/whereami:sample-public-image-v1.2.26-${SHORT_SHA}' diff --git a/quickstarts/whereami/helm-chart/Chart.yaml b/quickstarts/whereami/helm-chart/Chart.yaml index 35fee6e2e4..6281df0937 100644 --- a/quickstarts/whereami/helm-chart/Chart.yaml +++ b/quickstarts/whereami/helm-chart/Chart.yaml @@ -15,10 +15,10 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.2.25 +version: 1.2.26 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "v1.2.25" +appVersion: "v1.2.26" diff --git a/quickstarts/whereami/k8s-grpc/deployment.yaml b/quickstarts/whereami/k8s-grpc/deployment.yaml index dffbb673e6..070a4094d2 100644 --- a/quickstarts/whereami/k8s-grpc/deployment.yaml +++ b/quickstarts/whereami/k8s-grpc/deployment.yaml @@ -53,7 +53,7 @@ spec: - all privileged: false readOnlyRootFilesystem: true - image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.25 + image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.26 resources: requests: memory: "512Mi" diff --git a/quickstarts/whereami/k8s/deployment.yaml b/quickstarts/whereami/k8s/deployment.yaml index c166117b55..5be5f254ae 100644 --- a/quickstarts/whereami/k8s/deployment.yaml +++ b/quickstarts/whereami/k8s/deployment.yaml @@ -53,7 +53,7 @@ spec: - all privileged: false readOnlyRootFilesystem: true - image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.25 + image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.26 resources: requests: memory: "512Mi" From 89fa9b2f91f210f533ad1d4658ddbfef40ce0426 Mon Sep 17 00:00:00 2001 From: theemadnes Date: Fri, 23 Jan 2026 00:03:36 +0000 Subject: [PATCH 2/2] removed logging entries for health checks --- quickstarts/whereami/app.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/quickstarts/whereami/app.py b/quickstarts/whereami/app.py index 2b2f0d93bf..b0b3eac355 100644 --- a/quickstarts/whereami/app.py +++ b/quickstarts/whereami/app.py @@ -142,8 +142,9 @@ def intercept_service(self, continuation, handler_call_details): return handler def logging_wrapper(request, context): - self._logger.info( - f"gRPC request received: Method='{handler_call_details.method}', Peer='{context.peer()}'") + if handler_call_details.method != f'/{health.SERVICE_NAME}/Check': + self._logger.info( + f"gRPC request received: Method='{handler_call_details.method}', Peer='{context.peer()}'") return handler.unary_unary(request, context) return grpc.unary_unary_rpc_method_handler(