国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

別小看tail 命令,它難倒了技術總監

系統 Linux
tail命令能夠看到日志的滾動,非常方便。于是xjjdog想,既然我們能夠用這個命令,看到所有的日志,那能不能使用tail命令,做日志收集呢?

[[350507]]

 本文轉載自微信公眾號「小姐姐味道」,作者小姐姐養的狗 。轉載本文請聯系小姐姐味道公眾號。 

tail命令能夠看到日志的滾動,非常方便。于是xjjdog想,既然我們能夠用這個命令,看到所有的日志,那能不能使用tail命令,做日志收集呢?

想象歸想象,如果你想要一個快速的實時日志收集工具,那tail確實是個非常棒的工具。它比什么flume、logstatsh,比什么filebeat之類的,快捷的多。事實上,在工具缺乏的舊年代,我就曾經這么干過,而且它工作的很好。

下面是一段使用Java語言書寫的代碼。我們可以按行讀取日志,然后使用自己喜歡的語言,做任何事情。

  1. import java.io.BufferedReader; 
  2. import java.io.InputStreamReader; 
  3.  
  4. public class TailReader { 
  5.     public static void main(String[] args) throws Exception { 
  6.         ProcessBuilder ps = new ProcessBuilder("tail""-f""/tmp/tail0"); 
  7.         //把錯誤輸出也打印 
  8.         ps.redirectErrorStream(true); 
  9.         Process process = ps.start(); 
  10.  
  11.         //持續讀取tail的輸出 
  12.         try (BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()))) { 
  13.             String line; 
  14.             while ((line = in.readLine()) != null) { 
  15.                 setLogToKafka(line); 
  16.                 //注意這里不要產生異常,否則會打斷while循環 
  17.             } 
  18.         } 
  19.     } 
  20.  
  21.     //模擬發送到kafka,我們這里只簡單的打印出來 
  22.     static void setLogToKafka(String line) { 
  23.         System.out.println(line); 
  24.     } 

主要的思想,就是使用Java的Process啟動一個子tail進程,一直監控著文件的輸出。然后把標準輸出和標準錯誤流,全部定向到BufferedReader中。接下來,你能做你想要做的任何事。

這有一定的風險,假如tail命令被殺掉了,我們的Java程序就失去了作用。

程序很簡單,但xjjdog在這里討論的卻不是這個簡單的收集程序,而是tail命令的一些有趣的特性,你可以從中一窺一些日志收集工具對文件的特殊處理。

你知道tail -f和tail -F的區別么?

在回答這個問題之前,我們先回憶一下,Java常用的日志框架,對日志的處理。

 

  1. <configuration> 
  2.   <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"
  3.     <!-- Support multiple-JVM writing to the same log file --> 
  4.     <prudent>true</prudent> 
  5.     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
  6.       <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
  7.       <maxHistory>30</maxHistory>  
  8.       <totalSizeCap>3GB</totalSizeCap> 
  9.     </rollingPolicy> 
  10.  
  11.     <encoder> 
  12.       <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
  13.     </encoder> 
  14.   </appender>  
  15.  
  16.   <root level="DEBUG"
  17.     <appender-ref ref="FILE" /> 
  18.   </root> 
  19. </configuration> 

上面的配置,將在每晚凌晨的時候,滾動形成一個新的文件。

那這個滾動,是如何做的呢?我們可以收工模擬這個過程。

  1. mv run.log run.2020-11-02.log 
  2. touch run.log 

測試一下

文件滾動,會生成新的文件,那tail命令還能跟蹤到么?

我們來測試一下。

第一步,創建要監控的文件

  1. touch /tmp/tail0 

第二步,啟動我們的Java代碼

第三步,生成一個不間斷的流

  1. watch -n 1  'echo `date` >> /tmp/tail0 ' 

上面的命令每隔1秒鐘,往我們的文件中打印一下當前的日期,可以看到Java端已經收到了這些數據。

第四步,模擬文件滾動

  1. mv /tmp/tail0 /tmp/tail.bak 
  2. touch /tmp/tail0 

此時,我們可以看到,Java端此時已經接受不到數據了。

Why?

為了看到這是為什么,我們使用兩個命令來看一下進程的一些狀態。

首先,使用ps命令,查看當前的tail進程。

  1. ps -ef|grep tail 
  2.   501 21374 21373   0  1:51PM ??         0:00.01 tail -f /tmp/tail0 

這正是我們的命令。

