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

Google Stackdriver - how can I use my Kubernetes YAML labels for Stackdriver Log Query?

使用 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,当前查询中的 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

如您所料,这是行不通的,否则我就没有理由写这个问题了;) 知道如何实现我要做的事情吗?

Any idea how the thing I am about to do can be achieved?

是的!事实上,我准备了一个例子来向你展示整个过程:)

让我们假设:

  • 您有一个名为 GKE 的集群:gke-label
  • 您启用了 GKE 云操作(日志记录)
  • 您有一个名为 nginxDeployment 和以下 label
    • stackdriver: look_here_for_me

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

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

  • $ 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(我用的是新版本)

使用以下查询:

resource.type="k8s_container"
resource.labels.cluster_name="gke-label"
-->labels."k8s-pod/stackdriver"="look_here_for_me"

您应该也能看到容器日志 label: