Google Stackdriver-如何使用我的Kubernetes YAML标签进行Stackdriver Log查询?

问题描述

使用Google Stackdriver时,我可以使用日志查询找到我要查找的确切日志语句。

这可能看起来像这样:

resource.type="k8s_container"
resource.labels.project_id="my-project"
resource.labels.location="europe-west3-a"
resource.labels.cluster_name="my-cluster"
resource.labels.namespace_name="dev"
resource.labels.pod_name="my-app-pod-7f6cf95b6c-nkkbm"
resource.labels.container_name="container"

但是正如您在此查询参数resource.labels.pod_name="my-app-pod-7f6cf95b6c-nkkbm"中看到的那样,我正在寻找ID为7f6cf95b6c-nkkbm的吊舱。因此,我无法将此Stackdriver视图与确切的查询 if 一起使用,因此我部署了my-app的新修订版,因此具有新的ID,而curreny查询中的ID变为无效还是找不到。

现在,我并不总是希望每次都拥有my-app日志的当前视图时都查找新ID。因此,我尝试在我的Kubernetes YAML文件添加一个特殊标签stackdriver: my-app

apiVersion: apps/v1
kind: Deployment
Metadata:
  name: my-app
spec:
  template:
    Metadata:
      labels:
        stackdriver: my-app <<<

重新访问我新部署的Pod,我可以确保标签stackdriver: my-app确实存在。

现在,我想添加此新标签以用作查询参数:

resource.type="k8s_container"
resource.labels.project_id="my-project"
resource.labels.location="europe-west3-a"
resource.labels.cluster_name="my-cluster"
resource.labels.namespace_name="dev"
resource.labels.pod_name="my-app-pod-7f6cf95b6c-nkkbm"
resource.labels.container_name="container"
resource.labels.stackdriver=my-app <<< the kubernetes label

您可以猜测这没有用,否则我没有理由写这个问题;) 知道我将要做的事情吗?

解决方法

任何想法都可以实现吗?

是的!实际上,我已经准备了一个示例来向您展示整个过程:)

我们假设:

  • 您有一个名为GKE的{​​{1}}集群
  • 您已启用GKE的Cloud Operations(记录)
  • 您有一个名为gke-label的{​​{1}},后面是Deployment
    • nginx

label

stackdriver: look_here_for_me

您可以应用此定义并从另一个Pod发送一些流量,以便可以生成日志。我已经做到了:

  • deployment.yaml
  • apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx stackdriver: look_here_for_me replicas: 1 template: metadata: labels: app: nginx stackdriver: look_here_for_me spec: containers: - name: nginx image: nginx
  • $ kubectl run -it --rm --image=ubuntu ubuntu -- /bin/bash

之后,您可以转到:

  • $ apt update && apt install -y curl-> $ curl NGINX_POD_IP_ADDRESS/NONEXISTING(我使用的是新版本)

使用以下查询:

GCP Cloud Console (Web UI)

您应该也可以看到容器日志,它是Logging

NGINX_POD