我們使用lsof命令去查看這個進程所關聯的文件。

  1. lsof -p 21374 | awk '{print $4 "\t"  $9}' 
  2. FD NAME 
  3. cwd /tmp/ 
  4. txt /usr/bin/tail 
  5. txt /usr/lib/dyld 
  6. 3r /private/tmp/tail.bak 

我們看到tail進程所監控的文件,其實是tail.bak文件,已經和tail命令沒什么關系了。

我們嘗試像tail.bak輸入一點內容。

  1. echo "haha: xjjdog, i am from tail.bak" >> /tmp/tail.bak 

此時如我們所愿,Java進程有反應了,正常輸出了這句話。

怎么辦?

就如同我們問題中問的一樣,把tail -f換成tail -F就可以了。

tail -f的意思是,根據文件描述符進行追蹤。

tail -F的意思是,根據文件名進行追蹤,它會有重試的動作。

所以,我們的日志收集程序,毫無疑問是根據日志名稱追蹤的,應該把f改成F。

End

既然知道了這些小區別,我們就對日常工作中遇到的一些靈異問題有了解釋。

大家都知道rm命令,能夠刪除一個文件。如果有這個文件,正在被其他進程所使用,那這些文件你看起來像是刪掉了,但它的內容卻不釋放。

  1. lsof | grep deleted 

上面這個命令,能夠看到這些失控的文件。一般你kill掉相應的進程,這些句柄也就釋放了。但你刪除這些文件的本意,就是為了避免重啟應用,這可真讓人糾結。

  1. cat /dev/null > logpath 

所以我們在刪除文件的時候,一般不會使用rm,而應該使用重定向符號。將萬物皆空的/dev/null,發向它們。

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。

 

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2021-01-15 08:00:31

日志技術Log4j

2021-01-07 08:23:02

日志

2021-07-29 06:28:13

網絡網工網絡中斷

2023-09-20 08:03:32

JavaScript編程語言

2019-09-01 23:28:50

命令行Linux系統性能監控

2020-02-25 22:52:42

工具代碼開發

2016-12-19 13:18:19

思科

2022-08-28 16:20:44

模型數學

2024-06-11 08:17:00

2023-03-24 10:07:46

tail命令

2022-09-07 07:08:28

架構應用場景數據流

2025-04-27 04:02:00

機器學習模型網絡

2009-04-05 10:26:47

2020-02-25 17:03:29

技術研發指標

2013-11-14 09:58:23

紅帽redhat

2021-08-20 10:41:47

開發工具代碼

2020-09-01 09:31:38

程序員技能開發者

2024-06-06 12:50:55

2025-08-26 03:00:00

ApacheJavaSpring

2009-05-26 16:43:41

虛擬化CIOIT
點贊
收藏

51CTO技術棧公眾號

