【问题标题】:Google Stackdriver - how can I use my Kubernetes YAML labels for Stackdriver Log Query?Google Stackdriver - 如何使用我的 Kubernetes YAML 标签进行 Stackdriver 日志查询?
【发布时间】:2021-01-29 19:58:26
【问题描述】:

使用 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 的 pod。因此,我无法将这个 Stackdriver 视图与这个确切的查询一起使用 if 我部署了 my-app 的新修订版,因此有一个新 ID 并且当前查询中的 ID 变为 invalid em> 或无法定位。

现在我并不总是想在每次想要查看我的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

你可以猜到这不起作用,否则我没有理由写这个问题;) 知道我要做的事情是如何实现的吗?

【问题讨论】:

    标签: kubernetes google-cloud-platform yaml google-kubernetes-engine google-cloud-stackdriver


    【解决方案1】:

    知道我将要做的事情如何实现吗?

    是的!其实我已经准备了一个例子来展示整个过程:)

    假设:

    • 您有一个名为GKE 的集群:gke-label
    • 您启用了 Cloud Operations for 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 &amp;&amp; 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

    【讨论】:

    • 感谢您的提醒!但是我也发现使用查询更简单。我不需要关心那些随机的 pod ID,因为我可以进行如下查询:resource.labels.pod_name:"logistic-gate" 。省略 ID 并使用 : 作为运算符就像查询的 contains()
    猜你喜欢
    • 2018-10-22
    • 2017-12-14
    • 2018-08-23
    • 2019-04-13
    • 1970-01-01
    • 2016-09-16
    • 2019-02-21
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多