【 TiDB 使用环境】生产环境
【 TiDB 版本】5.4.3
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
因为部署在k8s里面,当tidb节点重启后,slowlog就会丢失。有什么方法能保留下来吗?
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
【 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
对,您这个说的是一方面。比如tidb的一些日志打印到了stdout、stderr,这个能通过挂载的方式保存下么。只能再单独收集吗,比如filebeat之类的工具
tidb节点重启是容器重启了吗?slowlog没有持久化存储吧。
能啊,就吧TiDB当成普通容器就好了啊
log 可以持久化的。
是的,这个在已经部署完成的集群中,如何添加呢
不是太了解kubernetes,要去查具体的文档了。
单独挂在pvc,然后绑定到对应tidb指定的slowlog目录上
也可以部署 k8s log 采集的组件,比如 https://github.com/vectordotdev/vector
这样的方式会更加灵活,且不需要额外给 slow log 绑定 pvc 这样的运维负担。
重启就会丢失是因为日志没有做持久化。
如果需要保留的话,可以将日志挂载到本地,调整一下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,格式基本上是固定的,需要自己拼一下
看下log.slow-query-file配置参数
log是落地的,怎么会重启就没有了呢?
没配置持久化
配置卷单独持久化
k8s 默认日志都是输出到stdout里的,没采集就丢了。
如果是故障重启,用看看上一次的日志。
kubectl logs xxx -n xxx -c slow-log --previous