欧美性猛交久久久乱大交小说 | 国产精品性做久久久久久| 欧美专区福利在线| 精品欧美一区二区三区在线观看 | 中文字幕一区av| 大荫蒂性生交片| 美女黄色成人网| 精品国产一区二区三区久久久久久| 亚洲欧美成人vr| 国语自产精品视频在免费| 四虎地址8848精品| 日韩资源在线观看| 偷拍中文亚洲欧美动漫| 亚洲精品视频在线观看视频| 变态调教一区二区三区| 亚洲国产精品成人va在线观看| 中文字幕中文字幕在线中高清免费版| 欧美群妇大交群中文字幕| 91美女视频在线| 日韩欧美综合一区| av男人的天堂在线观看| 亚洲精品456在线播放狼人| 国内高清免费在线视频| 亚洲第一视频在线观看| 在线播放高清视频www| 亚洲欧美国产va在线影院| 美女av在线免费看| 在线亚洲欧美视频| 国产日韩一区二区三免费高清| 久久在线观看视频| 精品国产影院| 国产福利精品在线| 欧美黄在线观看| 蜜桃成人在线| 激情图区综合网| 成年人视频网站免费观看| 亚洲欧美综合色| 精品999视频| 777奇米成人网| 午夜影院一区| 欧美国产亚洲视频| 成人免费观看49www在线观看| 久久频这里精品99香蕉| 99热在线成人| 欧美另类高清视频在线| 国产乱一区二区| 精品日韩久久久| 日本久久电影网| 美女福利一区二区| 人人爽久久涩噜噜噜网站| 激情亚洲成人| 欧美乱大交xxxxx潮喷l头像| 亚洲精品ww久久久久久p站| 国产网站在线免费观看| 中文字幕日韩精品在线| 第一社区sis001原创亚洲| 亚洲v国产v| 国产精品国产三级国产| 欧美高清视频| 欧美精品一二区| 激情国产一区| 日日碰狠狠添天天爽超碰97| 黄色一区二区在线观看| 精品91久久| 国产精品欧美日韩一区二区| 日本中文字幕不卡| 99reav2| 91精品国产欧美一区二区18| 国产成人久久精品一区二区三区| 国产色综合天天综合网| 日韩成人伦理电影在线观看| 自拍偷拍21p| 日韩一区二区三区免费观看| 成人春色在线观看免费网站| 国产一区高清视频| 99精品国产99久久久久久白柏| 国产在线导航| 在线观看欧美www| 日韩一级毛片| 青草青青在线视频| 欧美区视频在线观看| 欧美午夜网站| 国产在线欧美日韩| 国产精品看片你懂得| xxx.xxx欧美| 国产精品网站视频| 国产日韩欧美综合在线| 2020av在线| 国产精品久久久久久久久久久久午夜片| 久久综合色婷婷| 超碰高清在线| 国产一区二区三区色淫影院| 亚洲欧洲精品一区二区三区 | 亚洲图片欧美综合| 韩国精品视频在线观看| 欧洲高清一区二区| 欧美午夜丰满在线18影院| 97精品资源在线观看| 久久精品一二三区| 午夜视黄欧洲亚洲| 嫩草国产精品入口| 波多野结衣之无限发射| 精品国产a毛片| 国产精品vip| 在线观看视频污| 国产成人精品久久二区二区91| 成人综合激情网| 欧美巨大xxxx做受沙滩| 国产精品日韩一区二区| 亚洲一区二区欧美日韩| 国产厕拍一区| 国产精品无码av无码| 亚洲天堂网在线观看| 日韩成人午夜精品| 秋霞午夜在线观看| 成人动漫视频在线观看免费| 亚洲成在人线免费| 亚洲妇女av| 成人免费网址在线| 久久久久久久香蕉网| 91免费国产视频网站| 黑人巨大精品| 欧美日韩午夜爽爽| 国产亚洲精品高潮| 丁香婷婷深情五月亚洲| 欧美aaa视频| 日韩av新片网| 久久精品99无色码中文字幕| 高清国产午夜精品久久久久久| 色戒汤唯在线观看| 黄色成人在线看| 久久亚洲综合国产精品99麻豆精品福利| 国产成人精品免费| 欧美日韩伦理一区二区| 国产淫片av片久久久久久| 日韩一区二区三区xxxx| 久久嫩草精品久久久精品| 电影一区二区在线观看| 国产aa视频| 国产在线拍偷自揄拍精品| 色婷婷av一区二区三区大白胸 | av在线日韩国产精品| 精品国产乱码久久久久久久软件| 91久久奴性调教| 亚洲少妇自拍| 182在线播放| 少妇大叫太大太粗太爽了a片小说| 亚洲欧美激情四射在线日| 成人在线一区二区三区| 国产精品一区二区三区av | 国产成人免费在线| 日韩在线观看一区二区三区| 成人综合av| 99re资源| 日韩欧美亚洲另类制服综合在线| 精品在线播放免费| 免费高清视频在线一区| 老熟妇仑乱视频一区二区| …久久精品99久久香蕉国产| 婷婷中文字幕一区三区| 久久精品欧洲| 涩涩涩久久久成人精品| 免费观看一二区视频网站| 国产精品推荐精品| 一区二区三区黄色| 亚洲激情中文1区| 玖玖国产精品视频| 成人短视频软件网站大全app| 诱人的瑜伽老师3hd中字| 欧美精品一区二区三区久久| 日韩在线观看免费高清完整版| 一二三区精品视频| 日韩精品高清不卡| 林ゆな中文字幕一区二区| 成人免费黄色网页| 人妻av无码专区| 日本精品中文字幕| 欧美久久一区二区| 99re这里都是精品| 欧美一区二区三区免费看| 天天综合av| 男人天堂免费视频| 日本欧美精品久久久| 欧美成人黑人xx视频免费观看| 欧美日韩国产一中文字不卡 | 欧美日韩激情美女| 精品一区中文字幕| 精品国产乱码久久久久久果冻传媒 | 久久一区二区三区四区五区 | 日韩一区二区欧美| 日本高清成人免费播放| 成人国产视频在线观看| 久久国产亚洲精品| 电影亚洲一区| 国产九九在线| 色免费在线视频| 中文字幕精品—区二区日日骚| 国产精品成熟老女人| 亚洲老板91色精品久久| 色香色香欲天天天影视综合网|