用k8s部署的tidb集群,每次重启slowlog就没了

【 TiDB 使用环境】生产环境
【 TiDB 版本】5.4.3

【复现路径】做过哪些操作出现的问题

【遇到的问题:问题现象及影响】
因为部署在k8s里面,当tidb节点重启后,slowlog就会丢失。有什么方法能保留下来吗?

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面

【附件:截图/日志/监控】

感觉用TiDB Operator部署的k8s集群,相关的日志都不知到从哪里去看

可以看下之前的讨论,k8s部署tidb

不太懂k8s,slow log应该是单独的container

Containers:
  slowlog:
    Container ID:  containerd://7a94c4bce915d0ca1aa44ab85085d915767aa80ec44bfb54d31e160d4cebde09
    Image:         alpine:3.16.0
    Image ID:      docker.io/library/alpine@sha256:686d8c9dfa6f3ccfc8230bc3178d23f84eeaf7e457f36f271ab1acc53015037c
    Port:          <none>
    Host Port:     <none>
    Command:
      sh
      -c
      touch /var/log/tidb/slowlog; tail -n0 -F /var/log/tidb/slowlog;
    State:          Running
      Started:      Mon, 15 Jan 2024 14:59:09 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/log/tidb from slowlog (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-gmns5 (ro)

应该要单独配置卷才能持久化下来

Volumes:
  annotations:
    Type:  DownwardAPI (a volume populated by information about the pod)
    Items:
      metadata.annotations -> annotations
  config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      tidb1-tidb-6662316
    Optional:  false
  startup-script:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      tidb1-tidb-6662316
    Optional:  false
  slowlog:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
  kube-api-access-gmns5:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
1 个赞

通过工具,缩容tiflash,dashboard里面,到现在状态都一直不对,实际的容器已经被干掉了。

对,您这个说的是一方面。比如tidb的一些日志打印到了stdout、stderr,这个能通过挂载的方式保存下么。只能再单独收集吗,比如filebeat之类的工具

tidb节点重启是容器重启了吗?slowlog没有持久化存储吧。

能啊,就吧TiDB当成普通容器就好了啊

log 可以持久化的。

是的,这个在已经部署完成的集群中,如何添加呢

不是太了解kubernetes,要去查具体的文档了。

单独挂在pvc,然后绑定到对应tidb指定的slowlog目录上

也可以部署 k8s log 采集的组件,比如 https://github.com/vectordotdev/vector
这样的方式会更加灵活,且不需要额外给 slow log 绑定 pvc 这样的运维负担。

1 个赞

重启就会丢失是因为日志没有做持久化。
如果需要保留的话,可以将日志挂载到本地,调整一下volumes跟volumeMounts。

slow log 持久化参考 https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/configure-a-tidb-cluster#配置-tidb-慢查询日志持久卷

storageVolumes 注意事项:

additionalVolumes 注意事项: 因为所有 tidb pod 都会挂这块盘,所以示例中是 nfs 共享盘

建议: 用日志工具或服务把日志及时采集走,slow log 是多行代表一条 sql,格式基本上是固定的,需要自己拼一下

1 个赞

看下log.slow-query-file配置参数

1 个赞

log是落地的,怎么会重启就没有了呢?

没配置持久化

1 个赞

配置卷单独持久化

k8s 默认日志都是输出到stdout里的,没采集就丢了。
如果是故障重启,用看看上一次的日志。
kubectl logs xxx -n xxx -c slow-log --previous