
å°ãåãŸã§ãElasticsearchã¯ã©ã¹ã¿ãŒã®ãªãœãŒã¹æ¶è²»ãæé©åããåé¡ã解決ããŸããã ãšã©ã¹ãã£ãã¯èªäœã®æ§æã«å€±æããããããéãæ€çŽ¢ãŸãã¯ããŒã³ã¬ãŒã¿ãŒãšåŒã°ããã¢ãããŒãã䜿çšããŠãæ€çŽ¢çµæã®ãã£ãã·ã¥ã®ãããªåŠçãè¡ããŸããã ã«ããã®äžã§ãã¡ã¿ããŒã¿ã¡ããªãã¯ãšããŒã³ã¬ãŒã¿ãŒèªäœãã©ã®ããã«äœ¿çšãããã«ã€ããŠã®ã¹ããŒãªãŒã
ç§ãã¡ãéçºããŠããç£èŠãµãŒãã¹ã®ç®çã¯ãåé¡ã®åå ã瀺ãããšã§ãããã®ãããã¯ã©ã€ã¢ã³ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®ããŸããŸãªãµãã·ã¹ãã ã«é¢ããå€ãã®è©³çްãªã¡ããªãã¯ãåé€ããŸãã
äžæ¹ã§ã¯ãæ°åã®ãã¹ããã倿°ã®ã¡ããªãã¯ãèšé²ãããšããåé¡ã解決ããŸãã仿¹ã§ã¯ãã¡ããªãã¯ã¯ãªããžããªå
ã§ç¡ééã§ã¯ãªããåžžã«èªã¿åãããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ãæ°åã®ã¡ããªãã¯ãèªã¿åãããšãã§ããæç»äžã«ãã£ãŒããèŠã
- äžè¬çãªåé¡ãæ€åºããããã®å€ãã®äºåèšå®ãããããªã¬ãŒãããããããããåžžã«å€ãã®ã¡ããªãã¯ãèªã¿åãããšãã§ããŸã
ã¡ããªãã¯ãšã¯äœã§ããïŒ
okmeterã®éçºãå§ãããšãïŒåœæãinfluxdbã®ãããªãã¯ããŒãžã§ã³ã¯ãŸã ãããŸããã§ããïŒãã¡ããªãã¯ãããã©ãããã§ãã£ãŠã¯ãªããªãããšãããã«ããããŸããã ç§ãã¡ã®å Žåãã¡ããªãã¯èå¥åã¯ããŒãšå€ã®ãã£ã¯ã·ã§ããªã§ãïŒç§ãã¡ã«ãšã£ãŠã¯æŽå²çã«label_setãšåŒã°ããŠããŸãïŒ
{ "name": "nginx.requests.rate", "status": "403", "source_hostname": "front3", "file": "/var/log/access.log", "cache_status": "MISS", "url": "/order" }
ãã®ãããªã¡ããªãã¯ããšã«ãç¹å®ã®æç¹ïŒæç³»åïŒã«é¢é£ä»ããããå€ããããŸãã
ã¡ããªãã¯ã¹ãä¿åããæ¹æ³
åã¡ããªãã¯ã®label_setããã®ããã·ã¥ã«åºã¥ããŠãæååããŒãèšç®ãããããã«ãããªããžããªå
ã®ã¡ããªãã¯ãèå¥ãããŸãã ãããŠãããã§ã¯ãããŒã«ãã£ãŠã¡ããªãã¯å€ãä¿åããã¿ã¹ã¯ãšãã¡ã¿ã¡ã¿æ
å ±ãä¿åããã³åŠçããã¿ã¹ã¯ãåé¢ããŸãã

