V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
uSy62nMkdH
V2EX  ›  问与答

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

  •  
  •   uSy62nMkdH · 2023-02-24 08:05:50 +08:00 · 2144 次点击
    这是一个创建于 665 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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


    @yimiaoxiehou 一言难尽,纯业务开发,公司运维催不动也不放开权限只能自己摸石头过河了
    litchinn
        4
    litchinn  
       2023-02-24 08:28:36 +08:00
    容器是 docker 的话有 log-driver ,或者直接用 loki 插件,podman 我就不知道了
    litchinn
        5
    litchinn  
       2023-02-24 08:54:26 +08:00
    @litchinn 不过还是 fluentd 这种日志代理和 sidecar 的方式比较契合 k8s
    Ritter
        6
    Ritter  
       2023-02-24 10:01:50 +08:00
    同样在摸索这块 loki 配置好多好复杂😭
    kindjeff
        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
    kindjeff
        8
    kindjeff  
       2023-02-24 10:45:37 +08:00   ❤️ 1
    另外 loki 这一套已经相当一键了,官方提供的 helm chart 差不多直接 helm install 就能用。

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