业务应用在私有云上 k8s 集群上部署,目前的问题是集群没做日志收集,开发看不到历史日志。
自己 k8s 知识欠缺,属于是一步一个坑。当前按照以下方式跑通了,但是不知道是不是最优解,所以想请教下大家。
(1)申请一块独立的存储卷(声明?)
(2)promtail 以守护进程运行,1.挂载存储卷到自己的目录下; 2.设置该目录为搜集日志目录;
(3)业务应用挂载同一块存储卷,并将日志写入;
为什么觉得不是最优解?
因为感觉好像不需要挂载存储卷也可以实现。
目前方式存在的问题?
挂载了同一块存储卷,promtail 读取路径是固定的,比如 /data/logs,导致应用写日志时,日志文件名不能重复,比如 A 、B 两个应用正常输出 log 文件名都叫 info.log,如重复,则会出现 B 覆盖 A 的情况;
这种方式就要求 A 、B 要以不同的文件名来命名,并且当 A 有多个实例的时候,还要以一定规则去命名或者可以取容器名?
1
zhenjiachen 2023-02-24 08:11:45 +08:00 via iPhone
我之前用的 promtail 加 sidecar 方式,然后日志文件名可以一样,但是在日志文件中新增了一个 application 的属性,loki 不收集 k8s 的日志,只做个服务。
现在用的是 slf4j 的 appender ,但是这个有延时,不像 promtail 能立马看到,主要是不需要启动两个容器。 然后每个命名空间一个 loki 服务,都不开手机 k8s 的日志 |
2
yimiaoxiehou 2023-02-24 08:14:07 +08:00
都 k8s 了,感觉 logstash 比较合适,loki 分析 log 文件的方式不太喜欢
|
3
uSy62nMkdH OP |
4
litchinn 2023-02-24 08:28:36 +08:00
容器是 docker 的话有 log-driver ,或者直接用 loki 插件,podman 我就不知道了
|
6
Ritter 2023-02-24 10:01:50 +08:00
同样在摸索这块 loki 配置好多好复杂😭
|
7
kindjeff 2023-02-24 10:44:03 +08:00 1
你是想 daemonset 起进程,收集容器打印到 std 的日志吗?
如果是,你这个方案不太对的。例如你用 docker 或 containerd 做容器,肯定会在宿主机的 /var/lib/docker/containers 里有日志文件,不存在文件名相同的情况。 你需要做的是 daemonset 启动收集日志的工具( filebeat promtail 或者什么);挂载 hostpath 到这个工具进程容器的一个 path 上;工具收集这个 path |
8
kindjeff 2023-02-24 10:45:37 +08:00 1
另外 loki 这一套已经相当一键了,官方提供的 helm chart 差不多直接 helm install 就能用。
如果你想按上面的一些楼的推荐换用 sidecar 或者 elk 那一套,我觉得只会让你更麻烦。 |
9
kindjeff 2023-02-24 10:47:25 +08:00 1
如果你是想要应用写日志到文件里,再收集这些文件,当然 sidecar 是好方案。但我觉得把日志打到 std 里然后 daemonset 收集更简单通用
|
10
joesonw 2023-02-24 12:19:42 +08:00 via iPhone
收个日志为什么要 sidecar ,kingdjeff 的是正常集群方案,用 DS 部署+挂载 hostpath 来采集容器日志文件。
|
11
chana71 2023-02-24 13:08:46 +08:00
收集 std 和收集像 Java 应用各种 appender 对应多个日志文件 是不方案不太一样
|
12
idblife 2023-02-24 13:21:50 +08:00
filebeat-->kafka-->es/graylog
|
13
uSy62nMkdH OP @kindjeff 非常感谢解惑
我们实际上是采购了某厂的一个容器云管理平台来维护整个 k8s 集群的,刚才尝试跟运维人员沟通了下,感觉他们也是一知半解专业性很差,宿主机地址及权限也不可能开放给我的。 基于现实这种情况,我的这个方案有没有什么技术上的风险呢?没有的话我就准备曲线救国了 😭 |
14
kindjeff 2023-02-24 14:00:05 +08:00
@uSy62nMkdH #13 云厂商是否提供了日志收集服务呢,是的话直接用他们的方案对你来说会方便点。另外你只要有 k8s 的权限就好了,启动 daemonset 是不需要知道具体有哪些宿主机、也不需要 ssh 上去的。
|
15
uSy62nMkdH OP @kindjeff 云厂商确实有提供一个 es ,但是只保留 N 天,这一点满足不了需求。daemonset 目前是部署成功了,只是不知道日志在宿主机上的地址,因此整个方案卡主了。我主贴说的其实就是单独申请一块磁盘,应用写入和 daemonset 读取都是同一个。
|