ãã®èšäºã§ã¯ã¡ããªãã¯å€ã®ä¿åã«ã€ããŠã¯èæ
®ããŸããããã¡ã¿ããŒã¿ã«ã€ããŠè©³ãã説æããŸãã
ã¡ã¿ã¡ã¿ããŒã¿ã¯ãããŒèªäœãlabel_setãäœææéãæŽæ°æéãããã³ãã®ä»ã®ãµãŒãã¹ãã£ãŒã«ãã§ãã
ãã®æ
å ±ã¯cassandraã«ä¿åãããã¡ããªãã¯ããŒã§åä¿¡ã§ããŸãã ã¡ã€ã³ã®ã¡ã¿ããŒã¿ãªããžããªã«å ããŠãäžéšã®ãŠãŒã¶ãŒæ€çŽ¢ã¯ãšãªã®ã¡ããªãã¯ããŒã®ã»ãããè¿ãã€ã³ããã¯ã¹ãelasticsearchã«ãããŸãã
èšé²ã¡ããªãã¯
ã¡ããªãã¯ã®ããã¯ãã¯ã©ã€ã¢ã³ãã®ãµãŒããŒã«ã€ã³ã¹ããŒã«ããããšãŒãžã§ã³ãããååŸããããšãåã¡ããªãã¯ã®ãµãŒããŒã§æ¬¡ã®ããšãçºçããŸãã
metric_keyãèšç®ãããã®ã¡ããªãã¯ãã¡ã¿æ
å ±ã¹ãã¬ãŒãžã«ãããã©ããã確èªããŸãïŒC *ïŒ
å¿
èŠã«å¿ããŠãæ°ãããã®ãç»é²ããŸãïŒC *ããã³ESã«èšé²ïŒ
updated_tsãäžããŠãæŽæ°ãããã©ãããèšç®ããŸãïŒESã§ã®ã€ã³ããã¯ã¹äœæã®è² è·ã軜æžããããã«ã12æéããšã«æŽæ°ãããŸãïŒ
æéã«ãªã£ãã-C *ããã³ESã§updated_tsãæŽæ°ããŸã
- metric_storageã«å€ãæžã蟌ã
ææšã®èªã¿åã
ã¡ããªãã¯ãèªã¿åãããã®ãªã¯ãšã¹ãã«ã¯ãäž»ã«2ã€ã®ãœãŒã¹ããããŸããã°ã©ãåã®ããã®ãŠãŒã¶ãŒãªã¯ãšã¹ããšããªã¬ãŒæ€èšŒã·ã¹ãã ã§ãã ãã®ãããªãªã¯ãšã¹ãã¯ãdslã®äžéšã®è¡šçŸã§ãã
top(5, sum_by(url, metric(name=ânginx.requests.rateâ, status=â5*â)))
ãã®åŒã«ã¯ä»¥äžãå«ãŸããŸãã
ããã«ããªã¯ãšã¹ãã¯åžžã«ç¹å®ã®æéééã§æ©èœããŸãïŒ[since_ts = Xãto_ts = Y]
ã¡ããªãã¯ã»ã¬ã¯ã¿ãŒã¯elasticsearchãªã¯ãšã¹ãã®ãããªãã®ã«å€æãããŸãïŒæå¹ãªjsonãªã¯ãšã¹ãã¯ããåé·ã§ãïŒïŒ
{"name": ânginx.requests.rateâ, "status_prefix": "5", "created_lt": "Y", "updated_gt": "X+12h"}
NåïŒå€ãã®å Žåæ°ååïŒã®ããŒãååŸããŸãã
C *ã«ç§»åããŠãããŒã§label_setsãåãåããŸã
metric_storageã«ã¢ã¯ã»ã¹ããŠãããŒã§ããŒã¿ãåä¿¡ããŸã
- åŒtopïŒ5ãsum_byïŒ...ïŒïŒãè©äŸ¡ããŸã
è² è·ãšããŒã¿ãµã€ãº
çŸæç¹ã§ã¯ãã¯ã©ãŠãã¯ã¬ã³ãŒãããšã«1ç§ããã10äžä»¥äžã®ã¡ããªãã¯ãåŠçããŠããŸãã Paskovyã¯å¹³åã§çŽ350 rpsãèŠæ±ããŸãïŒããªã¬ãŒã®90ïŒ
ïŒã åæ€çŽ¢ã¯ãšãªã¯ã1ã3åã®ESã€ã³ããã¯ã¹çšã§ãåã€ã³ããã¯ã¹ã¯100ããªã³ææžïŒã30 GBïŒãŸã§ã§ãã
åæã«ãCPUãšã©ã¹ãã£ãã¯ã®æ¶è²»ã«ããããã¹ãã£ã³ã°ã«è²»ãããããéãèæ
®ãã誰ããç¡é¢å¿ã«ãªãããšã¯ãããŸããã

