问题描述
使用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
: