防止停止从Kubernetes吊舱进行日志记录

防止停止从Kubernetes吊舱进行日志记录,kubernetes,google-kubernetes-engine,stackdriver,google-cloud-stackdriver,Kubernetes,Google Kubernetes Engine,Stackdriver,Google Cloud Stackdriver,考虑一个升级的Kubernetes部署,当旧的吊舱被停止而新的吊舱被启动时。我们有运行tomcat的pod,连接到MySQL数据库 一旦tomcat收到stop命令,它就开始停止应用程序。但是,仍有任务正在运行,并且与数据库的连接丢失会导致抛出大量异常。这没关系,因为应用程序不再执行任何操作。我的问题是,这种“垃圾邮件”会给我们的日志带来致命错误,并且很难区分哪些异常是相关的,哪些只是由应用程序停止引起的 其中一个例外是: java.lang.IllegalStateException:非法访问

考虑一个升级的Kubernetes部署,当旧的吊舱被停止而新的吊舱被启动时。我们有运行tomcat的pod,连接到MySQL数据库

一旦tomcat收到stop命令,它就开始停止应用程序。但是,仍有任务正在运行,并且与数据库的连接丢失会导致抛出大量异常。这没关系,因为应用程序不再执行任何操作。我的问题是,这种“垃圾邮件”会给我们的日志带来致命错误,并且很难区分哪些异常是相关的,哪些只是由应用程序停止引起的

其中一个例外是:

java.lang.IllegalStateException:非法访问:此web应用程序 实例已停止。无法加载 [sun.reflect.NativeMethodAccessorImpl]。以下堆栈跟踪是 出于调试目的以及尝试终止 导致非法访问的线程


有没有办法防止记录此类异常?一旦发送停止信号,是否可以立即停止日志记录?

您应该使用fluentd之类的工具来管理日志记录,然后对异常日志使用。kubernetes或容器引擎无法过滤标准输出上显示的内容。

kubernetes提供了对pod的生命周期回调以处理此类场景,您可以在pod关闭时执行自定义脚本以删除日志,例如

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      preStop:
        exec:
          command: [" your custom command to delete log entries"]

但如何将exclude filter设置为“忽略停止信号后记录的日志”?我认为那行不通。