Elasticsearch
ãªã¯ãšã¹ããç¹°ãè¿ãããå Žåã«åããŠãçµã¿èŸŒã¿ã®ã¯ãšãªãã£ãã·ã¥ãäœæãããããšãæåŸ
ããŠãelasticsearchèšå®ã倿ŽããããšããŸããã ãããã®èŠæ±ã®ãã£ãã·ã¥ç¡å¹åãé²ãããã«ãäžéšã®èŠæ±ã«å¯ŸããŠæŽæ°ãè¡ãããªãã€ã³ããã¯ã¹ãã·ãã¥ã¬ãŒãããããšããŸããã
ããããæ®å¿µãªããšã«ãç§ãã¡ã®ãã¹ãŠã®ãšã¯ãµãµã€ãºã¯ãæ¶è²»ããããªãœãŒã¹ã®æžå°ãããšã©ã¹ãã£ãã¯ã®å¿çæéã®ççž®ããããããŸããã§ããã
å€éšãã£ãã·ã¥
ESã®å€éšã«æ€çŽ¢çµæã®ãã£ãã·ã¥ãäœæããããšã決å®ããESã«é¢ããæ¬¡ã®èŠä»¶ãçå®ããŸããã
ãã®ãããªèŠä»¶ãããå Žåããããã¬ãŒãããªãããšã¯æããã§ãããESã¬ã¹ãã³ã¹ã1åéã ããã£ãã·ã¥ããããšãã§ããŸãã ãã®çµæããã£ãã·ã¥ãè¡ããªããšããçµè«ã«éããŸããããæ¢ç¥ã®åæ€çŽ¢ã¯ãšãªã®æ€çŽ¢çµæãå«ãå®äœåããã衚çŸã®ãããªãã®ã§ãã
ããŒã³ã¬ãŒã¿ãŒ
ã¢ã€ãã¢ã¯ãã¡ããªãã¯ã®åã¬ã³ãŒãã§ãã©ã®æ¢ç¥ã®æ€çŽ¢ã¯ãšãªãäžèŽãããããã§ãã¯ãããšãããã®ã§ããã å¶ç¶ã®å Žåãã¡ããªãã¯ã¯ãã£ãã·ã¥ã«æžã蟌ãŸããŸãã
ãã®ãããªã¢ãããŒãã¯ã ãååãæ€çŽ¢ããå¥åãéæ€çŽ¢ããå¥åãããŒã³ã¬ãŒã¿ãŒããšåŒã°ããŸãã
ç§ãçè§£ããŠããããã«ãããã§ã¯ããã»ã¹ã®é¡äŒŒæ§ã®ããã«ãããŒã³ã¬ãŒã·ã§ã³ããšããçšèªã䜿çšãããŸããå€ãã®æ€çŽ¢ã¯ãšãªãéããŠããã¥ã¡ã³ãã®ããããŒãã確èªããŸãã
éåžžã®æ€çŽ¢åé¡ã§ã¯ãããã¥ã¡ã³ããããããããããã€ã³ããã¯ã¹ãæ§ç¯ããŸããã€ã³ããã¯ã¹ã¯ãïŒéåžžã«åçŽåãããïŒåãåèªãããã®åèªãåºçŸããããã¥ã¡ã³ãã®ãªã¹ãã«å¯Ÿå¿ããŸãã

ããŒã³ã¬ãŒã·ã§ã³ã®å Žåã以åã«æ¢ç¥ã®æ€çŽ¢ã¯ãšãªããããåããã¥ã¡ã³ãã¯æ€çŽ¢ã¯ãšãªã§ãã

