V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
GGGG430
V2EX  ›  Linux

tail 实时打印日志问题

  •  
  •   GGGG430 · 2018-06-07 10:11:05 +08:00 · 4968 次点击
    这是一个创建于 2396 天前的主题,其中的信息可能已经有所发展或是发生改变。

    tail -f /path/to/logs/* |awk '/error/ && /warning/'
    tail -f 加上通配符可以看到 logs 目录下所有文件的变更, 但有个缺陷就是之后 logs 目录下新增的文件的打印不到的, 也就是只会监视在 tail 执行时该目录下的所有文件, 之后新增的文件的变更是看不到的, 请问各位大佬是如何解决的呢?

    21 条回复    2018-06-14 14:41:32 +08:00
    Firxiao
        1
    Firxiao  
       2018-06-07 10:25:56 +08:00
    GGGG430
        2
    GGGG430  
    OP
       2018-06-07 12:37:09 +08:00
    @Firxiao 因为是在线上服务器, 不便于新编译文件, 有其他原生命令组合能实现吗
    mattx
        3
    mattx  
       2018-06-07 12:42:19 +08:00
    是否能先用 inotifywait 来监听变动文件和新建文件,然后在 tail ?
    zvving
        4
    zvving  
       2018-06-07 12:42:51 +08:00 via Android
    太累,ELK 试试
    lululau
        5
    lululau  
       2018-06-07 12:43:53 +08:00
    原生的命令有啊,gcc,perl, python 都可以,确定就是需要一份代码作为输入,这个代码需要你来写

    如果连个工具都给装,是我的话,对不起,没有工具,这活儿老子干不了

    最后,人肉分析日志当然是 lnav
    shiznet
        6
    shiznet  
       2018-06-07 12:44:48 +08:00
    原始需求是什么?
    lululau
        7
    lululau  
       2018-06-07 12:45:24 +08:00
    一激动,错漏打几个字, “确定” -> “缺点”,“都给装” -> “都不给装”
    GGGG430
        8
    GGGG430  
    OP
       2018-06-07 15:52:14 +08:00
    @zvving ELK 只监视了部分 log, 且有时差
    @lululau 线上是集群机器, 非常多, 不可能每个都装的, 只能用最原始的方法
    @shiznet 就是实时监视所有已存在的以及未来新增的日志
    ceyes
        9
    ceyes  
       2018-06-07 17:18:31 +08:00
    janic716
        10
    janic716  
       2018-06-07 17:23:58 +08:00
    tail -F
    了解一下
    GGGG430
        11
    GGGG430  
    OP
       2018-06-07 17:30:14 +08:00 via iPhone
    @janic716 已了解,不行
    jennifertxwoodma
        12
    jennifertxwoodma  
       2018-06-07 17:48:53 +08:00   ❤️ 1
    tailf 了解一下
    GGGG430
        13
    GGGG430  
    OP
       2018-06-07 17:54:51 +08:00 via iPhone
    @jennifertxwoodma ...并不能
    GGGG430
        14
    GGGG430  
    OP
       2018-06-07 18:00:30 +08:00
    @ceyes
    tail -f ../../logs/* | grep --line-buffered '.*' | while read LINE0
    do
    echo "${LINE0}";
    done

    然后在 logs 目录下执行如 echo asdf>xx
    还是不行
    GGGG430
        15
    GGGG430  
    OP
       2018-06-07 18:02:32 +08:00
    比如我的日志名是以小时区分的(即每过一小时用新文件存日志), 这样我就得重新执行 tail, 有什么办法可以一直监视新文件吗
    cxbig
        16
    cxbig  
       2018-06-07 19:01:24 +08:00
    如果不同 log 文件的格式一致的话,ELK 还是很好用的。
    如果不是,那需要针对每一种不同,做特殊配置。
    janic716
        17
    janic716  
       2018-06-07 19:18:22 +08:00
    @GGGG430 常用的方法是, 日志永远往一个固定的文件名输入, 然后用定时任务到了时间点(小时或天) 自动做 rotate( 像 java 的 log4j 自带 rotate), 再结合 tail -F, 我用 flume 收集日志就是这么做的
    omph
        18
    omph  
       2018-06-08 00:45:19 +08:00
    楼上的办法挺好,把日志文件名固定住
    然后新建空日志文件,用 tail 打开监控
    服务器把日志写到这些同名文件里
    szetrov
        19
    szetrov  
       2018-06-08 08:12:10 +08:00 via Android
    呃,什么集群,一般难道不是管理节点编译安装一下然后直接 PBS 提交作业么。
    Kangvcar
        20
    Kangvcar  
       2018-06-08 08:50:46 +08:00
    tailf
    了解一下
    niaobulashi
        21
    niaobulashi  
       2018-06-14 14:41:32 +08:00
    tail -f 文件名
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2793 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:36 · PVG 10:36 · LAX 18:36 · JFK 21:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.