
ç§ãã¡ãçµ±èšãèªãããã«ãç§ãã¡ã®ãµã€ãã¯ãã®ä»äºã§èšå€§ãªæ°ã®ã€ãã³ããçæããŸãã ããšãã°ãå¥ã®ãŠãŒã¶ãŒã«ã¡ãã»ãŒãžãéä¿¡ãããšãããŠãŒã¶ãŒããµã€ãã«ã¢ã¯ã»ã¹ãããšããå Žæãå€æŽãããšããªã©ã ã€ãã³ãã¯JSONãŸãã¯GPBïŒGoogleãããã³ã«ãããã¡ãŒïŒåœ¢åŒã®æååã§ãéä¿¡æéããŠãŒã¶ãŒIDãã€ãã³ãã®çš®é¡ãã€ãã³ãèªäœã«çŽæ¥é¢é£ãããã£ãŒã«ãïŒãŠãŒã¶ãŒåº§æšãªã©ïŒãå«ãŸããŸãã
æ¯ç§äœåäžãã®ã€ãã³ããçæãããŸããããããå¹ççãã€æå°éã®é 延ã§åéããã³åæããããã®ããŒã«ãå¿ èŠã§ãã ãã®ã¿ã¹ã¯ã®æ¢åã®ãœãªã¥ãŒã·ã§ã³ãããã€ãèŠãŠãæè¿ãŸã§Facebook ScribeãšããããŒã¢ã³ã䜿çšããŠããŸããã 圌ã¯äžè¬çã«ç§ãã¡ã«é©ããŠãããç§ãã¡ãå¿ èŠãªãã¹ãŠãè¡ãããšãã§ããŸããã ããããããæç¹ã§Facebookã¯éçºãäžæ¢ããç¹å®ã®æ¡ä»¶äžã§Scribeãã¯ã©ãã·ã¥ãå§ããŸããïŒããšãã°ãã¢ããã¹ããªãŒã ãµãŒããŒãéè² è·ã«ãªã£ããšãïŒã ç§ãã¡ã¯èªåã§æªéã®causeèœã®åå ãåãé€ãããšã«æåããªãã£ãã®ã§ãç§ãã¡ã¯ä»£æ¿æ¡ãæ¢ãå§ããŸããã
ã€ãã³ãé ä¿¡ã·ã¹ãã ã®èŠä»¶ã¯æ¬¡ã®ãšããã§ãã
- ããŒã«ã«ïŒãããã·ïŒããŒã¢ã³ã®ååš;
- åä¿¡ãµãŒããŒãå©çšã§ããªãå Žåãã€ãã³ãããã£ã¹ã¯ã«ä¿åããŸãã
- ã«ããŽãªå¥ã«ã€ãã³ããã«ãŒãã£ã³ã°ããæ©èœã
- ããã·ã¥ããŒã¿ã¹ããªãŒã ïŒuser_idãªã©ããïŒãšã©ãŠã³ãããã³ã®ã·ã£ãŒãã£ã³ã°ã
- åä¿¡åŽã®ãã¡ã€ã«ã«ã€ãã³ããæžã蟌ãïŒã¹ã¯ã©ã€ãã®ããã«ïŒ;
- ãããã¯ãŒã¯ã®é 延ã倧ããç¶æ ã§ã®éåžžã®åäœïŒDCéã®ã€ãã³ãé ä¿¡ïŒã
- 1ç§ãããæ倧100äžã®ã€ãã³ããéåä¿¡ããã¹ã±ãŒã©ããªãã£ã
- æäœã®å®¹æãããªãœãŒã¹ã®é©åãªæ¶è²»ã
次ã®ãªãã·ã§ã³ãæ€èšããŸããã
- Apache FlumeïŒäžå®å®ã§ãéåžžã«äžäŸ¿ãªAPIãããSpooling Directory Sourceã䜿çšããªããšã¯ã©ãã·ã¥ãããšã€ãã³ãã倱ãããŸãã
- FluentDïŒããã©ãŒãã³ã¹ãäœãããããã以å€ã¯éåžžã«è¯ãã
- Apache KafkaïŒããŒã«ã«ãšãŒãžã§ã³ããªãïŒ issues.apache.org/jira/browse/KAFKA-1955ãåç §ïŒã
æ®å¿µãªããããããã®ãªãã·ã§ã³ã¯ãããããã¹ãŠã®åé¡ã解決ãããã®ã§ã¯ãªããããç¬èªã®ã·ã¹ãã ãäœæããLive Streaming DaemonïŒLSDïŒãšåŒã¶ããšã«ããŸããã
Scribeã¯äœãããŸãããïŒ
LSDã®æ©èœãšãããå¿ èŠãªçç±ãç解ããããã«ãæåã«ã¹ã¯ã©ã€ãã§äœ¿çšããæ©èœã詳ããèŠãŠã¿ãŸãããã
ããŒã«ã«ããŒã¢ã³ã®ååš
Scribeã¯ã¯ã©ã€ã¢ã³ããµãŒããŒã¢ãŒããã¯ãã£ã§åäœããŸããã¯ã©ã€ã¢ã³ãã¢ãŒããã¯ãã£ã§ã¯ãã¯ã©ã€ã¢ã³ãã¯ã€ãã³ããçæãããã·ã³ã§ããããµãŒããŒã¯ã€ãã³ããåä¿¡ãããã·ã³ã§ãã ãªãœãŒã¹ãç¯çŽããé ä¿¡ã®åé¡ãçºçããå Žåã«ã€ãã³ãããã£ã¹ã¯ã«ãããã¡ãªã³ã°ã§ããããã«ããããã«ãScribeã¯ãã€ãã³ããçæãããåãã·ã³ã§ã¯ã©ã€ã¢ã³ãã€ã³ã¹ã¿ã³ã¹ãèµ·åããããšãææ¡ããŸãã ã€ãã³ãçæã¢ããªã±ãŒã·ã§ã³ã¯ãunixãŸãã¯tcpãœã±ãããä»ããŠããŒã«ã«ã¯ã©ã€ã¢ã³ãã«æ¥ç¶ããApache Thriftãããã³ã«ãä»ããŠã€ãã³ããããŒã«ã«ã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸãã ããŒã«ã«ãããã·ã¯åžžã«å©çšå¯èœã§ãããçæéã®è²¬ä»»ããããšæ³å®ãããŠããŸãã
äžè¬ã«ãã»ãšãã©ã®å Žåãããã¯ãã¹ãŠæ©èœããŸãããããŒã«ã«ã®Scribeã€ã³ã¹ã¿ã³ã¹ãéåžžãããé·ãå¿çããããã¯ã©ãã·ã¥ããããšãããããŸãã ãã®ãããScribeã§ã¯ãªãããŒã«ã«ãã¡ã€ã«ã«ã€ãã³ããä¿åããã¡ã«ããºã ããããŸããïŒå©çšã§ããªãå ŽåïŒã å¥ã®cronã¹ã¯ãªããã§ãScribeãèµ·åãããšãã«ãããã®ã€ãã³ããScribeã«éä¿¡ããŸããã
ã«ããŽãªå¥ã«ã€ãã³ããã«ãŒãã£ã³ã°ããæ©èœ
å®éãã€ãã³ãã®ã«ããŽãªã¯ããã®ã€ãã³ããŸãã¯ãã®ã€ãã³ããåä¿¡ãµãŒããŒã§èšé²ããããã£ã¬ã¯ããªã®ååã§ãã ãããã®ãã³ãã©ãŒãç°ãªãå Žåããããããç°ãªãã«ããŽãªãŒã«ç°ãªãã¿ã€ãã®ã€ãã³ããå ¥ããããšã¯çã«ããªã£ãŠããŸãã Scribeã¯ãããŸããŸãªã«ããŽãªãããŸããŸãªãµãŒããŒã«éä¿¡ããæ©èœãæäŸããããšãã°
debug_*
ãªã©ã®ã«ããŽãªåã®ãã¹ã¯ã«ãã£ãŠèšå®ãããŸãã
ãã®æ§æã§ã¯ããã¹ãŠã®ã€ãã³ãã¯ããã©ã«ãã§ãšãŒãããDCã«é ä¿¡ãããŸãã DCå ã§ã€ãã³ããé ä¿¡ããå Žåã¯ã
local_
ãã¬ãã£ãã¯ã¹ãæã€ã€ãã³ããéä¿¡ããŸããç¹å®ã®DCã«ã€ãã³ããé ä¿¡ããå Žåã¯ããã®DCã®ååãæã€ãã¬ãã£ãã¯ã¹ãè¿œå ããŸãã ãããã®ã«ããŽãªã®ããŸããŸãªã«ãŒããããŒã¢ã³ã®æ§æã«ç»é²ãããå¿ èŠãªå Žæã«é ä¿¡ãããŸãã ãªã¢ãŒãDCã«é ä¿¡ããããšãäžéããŒãã䜿çšããŠã€ãã³ãããããã¡ãªã³ã°ã§ããŸãã
ã·ã£ãŒãã£ã³ã°ããŒã¿ã¹ããªãŒã
ç¹å®ã®ãŠãŒã¶ãŒã«é¢é£ããããŒã¿ãåããµãŒããŒã«é ä¿¡ãããšäŸ¿å©ãªå ŽåããããŸãã å Žåã«ãã£ãŠã¯ããŠãŒã¶ãŒããŒã¿ãçæéãã£ãã·ã¥ããããšã§åŠçããã©ãŒãã³ã¹ãå€§å¹ ã«æ¹åã§ããŸãã
ååãšããŠãããŒã¿ã¯ã©ãŠã³ãããã³ã¢ã«ãŽãªãºã ã«åŸã£ãŠåçŽã«é åžãããŸããã€ãŸããåŸç¶ã®åããŒã¿ã¯ãªã¹ããã次ã®ãµãŒããŒã«éä¿¡ããã以äžåæ§ã«åŸªç°ããŸãã Scribeã«ã¯ãäž¡æ¹ã®ã¢ãŒãã§äœæ¥ããå Žåã®æ¬ ç¹ããããŸããããŒã¢ã³ã¯ãç¹å®ã®ã€ãã³ããé ä¿¡ããããµãŒããŒããèšæ¶ãããåä¿¡ãµãŒããŒã®1ã€ã«ã¢ã¯ã»ã¹ã§ããªãå Žåãã€ãã³ãã¯ãã£ã¹ã¯ã«èç©ãããä»ã®ãµãŒããŒãå©çšå¯èœã§åä¿¡ããã³åŠçã§ããå Žåã§ãã©ãã«ãé ä¿¡ãããŸããã€ãã³ãã®ã¹ããªãŒã å šäœã
åä¿¡åŽã®ãã¡ã€ã«ãžã®ã€ãã³ãã®èšé²
åä¿¡åŽïŒã€ãŸããµãŒããŒåŽïŒã§ã¯ããã¹ãŠã®ã€ãã³ãã¯
<_>/<_>-<>_<>
ãšãã圢åŒã®ãã¡ã€ã«ã«
<_>/<_>_current
ããæåŸã®ãã¡ã€ã«ãžã®
<_>/<_>_current
ãšãã圢åŒã®ã·ã³ããªãã¯ãªã³ã¯ãäœæãããŸãã«ããŽãªãŒå ã ãã¡ã€ã«ã¯ãçµéæéïŒ60ç§ãªã©ïŒãŸãã¯ããªã¥ãŒã ïŒ10 MBãªã©ïŒã®ããããæ©ãæ¹ã«åºã¥ããŠããŒããŒã·ã§ã³ãããŸãã
ããšãã°ãerror_logãªã©ã®ã«ããŽãªãåŒã³åºãããå Žåããã¡ã€ã«ãšãã£ã¬ã¯ããªã®éå±€ã¯æ¬¡ã®ããã«ãªããŸãã
/var/scribe/error_log/ |-- error_log-2016-09-13_004742 |-- error_log-2016-09-13_004743 |-- error_log-2016-09-13_004744 `-- error_log_current -> error_log-2016-09-13_004744
èšé²ã¯åžžã«æåŸã®ãã¡ã€ã«ã«å¯ŸããŠè¡ãããŸãã ãµãŒããŒã¯ä»¥åã®ãã¡ã€ã«ã«æžã蟌ã¿ãè¡ããŸãã;ãã¡ã€ã«ãå®å šã«åŠçãããåŸããããã¯èªç±ã«èªã¿åãããã³åé€ã§ããŸãã
é«é 延ãããã¯ãŒã¯ã§ã®éåžžåäœ
Scribeã¯ã©ã€ã¢ã³ãã¯ãããŒã¿ãå°ããªãã±ããã§éä¿¡ããæ°ãããã±ãããéä¿¡ããåã«ãçžæåŽããã®ç¢ºèªãåŸ ã¡ãŸãã ããã¯ãããšãã°ãããŒã¿è»¢éé 延ãçŽ125ããªç§ã§ãã倧西æŽã§ã€ãã³ããéä¿¡ããå Žåãªã©ãéåžžã«ããŸãæ©èœããŸããã ããšãã°ãæ倧ãã±ãããµã€ãºã0.1 Mbã®å Žåããã®æ¹æ³ã§1ç§ä»¥å ã«è»¢éã§ããã®ã¯0.1 Mb / 0.125 s = 0.8 Mb / sã ãã§ãã åãã±ããã®ç¢ºèªãåŸ ããã«ãã¹ããªãŒãã³ã°ã¢ãŒãã§ã€ãã³ããéä¿¡ããå Žåããã®å¶éãåé¿ã§ããŸãã
LSDã¯äœãæäŸããŸããïŒ
äžè¬çã«ãScribeã«ã€ããŠã¯äž»ã«2ã€ã®èŠæ ããããŸããã
- ããŒã¢ã³ãã¯ã©ãã·ã¥ãããšãã®äžå®å®æ§ãšããŒã¿æ倱ã
- åä¿¡ãµãŒããŒãã¯ã©ãã·ã¥ããå Žåããã©ãã£ãã¯ã¯æ®ãã®ãµãŒããŒéã§èªåçã«ååé ãããªããããæåã«ããä»å ¥ãå¿ èŠã§ãã
LSDã¯ããã2ã€ã®åé¡ã解決ããæåã«èª¬æããã€ãã³ããé ä¿¡ããããã®èŠä»¶ãæºãããŸãã
ããŒã¢ã³ãã¯ã©ãã·ã¥ãããšãã®ããŒã¿æ倱ä¿è·
ãšã©ãŒã®ãªããœãããŠã§ã¢ã¯ååšããªããããLSDããç Žå£äžå¯èœãã«ããŠåžžã«é©åãªæéã確ä¿ããããšãã代ããã«ãã¯ã©ã€ã¢ã³ãã¯åžžã«ã€ãã³ãããã¡ã€ã«ã«æžã蟌ã¿ãLSDã¯ã©ã€ã¢ã³ãã¯ãããã®ãã¡ã€ã«ãèªã¿åããå¿ èŠãªå Žæã«é ä¿¡ããŸãè»ã ãã®æ¹æ³ã¯ãThriftãProtocol Buffersãªã©ã®ãã©ã€ããŒãäžèŠã§ãã·ã§ã«ã¹ã¯ãªããããã§ãã€ãã³ããéä¿¡ã§ãããã䟿å©ã§ãã
ã€ãã³ããéä¿¡ããã«ã¯ããã®ã€ãã³ããå«ãè¡ã<category> / <filename> .logã®åœ¢åŒã®ãã¡ã€ã«ã®æåŸã«æžã蟌ãå¿ èŠããããŸããããã§ã<category>ã¯ã€ãã³ãã®ã«ããŽãªã®ååã§ãã çŸåšã®æ¥ä»ãšæå»ã«åºã¥ããŠå調ã«å¢å ããæååã¯ã<filename>ãšããŠæ©èœããŸãã ãã®åœ¢åŒã¯å¶ç¶ã«éžæããããã®ã§ã¯ãªããLSDãŸãã¯Scribeã䜿çšããŠé ä¿¡ãããã€ãã³ããä»ã®ãµãŒããŒã«éä¿¡ã§ããŸãã <filename>ãšããŠãYYYYMMDDHHII圢åŒã®æ¥ä»ãšæå»ã䜿çšããããšããå§ãããŸãïŒããšãã°ã201609131714ïŒã ãã®åœ¢åŒãéžæãããšããã¡ã€ã«ã¯1åéã«1åã ãäœæããããã®ååã¯å調ã«å¢å ããŸãã
è€æ°ã®ããã»ã¹ãã4 KBãè¶ ããã€ãã³ãïŒ stackoverflow.com/questions/1154446/is-file-append-atomic-in-unix ïŒãéä¿¡ããå¿ èŠãããå Žåãè¡ãæ··åããªãããã«ãã¡ã€ã«ã«ã€ãã³ããæžã蟌ãåã«ãã¡ã€ã«ããã¯ãååŸããå¿ èŠããããŸãã ãµãã£ãã¯ã¹_bigããã¡ã€ã«åã«è¿œå ããŠãå°ããªã€ãã³ããããã¯ããªãããã«ã倧ããªã€ãã³ããå¥ã®ãã¡ã€ã«ã«æžã蟌ãããšãã§ããŸãã
<category> .log圢åŒã®ãã¬ãŒã³åœ¢åŒããµããŒããããŠããŸãããã®å Žåããµããã£ã¬ã¯ããªã®äœæã¯äžèŠã§ãã ãã®åœ¢åŒã¯ãã·ã§ã«ã¹ã¯ãªããããã€ãã³ããéä¿¡ãããããã°ãåéããããããšãã«äŸ¿å©ã§ãã
ã€ãã³ããããŒã®èªååå²ãåœãŠ
ã€ãã³ããé ä¿¡ããããµãŒããŒã®1ã€ãã¯ã©ãã·ã¥ãããšãæ®ãã®ãµãŒããŒã«èªåçã«åé åžãããŸãã ãµãŒããŒã®1ã€ãä»ã®ãµãŒããŒãããé ãå Žåããã®å Žåãåä¿¡å¯èœãªã€ãã³ãã®ã¹ããªãŒã ãååŸããŸãã
ããã¯ããµãŒããŒã®å¯çšæ§ãã¿ã€ã ã¢ãŠãã«åºã¥ããŠæ±ºå®ãããããã1åéãã®é ä¿¡ãä¿èšŒãããªãããšãæå³ããŸãã ã€ãã³ãããµãŒããŒã«æ£åžžã«é ä¿¡ãããå¯èœæ§ã¯ãããŸãããã€ãã³ãã®ç¢ºèªãå±ããªãããéåžžã«é ãå°çããå¯èœæ§ããããŸãã ãã®å ŽåãLSDã¯ã©ã€ã¢ã³ãã¯ã€ãã³ããã±ãããåéä¿¡ããŸããããã®ç¢ºèªã¯ã¿ã€ã ã¢ãŠãã«ãªããŸããã§ããïŒããã©ã«ãã§ã¯30ç§ïŒã
ãªã¢ã«ã¿ã€ã ã®ã€ãã³ãé ä¿¡
Live Streaming DaemonãšããååãéžæãããããäžèŽããå¿ èŠããããŸã:)ã åä¿¡åŽã§ååãªãããã¯ãŒã¯åž¯åå¹ ãšãµãŒããŒããã©ãŒãã³ã¹ãããå Žåãã€ãã³ãé ä¿¡ã¯ãªã¢ã«ã¿ã€ã ã§å®è¡ãããŸã-é ä¿¡ã«äººçºçãªé 延ã¯ãããŸããã ããã¯ããã°ãé ä¿¡ããããã€ãã³ããéä¿¡ããããã®å€æ°ã®äžéããŒããäœæãããããå Žåã«äŸ¿å©ã§ãã äžæ¹ããªã¢ã«ã¿ã€ã é ä¿¡ã§ã¯ãã€ãã³ããæ°ç§ããšã«èç©ãããŠéä¿¡ãããå Žåãããå€ãã®ãªãœãŒã¹ãå¿ èŠã§ãïŒãããã®èšå®ã§Scribeã䜿çšããŸããïŒã ãããã£ãŠãLSDã®CPUæ¶è²»ã¯å¹³åããŠScribeã®CPUæ¶è²»ããããããã«é«ããªããŸããããã®å·®ã¯ããã»ã©å€§ãããããŸããã
æ§èœ
æ®å¿µãªãããã¹ã¯ã©ã€ãã¯ã©ã€ã¢ã³ããè² è·ã«é¥ã£ããããå éšUDSåæã·ã¹ãã ã®ã€ãã³ããããŒã§Scribeã®ããã©ãŒãã³ã¹ã枬å®ã§ããŸããã§ããïŒAlexander Krashennikovãæè¿UDS ã«ã€ããŠè©±ããŸããïŒã
1ã€ã®LSDãµãŒããŒã¯ãæ°åã®ãµãŒããŒããã®2ã®ã¬ããã/ç§ïŒ400kã€ãã³ã/ç§ïŒã®ã€ãã³ãã¹ããªãŒã ã«ç°¡åã«å¯Ÿå¿ããŸãã ãããã£ãŠã1ç§éã«100äžã®ã€ãã³ãã®ã¹ããªãŒã ãåä¿¡ããã«ã¯ã3å°ã®ãµãŒããŒã®ã¿ãå¿ èŠã§ãããåãµãŒããŒã«ã¯2æã®ã®ã¬ããããããã¯ãŒã¯ã«ãŒããè£ åãããŠããå¿ èŠããããŸãã
ãªãŒãã³ãœãŒã¹
LSDãœãŒã¹ã³ãŒãã¯GitHubã«ãããŸã ïŒã€ã³ã¹ããŒã«ããã«ã¯ãgo get github.com/badoo/lsdãšå ¥åããŸãïŒã ããŒã¢ã³ã¯Linuxããã³macOSã§å®è¡ãããŸãããç£æ¥çšã«ã¯Linuxãæšå¥šãããŸãã
LSDã«å ããŠããªãŒãã³ãœãŒã¹ã§å ¬éãããŠããä»ã®å€ãã®ãããžã§ã¯ãããããŸãããããã®ãããžã§ã¯ãã¯ããã¯ãã«ã«ããã°ã§ã芧ããã ããŸãã
Badooãã·ãã¢éçºè ãYuri Nasretdinov