ããŒã³ã¬ãŒã¿ãŒã®å®è£
ïŒ
ããŒã³ã¬ãŒã¿ãŒãå°æ¥ã®ããã¥ã¡ã³ãã®æ§é ãèšè¿°ããç¹å¥ãªã¿ã€ãã®ã€ã³ããã¯ã¹ã§ããelasticsearchã®ã¿ãèæ
®ããŸããïŒããã¥ã¡ã³ããæã€ãã£ãŒã«ãã®çš®é¡ãšãã®ã¿ã€ãïŒãããã³ã°ïŒã ãã®ã€ã³ããã¯ã¹ã«ããã«ãªã¯ãšã¹ããä¿åãããã®åŸããã¥ã¡ã³ããå
¥åã«éä¿¡ããŠæ€çŽ¢ããŸãã
ESå
ã§ã¯ãåããŒã³ã¬ãŒã·ã§ã³ãªã¯ãšã¹ãã§ãäžæã€ã³ããã¯ã¹ãã¡ã¢ãªã«äœæãããŸããããã¯ãæåºãã1ã€ã®ããã¥ã¡ã³ãã®ã¿ã§æ§æãããŠããŸãã ä¿åããããã¹ãŠã®ã¯ãšãªã®ãã¡ãæããã«ãã£ãŒã«ãã»ããããã¥ã¡ã³ãã«é©ããªãã¯ãšãªã¯ç Žæ£ãããŸãã æ¬¡ã«ãæ®ãã®åè£ãªã¯ãšã¹ãããšã«ãäžæã€ã³ããã¯ã¹ã«ãã£ãŠæ€çŽ¢ãå®è¡ãããŸãã
åçŽãªãã³ãããŒã¯ã§ã¯ãããŒã³ã¬ãŒã¿ãŒã§ã®1ã€ã®èŠæ±ãžã®æºæ ã«ã€ããŠ1ã€ã®ããã¥ã¡ã³ãããã§ãã¯ããããã«2ã10ããªç§ãåãåããŸããã ããã¥ã¡ã³ãã®ã¹ããªãŒã ã§ã¯ãããã¯éåžžã«é«äŸ¡ã«ãªããŸãã ããã«ãelasticsearchããã¯ãã¯ãããæ¹æ³ãåŠãã ããšã¯ãããŸããã
èªå®¶è£œãã€ãŒãããŒã³ã¬ãŒã¿ãŒ
ã¡ããªãã¯ã«æ»ããŸãããã äžã§èšã£ãããã«ãç§ãã¡ã®ããã¥ã¡ã³ãã¯ããŒããªã¥ãŒèŸæžã§ãã æ€çŽ¢ã¯ãšãªã¯ãå®å
šäžèŽãŸãã¯ãã¬ãã£ãã¯ã¹ãã£ãŒã«ãã®äžèŽã«ããæ€çŽ¢ã§ãã ã€ãŸãããã®ãããå
šææ€çŽ¢ã¯å¿
èŠãããŸããã
ããŒã³ã¬ãŒã¿ãŒã®ãåçŽãªãå®è£
ãã€ãŸããé¡ã®æ¢ç¥ã®ãã¹ãŠã®èŠæ±ã«å¯Ÿããåã¡ããªãã¯ã®å¯Ÿå¿ã確èªããããšã«ããŸããã 1ç§ãããçŽ10äžã¡ããªãã¯ã®æžã蟌ã¿ã¹ããªãŒã ããããåã¡ããªãã¯ã¯çŽ100ã¯ãšãªã«æºæ ããŠãããã©ããã確èªããå¿
èŠããããŸãã
1ã€ã®ãã§ãã¯ã®ãã³ãããŒã¯ïŒãã®ã³ãŒãã®äžéšã¯golangã§åäœãããããã¿ã€ããäœæããŸããïŒã¯çŽ300nsã瀺ããŸããã ããã¯å®å
šã«CPUã«ãã€ã³ããããã¿ã¹ã¯ã§ãããããæéãåèšããæš©å©ããããŸãã
100k * 100 = 10M
10M * 300ns = 3 = 3
ãã£ãã·ã¥ã®ããžãã¯ã¯æ¬¡ã®ãããªãã®ã§ããïŒ

ã¡ããªãã¯ãèšé²ããããã»ã¹ã«è¿œå ã®æé ã远å ãããŸããã
- ãã®ã¯ã©ã€ã¢ã³ãã®ä¿åããããã¹ãŠã®ãªã¯ãšã¹ããCããçºçãããŸã*
- ãªã¯ãšã¹ãããšã«äžèŽããåã¡ããªãã¯ããã§ãã¯ããŸã
- äžèŽããå Žåãã¡ããªãã¯ã«é¢ããã¡ã¿æ
å ±ããã£ãã·ã¥ã«æžã蟌ããšãåãã¡ããªãã¯ããã£ãã·ã¥ã«äœåºŠãæžã蟌ãããšãã§ããŸãïŒãã£ããµã³ããŒã¯éè€ãåé€ããŸãïŒ
æ°ãããªã¯ãšã¹ããç»é²ããåŸããã®ãªã¯ãšã¹ãã®ãã£ãã·ã¥ãããã«æå¹ã«ãªããªãããšã«æ³šæããŠãã ããã ãã§ã«éå§ãããŠããŠãæ¢ç¥ã®èŠæ±ã®ãªã¹ãã«æ°ããèŠæ±ã衚瀺ãããŠããªãæžã蟌ã¿èŠæ±ãçµäºãããŸã§åŸ
æ©ããå¿
èŠããããŸãã ãããã£ãŠãã¡ããªãã¯ã®æžã蟌ã¿èŠæ±ã®ã¿ã€ã ã¢ãŠããŸã§ã«ãã£ãã·ã¥ã®åæåãå»¶æããŸãã
ãã£ãã·ã¥ã¯ã©ã®ããã«é
眮ãããŸããïŒ
ãã£ãã·ã¥ãcassandraã«ä¿åããŸããåãªã¯ãšã¹ãã®çµæã¯æéããšã«åå²ãããŸãïŒåããŒã¹ã¯24æéã§ãïŒã ããã¯ãçµæãã忢ããã¡ããªãã¯ã確å®ã«æŽãèœãšãããããã«ããããã«è¡ãããŸãã

