Logging Kubernetes(GKE)测井解决方案
我希望从kubernetes的一个pod中捕获两个用例的日志:Logging Kubernetes(GKE)测井解决方案,logging,kubernetes,google-kubernetes-engine,monitoring,sidecar,Logging,Kubernetes,Google Kubernetes Engine,Monitoring,Sidecar,我希望从kubernetes的一个pod中捕获两个用例的日志: 实时->我现在使用的是kubectl日志-- 非实时->使用stackdriver传送到bigquery 对于这两种用例,一切都正常,但是,当容器由于错误提前退出时,我会丢失日志(即stackdriver没有足够快地拾取日志) 是否在某处记录了此延迟?假设stackdriver速度不够快,是否有其他日志记录解决方案更有效?我正在考虑使用一个能够捕获日志的sidecar容器,但我不确定这是否是最好的方法。GKE上的日志堆栈用于从 这不
kubectl日志--
stackdriver
传送到bigquery
是否在某处记录了此延迟?假设stackdriver速度不够快,是否有其他日志记录解决方案更有效?我正在考虑使用一个能够捕获日志的sidecar容器,但我不确定这是否是最好的方法。GKE上的日志堆栈用于从 这不是您在使用
kubectl日志时所做的:
当您像在基本日志示例中一样运行kubectl logs
时,节点上的kubelet将处理请求并直接从日志文件读取,并在响应中返回内容
您发出的听起来好像Stackdriver不够快,但是,由于某种原因,您的容器运行时没有将日志写入前面提到的日志文件,fluentd在导出日志之前会在该日志文件中拾取日志
在更改日志记录体系结构之前,您可能希望,甚至是为了以后使用
如果这不适合你的需要,你可以试试
至于侧车方法,虽然它是完全可行的,但警告这种方法存在一些缺点:
在sidecar容器中使用日志代理可能会导致大量资源消耗。此外,您将无法使用kubectl logs命令访问这些日志,因为它们不受kubelet的控制
最后,您还应该考虑到所有以前的信息依赖于“强”容器到达创建阶段的事实,并且它能够写入日志文件>。如果您的容器有“提前退出”,也就是说,那么日志可能根本就不存在,Stackdriver将永远不会拾取它们
编辑:
<>请注意,您还需要考虑一个失败的容器需要同时写入两个输出,即“代码> STDUT/<代码>和<代码> STDRR 。如果它“静默”失败,也不会反映在Stackdriver中。我假设您的POD有重启策略:始终。您可以尝试将其设置为从不
,以便有时间获取日志。RepilcaSet控制器将分配一个新的Pod,因此这对您来说应该不是问题。试试看,让我知道你是怎么做的go@Serge你能在这里再详细说明一下吗?“让您有时间获取日志”是什么意思?使用restartPolicy:Always
,您的容器在失败时总是会重新启动(具有指数退避)。如果禁用此选项,容器将不会在pods中重新启动。这将留下一段时间来测试您的理论-由于时间/速度问题,日志正在丢失。