日志

本页包含一些关于日志的常见问题。

如何将日志存储改为外部 Elasticsearch 并关闭内部 Elasticsearch

如果您使用的是 KubeSphere 内部的 Elasticsearch,并且想把它改成您的外部 Elasticsearch,请按照以下步骤操作。如果您还没有启用日志系统,请参考 KubeSphere 日志系统直接设置外部 Elasticsearch。

  1. 首先,请执行以下命令更新 KubeKey 配置:

    1. kubectl edit cc -n kubesphere-system ks-installer
  2. es.elasticsearchDataXXXes.elasticsearchMasterXXXstatus.logging 的注释取消,将 es.externalElasticsearchHost 设置为 Elasticsearch 的地址,将 es.externalElasticsearchPort 设置为其端口号。以下示例供您参考:

    1. apiVersion: installer.kubesphere.io/v1alpha1
    2. kind: ClusterConfiguration
    3. metadata:
    4. name: ks-installer
    5. namespace: kubesphere-system
    6. ...
    7. spec:
    8. ...
    9. common:
    10. es:
    11. # elasticsearchDataReplicas: 1
    12. # elasticsearchDataVolumeSize: 20Gi
    13. # elasticsearchMasterReplicas: 1
    14. # elasticsearchMasterVolumeSize: 4Gi
    15. elkPrefix: logstash
    16. logMaxAge: 7
    17. externalElasticsearchHost: <192.168.0.2>
    18. externalElasticsearchPort: <9200>
    19. ...
    20. status:
    21. ...
    22. # logging:
    23. # enabledTime: 2020-08-10T02:05:13UTC
    24. # status: enabled
    25. ...
  3. 重新运行 ks-installer

    1. kubectl rollout restart deploy -n kubesphere-system ks-installer
  4. 运行以下命令删除内部 Elasticsearch,请确认您已备份内部 Elasticsearch 中的数据。

    1. helm uninstall -n kubesphere-logging-system elasticsearch-logging
  5. 如果启用了 Istio,需要修改 Jaeger 配置。

    1. $ kubectl -n istio-system edit jaeger
    2. ...
    3. options:
    4. es:
    5. index-prefix: logstash
    6. server-urls: http://elasticsearch-logging-data.kubesphere-logging-system.svc:9200 # 修改为外部地址

如何在启用 X-Pack Security 的情况下将日志存储改为 Elasticsearch

KubeSphere 暂不支持启用 X-Pack Security 的 Elasticsearch 集成,此功能即将推出。

如何设置审计、事件、日志及 Istio 日志信息的保留期限

KubeSphere v3.4 还支持您设置日志、审计、事件及 Istio 日志信息的保留期限。

您需要更新 KubeKey 配置并重新运行 ks-installer

  1. 执行以下命令:

    1. kubectl edit cc -n kubesphere-system ks-installer
  2. 在 YAML 文件中,如果您只想修改日志的保存期限,可以直接修改 logMaxAge 的默认值。如果您想设置审计、事件及 Istio 日志信息的保留期限,需要添加参数 auditingMaxAgeeventMaxAgeistioMaxAge,并分别设置它们的保存期限,如下例所示:

    1. apiVersion: installer.kubesphere.io/v1alpha1
    2. kind: ClusterConfiguration
    3. metadata:
    4. name: ks-installer
    5. namespace: kubesphere-system
    6. ...
    7. spec:
    8. ...
    9. common:
    10. es: # Storage backend for logging, events and auditing.
    11. ...
    12. logMaxAge: 7 # Log retention time in built-in Elasticsearch. It is 7 days by default.
    13. auditingMaxAge: 2
    14. eventMaxAge: 1
    15. istioMaxAge: 4
    16. ...
  3. 重新运行 ks-installer

    1. kubectl rollout restart deploy -n kubesphere-system ks-installer

无法使用工具箱找到某些节点上工作负载的日志

如果您采用多节点安装部署 KubeSphere,并且使用符号链接作为 Docker 根目录,请确保所有节点遵循完全相同的符号链接。日志代理以守护进程集的形式部署到节点上。容器日志路径的任何差异都可能导致该节点上日志收集失败。

若要找出节点上的 Docker 根目录路径,您可以运行以下命令。请确保所有节点都适用相同的值。

  1. docker info -f '{{.DockerRootDir}}'

工具箱中的日志查询页面在加载时卡住

如果您发现日志查询页面在加载时卡住,请检查您所使用的存储系统。例如,配置不当的 NFS 存储系统可能会导致此问题。

工具箱显示今天没有日志记录

请检查您的日志存储卷是否超过了 Elasticsearch 的存储限制。如果是,请增加 Elasticsearch 的磁盘存储卷容量。

在工具箱中查看日志时,报告内部服务器错误

如果您在工具箱中看到内部服务器错误,可能有以下几个原因:

  • 网络分区
  • 无效的 Elasticsearch 主机和端口
  • Elasticsearch 健康状态为红色

如何让 KubeSphere 只收集指定工作负载的日志

KubeSphere 的日志代理由 Fluent Bit 所提供,您需要更新 Fluent Bit 配置来排除某些工作负载的日志。若要修改 Fluent Bit 输入配置,请运行以下命令:

  1. kubectl edit input -n kubesphere-logging-system tail

更新 Input.Spec.Tail.ExcludePath 字段。例如,将路径设置为 /var/log/containers/*_kube*-system_*.log,以排除系统组件的全部日志。

有关更多信息,请参见 Fluent Bit Operator

在查看容器实时日志的时候,控制台上看到的实时日志要比 kubectl log -f xxx 看到的少

主要有以下几个原因:

  • 当实时去查看容器日志时,Kubernetes 是分 chunk 形式返回,Kubernetes 大概 2 分钟左右会返回一次数据,比较慢
  • 未开启‘实时查看’时看到的末尾部分,在实时查看时,被划分在下次返回的部分中,现象看起来像是日志缺失