ãªã¯ãšã¹ãã«å¿ããŠãé¢å¿ã®ããæéééã«è©²åœããæ¯æ¥ã®ãã£ã³ã¯ããã¹ãŠæžç®ããçµæãã¡ã¢ãªã«çµåããŸãã
å€ã¯ãã¡ããªãã¯ããŒãã£ã¯ã·ã§ããªãšlabel_setã®json衚çŸã§ãã ãããã£ãŠããã£ãã·ã¥ããã®çµæã䜿çšããå ŽåãESããçµæãåä¿¡ããåŸã«è¡ã£ãããã«ãããŒããšã®ã¡ããªãã¯ããŒã¿ã«ã€ããŠãcassandraã«è¿œå ã§ç§»åããå¿
èŠã¯ãããŸããã
çç£ã§å±é
ãã£ãã·ã¥ãããã«ã«å±éããã»ãšãã©ã®ãªã¯ãšã¹ãã§æå¹ã«ãªã£ãåŸãESã®è² è·ã倧å¹
ã«äœäžããŸããã

åæã«ãcassandraã«ãããªãœãŒã¹ã®æ¶è²»ã¯å€æŽãããŠããŸããã

ãããŠãããŒã³ã¬ãŒã·ã§ã³ãå®è¡ããããã¯ãšã³ãã¯ãäºæž¬ãããã3ã³ã¢ã ãæé·ããŸããã

ããŸããšããŠããã£ãã·ã¥ããã®çµæãESã«ç§»åããŠããCããã¡ã¿æ
å ±ãååŸããããã5åé«éã§ããããšã倿ãããããåªããã¬ã€ãã³ã·æé©åãåŸãããŸããã

äžè²«æ§ãã§ãã¯
ãã£ãã·ã¥ããžãã¯ãæ··ä¹±ãããªãããã«ãæåã®æ°æ¥éã¯æ€çŽ¢çµæãESãšãã£ãã·ã¥ã®äž¡æ¹ã§èª¿ã¹ãçµæãæ¯èŒããŠé©åãªã¡ããªãã¯ãäœæããŸããã è² è·ããã£ãã·ã¥ã«åãæ¿ããåŸããã£ãã·ã¥æ€èšŒããžãã¯ãã«ããã¢ãŠãããããªã¯ãšã¹ãã®1ïŒ
ã«å¯ŸããŠESã§ææ©çãªãªã¯ãšã¹ããè¡ããŸããã åããªã¯ãšã¹ãã¯ESã«ãšã£ãŠãããŠã©ãŒããŒãã§ããããããªããšãããŒãã€ã³ããã¯ã¹ããªããã°ããŒãžãã£ãã·ã¥ã«å
¥ããããŠãŒã¶ãŒãªã¯ãšã¹ãã¯ãã«ã«ãªããŸãã
åèš
å€éšãã£ãã·ã¥ãäœæããã®ã§ã¯ãªããESãå
éšãã£ãã·ã¥ã䜿çšããããã«åŒ·å¶ããŸããã ããããç§ã¯ãµã€ã¯ãªã³ã°ã«å¯ŸåŠããªããã°ãªããŸããã§ããã ãããããã©ã¹ããããŸããããŒã³ã¬ãŒã¿ãŒã«è¿œå ã®ããžãã¯ãæããŸãã
çµæã«ãããšãç§ãã¡ã¯è
ºã§ããªãããŸããããŸããããèªå®¶è£œã®ããŒã³ã¬ãŒã¿ãŒã¯éåžžã«ããŸãã¹ã±ãŒãªã³ã°ããŸãã ããã¯ãã¯ã©ã€ã¢ã³ãã®æ°ãšåã¯ã©ã€ã¢ã³ããµãŒããŒããã®ã¡ããªãã¯ã®æ°ã®äž¡æ¹ã§æ¥éã«æé·ããŠãããããç§ãã¡ã«ãšã£ãŠååã«éèŠã§ãã