åæ£ã·ã¹ãã ã®è€éããå¢ãã«ã€ããŠãç£èŠã¯æé·ããã¯ã©ãŠã ãœãªã¥ãŒã·ã§ã³ã®éåžžã«éèŠãªã³ã³ããŒãã³ãã«ãªã£ãŠããŸãã 圌ãã®è¡åãç解ããããšãå¿ èŠã§ãã ãã¹ãŠã®ãµãŒãã¹ããããŒã¿ãåéããããã©ãŒãã³ã¹åæããšã©ãŒ ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãå¯çšæ§ããã°ãåããåäžã®ã€ã³ã¿ãŒãã§ã€ã¹ãå°é家ã«æäŸã§ãããã¹ã±ãŒã©ãã«ãªããŒã«ãå¿ èŠã§ãã
ãããã®åãããŒã«ã¯å¹ççãã€çç£çã§ãªããã°ãªããŸããã ãã®èšäºã§ã¯ãEFK (Elasticsearch) ãš PLG (Loki) ãšãã XNUMX ã€ã®äººæ°ã®ãããã¯ãããžãŒ ã¹ã¿ãã¯ãåãäžãããããã®ã¢ãŒããã¯ãã£ãšéãã調ã¹ãŸãã
EFKã¹ã¿ãã¯
éåžžã«äººæ°ã®ãã ELK ãŸã㯠EFK ã«ã€ããŠã¯ããã§ã«èããããšããããããããŸããã ã¹ã¿ãã¯ã¯ãElasticsearch (ãªããžã§ã¯ã ã¹ãã¬ãŒãž)ãLogstash ãŸã㯠FluentD (ãã°ã®åéãšéçŽ)ãããã³èŠèŠåã®ããã® Kibana ãšããããã€ãã®ç°ãªãéšåã§æ§æãããŸãã
äžè¬çãªã¯ãŒã¯ãããŒã¯æ¬¡ã®ããã«ãªããŸãã
Elasticsearch â æ€çŽ¢æ©èœãšãªã¢ã«ã¿ã€ã åææ©èœãåããåæ£ãªããžã§ã¯ã ã¹ãã¬ãŒãžã ãã°ãªã©ã®åæ§é åããŒã¿ã«æé©ãªãœãªã¥ãŒã·ã§ã³ã æ å ±ã¯ JSON ããã¥ã¡ã³ããšããŠä¿åããããªã¢ã«ã¿ã€ã ã§ã€ã³ããã¯ã¹ä»ããããã¯ã©ã¹ã¿ãŒ ããŒãå šäœã«åæ£ãããŸãã é玢åŒã䜿çšãããå šææ€çŽ¢çšã«ãã¹ãŠã®äžæã®åèªãšé¢é£ããã¥ã¡ã³ããå«ãŸããŸããããã¯ãApache Lucene æ€çŽ¢ãšã³ãžã³ã«åºã¥ããŠããŸãã
æµæ¢ãªD ã¯ãããŒã¿ãåéããã³äœ¿çšããéã«ããŒã¿ãçµ±åããããŒã¿ ã³ã¬ã¯ã¿ãŒã§ãã å¯èœãªéã JSON ã§ããŒã¿ãæŽçããããšããŸãã ãã®ã¢ãŒããã¯ãã£ã¯æ¡åŒµå¯èœã§ãããããã«å€ãã®ãã®ããããŸã
æšå Ž - æç³»ååæãã°ã©ãåæãæ©æ¢°åŠç¿ãªã©ã®ããŸããŸãªè¿œå æ©èœãåãã Elasticsearch çšã®ããŒã¿èŠèŠåããŒã«ã
Elasticsearch ã¢ãŒããã¯ãã£
Elasticsearch ã¯ã©ã¹ã¿ãŒã®ããŒã¿ã¯ããã®ãã¹ãŠã®ããŒãã«åæ£ããŠä¿åãããŸãã ã¯ã©ã¹ã¿ãŒã¯ãå¯çšæ§ãšåŸ©å åãåäžãããããã«è€æ°ã®ããŒãã§æ§æãããŸãã ã©ã®ããŒããã¯ã©ã¹ã¿ãŒã®ãã¹ãŠã®åœ¹å²ãå®è¡ã§ããŸããã倧èŠæš¡ãªã¹ã±ãŒã«ã¢ãŠãå±éã§ã¯ãéåžžãããŒãã«ã¯åå¥ã®ã¿ã¹ã¯ãå²ãåœãŠãããŸãã
ã¯ã©ã¹ã¿ãŒããŒãã®ã¿ã€ã:
- ãã¹ã¿ãŒããŒã - ã¯ã©ã¹ã¿ãŒã管çããŸããå°ãªããšã XNUMX ã€ãå¿ èŠã§ãXNUMX ã€ã¯åžžã«ã¢ã¯ãã£ãã§ãã
- ããŒã¿ ããŒã - ã€ã³ããã¯ã¹ä»ãããŒã¿ãä¿åããããã䜿çšããŠããŸããŸãªã¿ã¹ã¯ãå®è¡ããŸãã
- åã蟌ã¿ããŒã - ã€ã³ããã¯ã¹ä»ãã®åã«ããŒã¿ãå€æããããã®ãã€ãã©ã€ã³ãç·šæããŸãã
- 調æŽããŒã - ãªã¯ãšã¹ãã®ã«ãŒãã£ã³ã°ãæ€çŽ¢åŠçãã§ãŒãºã®ççž®ã倧éã®ã€ã³ããã¯ã¹ä»ãã®èª¿æŽã
- ã¢ã©ãŒãããŒã â ã¢ã©ãŒãã¿ã¹ã¯ã®èµ·åã
- æ©æ¢°åŠç¿ããŒã - æ©æ¢°åŠç¿ã¿ã¹ã¯ãåŠçããŸãã
以äžã®å³ã¯ãããé«ãããŒã¿å¯çšæ§ãå®çŸããããã«ãããŒãéã§ããŒã¿ãã©ã®ããã«ä¿åããã³è€è£œããããã瀺ããŠããŸãã
åã¬ããªã«ã®ããŒã¿ã¯è»¢çœ®ã€ã³ããã¯ã¹ã«ä¿åãããŸãã以äžã®å³ã¯ããããã©ã®ããã«èµ·ãããã瀺ããŠããŸãã
ã€ã³ã¹ããŒã«
詳现ãé²èŠ§ã§ããŸã
$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elastics
PLGã¹ã¿ãã¯
ãã®é åèªãèŠã€ãããªããŠãé©ããªãã§ãã ãããGrafana Loki ãšããŠããç¥ãããŠããŸãã ãããã«ããããã®ã¹ã¿ãã¯ã¯å®çžŸã®ããæè¡ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠããããã人æ°ãé«ãŸã£ãŠããŸãã 人æ°ã®ããèŠèŠåããŒã«ã§ãã Grafana ã«ã€ããŠã¯ããã§ã«èããããšããããããããŸããã ãã®äœæè ã¯ãPrometheus ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãŠãæ°Žå¹³ã¹ã±ãŒã©ãã«ãªé«æ§èœãã°éçŽã·ã¹ãã ã§ãã Loki ãéçºããŸããã Loki ã¯ãžã£ãŒãã«èªäœã§ã¯ãªãã¡ã¿ããŒã¿ã®ã¿ã«ã€ã³ããã¯ã¹ãäœæããŸããããã¯ã䜿ããããã³ã¹ãå¹çã®é«ãæè¡ãœãªã¥ãŒã·ã§ã³ã§ãã
ããã ããŒã« - ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãã Loki ã¯ã©ã¹ã¿ãŒã«ãã°ãéä¿¡ãããšãŒãžã§ã³ãã ã°ã©ãã¡ã ã¯ãLoki ã®ããŒã¿ã«åºã¥ãèŠèŠåããŒã«ã§ãã
Loki 㯠Prometheus ãšåãåçã«åºã¥ããŠæ§ç¯ãããŠãããããKubernetes ãã°ã®ä¿åãšåæã«é©ããŠããŸãã
ããã®å»ºç¯
Loki ã¯åäžããã»ã¹ãšããŠå®è¡ããããšããè€æ°ã®ããã»ã¹ãšããŠå®è¡ããããšãã§ããæ°Žå¹³æ¹åã®ã¹ã±ãŒãªã³ã°ãå¯èœã§ãã
ã¢ããªã·ã㯠ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãã€ã¯ããµãŒãã¹ãšããŠãæ©èœããŸãã åäžããã»ã¹ãšããŠå®è¡ãããšãããŒã«ã«éçºãå°èŠæš¡ãªç£èŠã«åœ¹ç«ã¡ãŸãã ç£æ¥çšã®å®è£ ãšã¹ã±ãŒã©ãã«ãªã¯ãŒã¯ããŒãã®å Žåã¯ããã€ã¯ããµãŒãã¹ ãªãã·ã§ã³ã䜿çšããããšããå§ãããŸãã ããŒã¿ã®æžã蟌ã¿ãšèªã¿åãã®ãã¹ãåé¢ãããŠãããããå¿ èŠã«å¿ããŠåŸ®èª¿æŽãããæ¡åŒµãããã§ããŸãã
詳现ã«ã¯è§Šããã«ããã°åéã·ã¹ãã ã®ã¢ãŒããã¯ãã£ãèŠãŠã¿ãŸãããã
説æã¯æ¬¡ã®ãšããã§ã (ãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£)ã
ã³ã³ããŒãã³ãïŒ
ããã ããŒã« â ããŒãã« (ãµãŒãã¹ã®ã»ãããšããŠ) ã€ã³ã¹ããŒã«ããããšãŒãžã§ã³ããã¿ã¹ã¯ãããã°ãåé€ããKubernetes API ã«ã¢ã¯ã»ã¹ããŠãã°ã«ã¿ã°ãä»ããã¡ã¿ããŒã¿ãååŸããŸãã 次ã«ããã°ãã¡ã€ã³ã® Loki ãµãŒãã¹ã«éä¿¡ããŸãã ã¡ã¿ããŒã¿ ãããã³ã°ã¯ãPrometheus ãšåãã¿ã°ä»ãã«ãŒã«ããµããŒãããŸãã
ãã£ã¹ããªãã¥ãŒã¿ãŒ â ãããã¡ãšããŠæ©èœãããµãŒãã¹ãã£ã¹ããªãã¥ãŒã¿ã æ°çŸäžã®ã¬ã³ãŒããåŠçããããã«ãåä¿¡ããŒã¿ãããã¯ããåä¿¡æã«ãããã¯ã«å§çž®ããŸãã è€æ°ã®ããŒã¿ ã·ã³ã¯ãåæã«å®è¡ãããŠããŸããã3 ã€ã®åä¿¡ããŒã¿ ã¹ããªãŒã ã«å±ãããã°ã¯ããã®ãã¹ãŠã®ãããã¯ã«ã€ããŠãã®ãã¡ã® XNUMX ã€ã«ã®ã¿è¡šç€ºãããå¿ èŠããããŸãã ããã¯ãã·ã³ã¯ã®ãªã³ã°ãšé 次ããã·ã¥ã§æ§æãããŸãã ãã©ãŒã«ã ãã¬ã©ã³ã¹ãšåé·æ§ã®ããã«ããã㯠n å (æ§æãããŠããªãå Žå㯠XNUMX å) å®è¡ãããŸãã
ã€ã³ãžã§ã¹ã¿ãŒ â ãµãŒãã¹åä¿¡è ã ããŒã¿ ãããã¯ã¯ããã°ãè¿œå ãããŠå§çž®ãããŠå°çããŸãã ãããã¯ãååãªãµã€ãºã«ãªããšããããã¯ã¯ããŒã¿ããŒã¹ã«ãã©ãã·ã¥ãããŸãã ã¡ã¿ããŒã¿ã¯ã€ã³ããã¯ã¹ã«éããããã° ãããã¯ã®ããŒã¿ã¯ãã£ã³ã¯ (éåžžã¯ãªããžã§ã¯ã ã¹ãã¬ãŒãž) ã«éãããŸãã ãªã»ããåŸãåä¿¡æ©ã¯æ°ãããããã¯ãäœæããããã«æ°ãããšã³ããªãè¿œå ãããŸãã
ã€ã³ããã¯ã¹ - ããŒã¿ããŒã¹ãDynamoDBãCassandraãGoogle BigTable ãªã©ã
ãã£ã³ã¯ â å§çž®åœ¢åŒã®ãã° ãããã¯ãéåžžã¯ãªããžã§ã¯ã ã¹ãã¬ãŒãž (S3 ãªã©) ã«ä¿åãããŸãã
ã¯ãšãªã¢ - ãã¹ãŠã®æ±ãä»äºãè¡ãèªã¿åããã¹ã æéç¯å²ãšã¿ã€ã ã¹ã¿ã³ãã調ã¹ãŠãããã€ã³ããã¯ã¹ã調ã¹ãŠäžèŽãããã®ãèŠã€ããŸãã 次ã«ãããŒã¿ã®ãããã¯ãèªã¿åãããã£ã«ã¿ãªã³ã°ããŠçµæãååŸããŸãã
ããã§ã¯ãå®éã®åäœãèŠãŠã¿ãŸãããã
ã€ã³ã¹ããŒã«
Kubernetes ã«ã€ã³ã¹ããŒã«ããæãç°¡åãªæ¹æ³ã¯ãhelm ã䜿çšããããšã§ãã ãã§ã«ã€ã³ã¹ããŒã«ããŠæ§æããŠããããšãåæãšããŠããŸã (
ãªããžããªãè¿œå ããã¹ã¿ãã¯ãã€ã³ã¹ããŒã«ããŸãã
$ helm repo add loki https://grafana.github.io/loki/charts
$ helm repo update
$ helm upgrade --install loki loki/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false
以äžã¯ãPrometheus for Etcd ã¡ããªã¯ã¹ãš Loki for Etcd ããã ãã°ã®ããŒã¿ã衚瀺ããããã·ã¥ããŒãã®äŸã§ãã
ããã§ãäž¡æ¹ã®ã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã«ã€ããŠèª¬æãããããã®æ©èœãçžäºã«æ¯èŒããŸãããã
æ¯èŒ
ã¯ãšãªèšèª
Elasticsearch ã¯ãQuery DSL ãš Lucene ã¯ãšãªèšèªã䜿çšããŠãå šææ€çŽ¢æ©èœãæäŸããŸãã ããã¯ãå¹ åºããªãã¬ãŒã¿ãŒããµããŒããã確ç«ããã匷åãªæ€çŽ¢ãšã³ãžã³ã§ãã ããã䜿çšãããšãã³ã³ããã¹ãã§æ€çŽ¢ããé¢é£æ§ã§äžŠã¹æ¿ããããšãã§ããŸãã
ãªã³ã°ã®å察åŽã«ã¯ãPromQL (Prometheus ã¯ãšãªèšèª) ã®åŸç¶ã§ãã Loki ã§äœ¿çšããã LogQL ããããŸãã ãã°ã¿ã°ã䜿çšããŠãã°ããŒã¿ããã£ã«ã¿ãªã³ã°ããŠéžæããŸãã 説æãããŠããããã«ãããã€ãã®æŒç®åãšç®è¡ã䜿çšããããšãã§ããŸãã
Loki ã®ã¯ãšãªã¯ã¿ã°ã«é¢é£ä»ããããŠãããããã¡ããªã¯ã¹ãšã®é¢é£ä»ãã容æã«ãªãããã®çµæãéçšç£èŠãæŽçãããããªããŸãã
ã¹ã±ãŒã©ããªãã£
ã©ã¡ãã®ã¹ã¿ãã¯ãæ°Žå¹³æ¹åã«ã¹ã±ãŒã©ãã«ã§ãããLoki ã«ã¯åå¥ã®èªã¿åããã¹ãšæžã蟌ã¿ãã¹ãšãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ããããããããã容æã«ãªããŸãã Loki ã¯ããŒãºã«åãããŠã«ã¹ã¿ãã€ãºã§ããéåžžã«å€§éã®ãã° ããŒã¿ã«äœ¿çšã§ããŸãã
ãã«ãããã³ã·ãŒ
ã¯ã©ã¹ã¿ãŒã®ãã«ãããã³ã㯠OPEX ã®ç¥èªã§å
±éã®ããŒãã§ãããäž¡æ¹ã®ã¹ã¿ãã¯ããã«ãããã³ããæäŸããŸãã Elasticsearchã«ã¯ããã€ããããŸã
ã®ã³ã¹ã
Loki ã¯ããŒã¿ã®ã€ã³ããã¯ã¹ãäœæãããã¡ã¿ããŒã¿ã®ã¿ãäœæãããããéåžžã«ã³ã¹ãå¹çãé«ããªããŸãã ããã«ããã
ãŸãšã
EFK ã¹ã¿ãã¯ã¯ããŸããŸãªç®çã«äœ¿çšã§ããåæãèŠèŠåãã¯ãšãªã®ããã®æ倧éã®æè»æ§ãšæ©èœè±å¯ãª Kibana ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã æ©æ¢°åŠç¿æ©èœã«ãã£ãŠããã«åŒ·åããããšãã§ããŸãã
Loki ã¹ã¿ãã¯ã¯ããã®ã¡ã¿ããŒã¿æ€åºã¡ã«ããºã ã«ãããKubernetes ãšã³ã·ã¹ãã ã§åœ¹ç«ã¡ãŸãã Grafana ãšãã°ã®æç³»åã«åºã¥ããŠãç£èŠããããŒã¿ãç°¡åã«é¢é£ä»ããããšãã§ããŸãã
ã³ã¹ããšé·æãã° ã¹ãã¬ãŒãžã«é¢ããŠèšãã°ãLoki ã¯ã¯ã©ãŠã ãœãªã¥ãŒã·ã§ã³ãžã®åªãããšã³ããªãŒ ãã€ã³ãã§ãã
åžå Žã«ã¯ããã«å€ãã®ä»£æ¿åãããããã®äžã«ã¯ããªãã«ãšã£ãŠããè¯ããã®ããããããããŸããã ããšãã°ãGKE ã«ã¯ Stackdriver ãçµ±åãããŠãããåªããã¢ãã¿ãªã³ã° ãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ãã®èšäºã®åæã«ã¯ããããå«ããŸããã§ããã
ãªã³ã¯ïŒ
https://github.com/grafana/loki/blob/master/docs/overview/comparisons.md https://www.elastic.co/blog/found-elasticsearch-from-the-bottom-up https://www.elastic.co/blog/found-elasticsearch-in-production/
ãã®èšäºã¯åŸæ¥å¡ã«ãã£ãŠç¿»èš³ãããHabr åãã«äœæãããŸããã
åºæïŒ habr.com