请问大家我这样用 loki 是否有问题?

2023-02-24 08:05:50 +08:00
 uSy62nMkdH

业务应用在私有云上 k8s 集群上部署,目前的问题是集群没做日志收集,开发看不到历史日志。
自己 k8s 知识欠缺,属于是一步一个坑。当前按照以下方式跑通了,但是不知道是不是最优解,所以想请教下大家。
(1)申请一块独立的存储卷(声明?)
(2)promtail 以守护进程运行,1.挂载存储卷到自己的目录下; 2.设置该目录为搜集日志目录;
(3)业务应用挂载同一块存储卷,并将日志写入;

为什么觉得不是最优解?
因为感觉好像不需要挂载存储卷也可以实现。

目前方式存在的问题?
挂载了同一块存储卷,promtail 读取路径是固定的,比如 /data/logs,导致应用写日志时,日志文件名不能重复,比如 A 、B 两个应用正常输出 log 文件名都叫 info.log,如重复,则会出现 B 覆盖 A 的情况;
这种方式就要求 A 、B 要以不同的文件名来命名,并且当 A 有多个实例的时候,还要以一定规则去命名或者可以取容器名?

2145 次点击
所在节点    问与答
15 条回复
zhenjiachen
2023-02-24 08:11:45 +08:00
我之前用的 promtail 加 sidecar 方式,然后日志文件名可以一样,但是在日志文件中新增了一个 application 的属性,loki 不收集 k8s 的日志,只做个服务。
现在用的是 slf4j 的 appender ,但是这个有延时,不像 promtail 能立马看到,主要是不需要启动两个容器。
然后每个命名空间一个 loki 服务,都不开手机 k8s 的日志
yimiaoxiehou
2023-02-24 08:14:07 +08:00
都 k8s 了,感觉 logstash 比较合适,loki 分析 log 文件的方式不太喜欢
uSy62nMkdH
2023-02-24 08:26:54 +08:00
@zhenjiachen 谢谢 我去看看这个 sidecar 方式


@yimiaoxiehou 一言难尽,纯业务开发,公司运维催不动也不放开权限只能自己摸石头过河了
litchinn
2023-02-24 08:28:36 +08:00
容器是 docker 的话有 log-driver ,或者直接用 loki 插件,podman 我就不知道了
litchinn
2023-02-24 08:54:26 +08:00
@litchinn 不过还是 fluentd 这种日志代理和 sidecar 的方式比较契合 k8s
Ritter
2023-02-24 10:01:50 +08:00
同样在摸索这块 loki 配置好多好复杂😭
kindjeff
2023-02-24 10:44:03 +08:00
你是想 daemonset 起进程,收集容器打印到 std 的日志吗?

如果是,你这个方案不太对的。例如你用 docker 或 containerd 做容器,肯定会在宿主机的 /var/lib/docker/containers 里有日志文件,不存在文件名相同的情况。

你需要做的是 daemonset 启动收集日志的工具( filebeat promtail 或者什么);挂载 hostpath 到这个工具进程容器的一个 path 上;工具收集这个 path
kindjeff
2023-02-24 10:45:37 +08:00
另外 loki 这一套已经相当一键了,官方提供的 helm chart 差不多直接 helm install 就能用。

如果你想按上面的一些楼的推荐换用 sidecar 或者 elk 那一套,我觉得只会让你更麻烦。
kindjeff
2023-02-24 10:47:25 +08:00
如果你是想要应用写日志到文件里,再收集这些文件,当然 sidecar 是好方案。但我觉得把日志打到 std 里然后 daemonset 收集更简单通用
joesonw
2023-02-24 12:19:42 +08:00
收个日志为什么要 sidecar ,kingdjeff 的是正常集群方案,用 DS 部署+挂载 hostpath 来采集容器日志文件。
chana71
2023-02-24 13:08:46 +08:00
收集 std 和收集像 Java 应用各种 appender 对应多个日志文件 是不方案不太一样
idblife
2023-02-24 13:21:50 +08:00
filebeat-->kafka-->es/graylog
uSy62nMkdH
2023-02-24 13:40:13 +08:00
@kindjeff 非常感谢解惑
我们实际上是采购了某厂的一个容器云管理平台来维护整个 k8s 集群的,刚才尝试跟运维人员沟通了下,感觉他们也是一知半解专业性很差,宿主机地址及权限也不可能开放给我的。
基于现实这种情况,我的这个方案有没有什么技术上的风险呢?没有的话我就准备曲线救国了 😭
kindjeff
2023-02-24 14:00:05 +08:00
@uSy62nMkdH #13 云厂商是否提供了日志收集服务呢,是的话直接用他们的方案对你来说会方便点。另外你只要有 k8s 的权限就好了,启动 daemonset 是不需要知道具体有哪些宿主机、也不需要 ssh 上去的。
uSy62nMkdH
2023-02-24 14:19:49 +08:00
@kindjeff 云厂商确实有提供一个 es ,但是只保留 N 天,这一点满足不了需求。daemonset 目前是部署成功了,只是不知道日志在宿主机上的地址,因此整个方案卡主了。我主贴说的其实就是单独申请一块磁盘,应用写入和 daemonset 读取都是同一个。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/918714

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX