我已阅读到默认情况,GKE上的群集将所有日志写入堆栈驱动程序。在GKE UI上,我可以看到所有部署的容器日志,但是希望通过编程方式从API获取这些日志。
我尝试做类似gcloud logging read "resource.labels.pod_id="<pod-id>""
的操作,但是什么也没返回。
是否需要做一些特殊的事情才能启用群集上的日志记录?如果没有,如何访问特定部署/吊舱/容器的日志?
此外,这些日志是否持久存在?就像这样,当部署终止时,我仍然可以访问这些日志吗?
答案 0 :(得分:1)
您可以通过多种方法从Stackdriver中读取GKE
吊舱日志。其中一些是:
阅读日志
要在“日志记录”中读取日志条目,可以执行以下任一操作:
- 使用Google Cloud Console中的日志查看器。
- 通过客户端库为您的编程语言调用Logging API。
- 直接调用Logging API REST端点。请参阅Logging API参考文档。
使用Cloud SDK。有关更多信息,请参见gcloud日志记录命令行界面。
至:
我需要做一些特殊的事情来启用集群登录吗?如果没有,如何访问特定部署/吊舱/容器的日志?
请参考:Cloud.google.com: Logging: Access control
在下面回答:
此外,这些日志是否持久存在?就像这样,当部署终止时,我仍然可以访问这些日志吗?
是的,即使删除了部署,您仍然可以访问此日志。即使删除群集,您仍然可以访问日志。存储在Stackdriver中的日志具有 retention 策略,该策略将在设置的时间段内存储日志。 请参考:
请看下面的示例,该示例显示了如何使用gcloud
命令访问日志:
步骤:
Deployment
,它将日志发送到Stackdriver gcloud
从Stackdriver获取日志请遵循Google Cloud Platform指南以生成Deployment
,它将发送数据到Stackdriver:
以上部署导出的日志将存储在Stackdriver中。它的示例应如下所示:
{
insertId: "REDACTED"
labels: {
k8s-pod/pod-template-hash: "545464fb5"
k8s-pod/run: "custom-metric-sd"
}
logName: "projects/REDACTED/logs/stderr"
receiveTimestamp: "2020-05-26T10:17:16.161949129Z"
resource: {
labels: {
cluster_name: "gke-logs"
container_name: "sd-dummy-exporter"
location: "ZONE"
namespace_name: "default"
pod_name: "custom-metric-sd-545464fb5-2rdvx"
project_id: "REDACTED"
}
type: "k8s_container"
}
severity: "ERROR"
textPayload: "2020/05/26 10:17:10 Finished writing time series with value: 0xc420015290
"
timestamp: "2020-05-26T10:17:10.356684667Z"
}
上面的日志条目将有助于创建gcloud
命令以仅从Stackdriver中获取指定的日志。
gcloud
从Stackdriver获取日志正如您所指出的:
我试图做类似gcloud的日志读取“ resource.labels.pod_id =“”“,但未返回任何内容。
什么都不返回的事实很可能与您使用的命令找不到请求的资源有关。
要从Stackdriver获取此日志,请调用以下命令:
$ gcloud logging read "resource.type=k8s_container AND resource.labels.container_name=sd-dummy-exporter"
将以上命令划分为较小的部分:
resource.type=k8s_container
-它会获取类型为k8s_container
的日志resource.labels.container_name=XYZ
-它会获取具有指定container_name
的日志。 这部分内容与前面提到的示例单数日志条目直接相关。
提示:
resources.labels.container_name
可用于从多个容器中收集日志,因为可以用pod_name
引用特定容器。