åºåãã°è§£æåºç¤ã«Fluentdã使ã£ã¦ãã話
ããã¯Fluentd Advent Calendar 14æ¥ç®ã®è¨äºã§ãã
ç§ã¯ç¾å¨ãVOYAGE GROUPã®åä¼ç¤¾ã§ããadingoã§ãDMP cosmiã®éçºããã¦ãã¾ããä»æ¥ã¯cosmiã§ã®fluentdå©ç¨ã®è©±ããããã¨æãã¾ãã
DMPã«ã¤ãã¦
éå»ã«åå¼·ä¼ã§ã¢ããã¯ã¾ããåã³DMPã«ã¤ãã¦è©±ããã®ã§ãããè²¼ã£ã¦ããã¾ãããã£ã¨ããã¨ãããæãã«ããããªãã°ãåãããããããã«ãã¦ãããããã¢ãã¿ãªã³ã°ããªããæ´çãã¦ä½¿ããããã«ãããã¨ããå½¹å²ããã£ããããã¯ãã§ãã
Head First Ad Technology and DMP http://www.slideshare.net/suzuken/head-first-ad-technology-and-dmp
ã©ãã§ä½¿ã£ã¦ããã
ã»ã¼å ¨ã¦ã§ããæ§æã¨ãã¦ã¯
ãã°åéãµã¼ã | | out-forward (roundrobin) | ä¸å¤®ã¹ããªã¼ã å¦çãµã¼ã | | out-plugin (elasticsearch, dynamodb) | DynamoDB ElasticSearch
ã¨ããå½¢ã«ãªã£ã¦ãã¾ããä»ã«ãããã¤ãapiãç¨æããã¦ããããããã®ãµã¼ãã«ãå ¨ã¦fluentd(td-agent)ãå ¥ã£ã¦ãã¾ããã©ã®ãµã¼ãã§ããã¡ã¤ã«ã«ãã°ãåºåãããã®ãin_tailã§æ¾ã£ã¦ãã¦ãã¾ããæ¢åã®ãã°éç¨ã¨ä½µç¨ã§ãã¾ãããã¢ããªã±ã¼ã·ã§ã³ããç´æ¥fluentdããã»ã¹ã«åãæ段ãããã¾ãããfluentdããã»ã¹ãè½ã¡ã¦ããå ´åãªã©ãèããã¨ãã°ãè½ã¡ãªããªã£ã¦ãã¾ããªã¹ã¯ã¨ãªãããããã§ããã¨ã¯ããfluentdããã»ã¹ãæ¥ã«æ¯ãããªããªã£ããã¨ããå ´é¢ã¯ãã¾ã®ã¨ããããã¾ãããã¾ããã«ã¸ã¥ã¢ã«ã«fluentdããã»ã¹ãåèµ·åãããã¨ããã®ãin_tailã«ãã¦ããçç±ã ã£ãããã¾ãã
ãã°åéãµã¼ãå´ã§ã¯ãããã¡ãªã³ã°ã¯å ¨ã¦ã¡ã¢ãªã§
ãã°ãããæãã«æ´çãããã¨ãã話ãããã¾ããããã°ã«ãè²ã ãªãã©ã¼ãããããããã¾ãæ°ããé ç®ãå¢ãããã¨ãå¤ãã®ã§ãããã¯exec_filterãå©ç¨ãã¦å¤é¨ããã°ã©ã ã§å¦çããããã«ãã¦ãã¾ããexec_filterãå人çã«ã¯ã¨ã¦ãæ°ã«å ¥ã£ã¦ãã¦ãããã¯å¤é¨ããã°ã©ã èªä½ã¯fluentd以å¤ã®ã¨ããã§ãå©ç¨ã§ããã¨ããç¹ã«ããã¾ãããã®ããã°ã©ã ã¯åç´ã«ããã°ãããæãã®ãã©ã¼ãããã«åå¦çãããã¨ãããã¨ããã£ã¦ãã¦ãããã¯Hiveã®mapãã§ã¼ãºãHadoop Streamingã§ãåå©ç¨å¯è½ãªè¨è¨ã«ãªã£ã¦ãã¾ããçã¨ãã§ããã
ã¾ããã°åéãµã¼ãã§ã®ãããã¡ãªã³ã°ã¯ã¡ã¢ãªã§è¡ã£ã¦ãã¾ããããã¯IO waitãé¿ããã¨ããæå³ãããã¾ãããåç´ã«å ã®ãã°ãã¡ã¤ã«èªä½ããã¡ã¤ã«ã·ã¹ãã ä¸ã«ãããããresumeå¦çãããã°è¯ããã¨ããå½¢ã«ãªãã¾ãããªãããã®å¦çç³»ã«ããã¦ã¯ãåããã°ãåéãã¦ãåé¡ãªãä½ãã«ãªã£ã¦ããã®ã§ãã«ã¸ã¥ã¢ã«ã«åéã§ãã¾ããä¸å¤®ã¹ããªã¼ã å¦çãµã¼ãã«ã©ã¦ã³ãããã³ã§è»¢éãã¦ããã®ãããã®ã¸ãã®èæ¯ãããããã ã£ãããã¾ããä¸å¤®ã¹ããªã¼ã å¦çãµã¼ãèªä½ã¯2å°é ç½®ãã¦ãã¦ãæµéã¨ãã¦ã¯ã©ã¡ããçæ¹ãè½ã¡ã¦ã許容ã§ããç¨åº¦ã®ãµã¼ããé ç½®ããã¦ãã¾ãã
ä¸å¤®ã¹ããªã¼ã ããå種ãã¼ã¿ã¹ãã¢ã¸ã®æ¸ãåºã
ããã¯out pluginã®elasticsearchã¨dynamodbãå©ç¨ãã¦ãã¾ããelasticsearchã¯ã¾ã è©ä¾¡ä¸ã§ãããå®ãã¼ã¿ãçªã£è¾¼ãã§ã©ã使ãããè¨è¨ãã¦ããã¨ããã¨ããã§ãããã°ã«å¯¾ãã¦ã¯å²ãã¨å ¨ææ¤ç´¢ã¨ããæ段ã¯ä½¿ãåæãè¯ãã§ãããã ã©ã®ç¨åº¦ã¾ã§ãã¼ã¿ãä¿æãã¦ãããã¨ãããããããã©ã®ç¨åº¦äºåã«ã¡ããªã¯ã¹ãä½ã£ã¦ãããã¨ããã¨ãããæ¤è¨¼ãã¦ãããããªãã§ã¼ãºã§ããfluentdå´ããã¯out_copyã§åç´ã«streamãåãã¦ããã¦ããããelasticsearchã«éãè¾¼ãã§ãã¾ãã
DynamoDBã¸ã®æ¸ãè¾¼ã¿ã¯å¤é¨ããã°ã©ã ã§ãã£ã¦ããã®ã§ãããæè¿DynamoDBãã©ã°ã¤ã³ã§ããããã«å¤æ´ãã¾ãããhash + rangeãæ±ãããããããããªããããå ã¦ã¦ãã¾ãã*1
æ¤è¨¼ç¨ãã¼ã¿ã®ä½ãæ¹
Fluentdéç¨ã§å¤§äºã«ãªãã®ããæ¤è¨¼ããã»ã¹ã§ãããã¨ãã°exec_filterç¨ã«æ°ããããã°ã©ã ãå ã¦ããã¨ãããæ°ãããã©ã°ã¤ã³ã試ãæã§ããããããå ´åã«ã¯æ¬çªç°å¢ã®ãã°åéãµã¼ãã®ä¸é¨ããæ¤è¨¼ç¨ç°å¢ã«out_copyã§éãããã«ãã¦ãã¾ããããã§ã¯samplingããããã«ãªã£ã¦ãã¦ã大ä½1/10ç¨åº¦ã®ãã°ãæ¤è¨¼ç¨ã«å©ç¨ããããã«ãã¦ãã¾ãããã¡ããæ¬çªç°å¢ã«ã¯é常éãå ¨ã¦ã®ãã°ãæµããã¾ã¾ã«ãªã£ã¦ãã¾ãããªãæ¬çªã®ãã°ãæ¤è¨¼ç¨ã«ãå©ç¨ãããã¨ããã¨ãçãã°ã¨ããã®ã¯çãç©ã§ãã®ã§ãå®ãã¼ã¿ã§è©¦ããªãã¨æ§è½ã®å¾åãªã©ã®è¦ç©ãããã¥ããããã§ããããã¾ã§ã¯æ¬çªã«ã¨ããããæå ¥ãã¦ããã°ããæ¾ç½®ãã¦ããç°å¤ã«æ°ãã¤ãã¨ãããããªãã¨ããã¦ããããã¾ãããããã®æ¹æ³ãæ®ãããã«ãã¦ãã大åæãããã«ãªãã¾ãããout_copyç´ æ´ãããã§ããã
ã¡ãªã¿ã«ãã®ã¸ãã®æ¤è¨¼ç¨ãã¼ã¿ã®ä½ãæ¹ã«ã¤ãã¦ã¯ãAWS re:Invent 2013ã§Logglyããã£ã¦ããæ¹æ³ã«ä¼¼ã¦ãã¾ãã*2 Logglyã§ã¯Kafka + Stormç°å¢ã§åããããªãã¿ã¼ã³ãä½ã£ã¦ããããã§ãã
Fluentdã使ãä¸ã§ç¡ãã¦ã¯çããããªããã®ãããã¯GrowthForecast
ã»ãã¨GrowthForecastç¡ãã§ã¯ãã¨ãããããéå®ãã¦ã¾ããåºæ¬çã«ã»ã¼å ¨ã¦ã®matchå¥ã«ããã¦copyãã©ã°ã¤ã³ãå©ç¨ãã¦ãããããããã®ã¹ããªã¼ã ãflow-counterã§åéãã¦ãã¾ããããã¦ããããGrowthForecastã«éä¿¡ããããã«ãã¦ãã¾ããããã¨åå¦çã¬ã¤ã¤ã¼ã§ã®å¤åãæã«åãããã«ãããã¾ããä¾ãã°ã以ä¸ã®ãããªéã«ã¯åºæ¬çã«GrowthForecastãè¦ãããã«ãã¦ãã¾ãã
- exec_filterã§ãã¾ããããã°ã©ã ãå¤æ´ããå ´å
- buffer_chunk_limit, buffer_queue_limit, flush_intervalãªã©ã®è¨å®å¤ãå¤æ´ããå ´å
- æ°ãããã©ã°ã¤ã³ãå°å ¥ããå ´å
åã«æ°ãä»ããã®ã¯ãout_copyãå©ç¨ãã¦ããå ´åã«ãå段ã®storeã§å¦çãæ»ã¬ã¨æ¬¡ã®storeã«æµããªããªããã¨ãããããªã±ã¼ã¹ã§ããå¾ã ã«deep_copyãç¥ã£ãã®ã§ãããå¤æ´ããå¾ã«ã©ããããã¨ãèµ·ãã£ã¦ããããææ¡ããã¨ããã®ã¯ãã¯ã大äºã§ããã¾ã Fluentdã®æåãå®å ¨ã«ææ¡ã§ãã¦ããããã§ã¯ãªãã®ã§ãã©ãããæ¯ãèãã«ãªã£ã¦ããããææ¡ããããããã¨ããã®ã¯éç¨ä¸å¤§åã ã¨æã£ã¦ãã¾ãã
ãªããin_tailã§Fluentdã«inputããã®ãé¢åãªå ´åã«ã¯ãå¤ãããcrontabã«ããç°¡åãªéè¨ãããä¸ã§GrowthForecastã«éä¿¡ãã¦ããé¨åãããã¾ãã
ç´°ããTipsã¨ãå¾®å¦ã«èããã®ãæ¾ç½®ãã¦ããé¨åã¨ã使ã£ã¦ããæ°ãä»ããæ³å®ãã¦ããªãã£ããã¨ã¨ãä»å¾ãããããã¨ã¨ã
- ãã¨ãã¨åºåãã¦ãããã°ã¯cronologã§ãã¼ãã¼ãããã¦ãããã®ã§ãin_tailã§ãã°ãé£ãããéã«ã¯
-H
ã§ãã¼ããªã³ã¯ã«ããããã«ãã¦ãã - flushã®ééãçãããã°ããã»ã©æçµçãªæ¸ãè¾¼ã¿ã¾ã§ã®é 延ããªããªãããã ãã©ããã®ãããã®å®é¨
- s3ã¸ã®è»¢éã¯æ´å²çäºæ
ã«ããcrontabã§ãã£ã¦ããã ãã©ãçãã°ãå§ç¸®ãã¦s3ã«ç½®ãã ããªãtd-agent-liteãå©ç¨ããã»ããããã®ãããããªãã
- EC2ã¤ã³ã¹ã¿ã³ã¹ãæ»ãã æã«crontabã ã¨ãã°å¤±ãå¯è½æ§ãããã®ã§ããªãã¹ããªã¢ã«ã¿ã¤ã ã«s3ã«éã£ã¦ãããããã§ããã½ã¼ãã¼ã¼ã«ãããã
- çµå±ãã©ã°ã¤ã³ã使ãå ´åã«ã¯ããããæåãè¦ãåã«ã³ã¼ãèªãã ã»ããåãããããã£ãããã
- ã®ã§æè¿ã¯çµå±ããã¥ã¡ã³ããèªã¾ãã«ã³ã¼ããèªã
- data-counter + sampling-filter + GrowthForecastã§ããæãã«ã¡ããªã¯ã¹ã¤ãããã¨æã£ã¦ãããã©ãå
¨é¨ãããã¨ããã¨è¨å®ãã¡ã¤ã«ãçã
ã«ãªãã管çãã«ãããªã
- ã®ã§ä»ã¯elasitcsearch + Kibana3ã§ãã®ã¸ãã®ã¡ããªã¯ã¹ã¯ã¤ããã°ããããªã¨æã£ã¦ã
- ã¤ã¾ãã¨ãããã¡ããªã¯ã¹ãä½ãã®ã¯ã³ã¹ãããããã®ã§ãã©ãã¾ã§ä½ãè¦ãããã«ããããã¨ãã話
- è£å´ã¯EMRãããã®ã§ãããã¨æç³»åã§ã¢ãã¿ãªã³ã°ãããã®ã¯GrowthForecastã¨Kibana3ã§ãã£ã¦ããã以å¤ã®ã¯åºæ¬çã«EMRã¨ããæ¦è¡ãã¨ã£ã¦ã¯ãã
- Amazon Kinesisãåºããããã«æµããããã«ã¯ãããã¨æã£ã¦ãã
ã¾ã¨ã
ã¾ã¨ããã¨ãFluentdã¤ãã£ã¦ã«ã¸ã¥ã¢ã«ã«ã¹ããªã¼ã å¦çã®è²ããªæ段ã試ãã¦ãã¾ããããã¾ãå¥ãã¦ãã£ããã¨ã¯ãã¦ããªãã¤ããã§ãã@katzchang ãããæ¸ãã¦ããããã«ãFluentdã¯ä¿å®çãªæ§æãã¨ããã¨ããããããç¾ã«ã¾ã crontabã§åä½ãã¦ããé¨åãæ®ã£ã¦ããããã¾ãããFluentdã§ã®å¦çã失æãã¦ãéç¨ä¸ã©ãã«ããªããããªä»çµã¿ã«ãªã£ã¦ãã¾ãããã¨ãã¨Fluentdã使ããã¨ã¯æã£ã¦ããã®ã§ãããå®ã¯æåã«èº«è¿ã§ä½¿ãå§ããã®ã¯ @bash0C7 ããã ã£ãããã¦ããªãã ããã ãããã社å ã§ãå°ããã¤ä½¿ãã¨ãããå¢ãã¦ããã¾ãããã¨ãããã¨ã§æ¥ã 楽ããFluentdãå©ç¨ãã¦ããã¾ããFluentdãtd-agentã®ã¡ã³ããã®æ¹ã ããã©ã°ã¤ã³ãå ¬éãã¦ãã ãã£ã¦ããçæ§ã®ãé°ã§ããæè¬ã
以ä¸ãFluentd Advent Calendar 14æ¥ç®ã§ãããææ¥ã¯ @katsyoshi ããã§ãã
*1:大åå®å®ãã¦ããã®ã§PRäºå®ã§ããããã¨ãupdateItemã«ã¤ãã¦ãæ±ããããã«ãããã¨èãã¦ãã¾ãã
*2:åè: re:Inventã§ã®Logglyã®åæ£ã¹ããªã¼ã å¦çç°å¢ã«é¢ããã»ãã·ã§ã³ãé¢ç½ãã£ãã®ã§ã¾ã¨ãã¦ãã http://suzuken.hatenablog.jp/entry/2013/11/17/224830