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 云操作(日志记录)
- 您有一个名为
nginx
的 Deployment
和以下 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
:
使用 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 云操作(日志记录)
- 您有一个名为
nginx
的Deployment
和以下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
: