Kubernetes ã¢ãã¿ãªã³ã°ã®æŠå¿µãæ€èšããPrometheus ããŒã«ã«ã€ããŠç解ããã¢ã©ãŒãã«ã€ããŠè©±ããŸãã
ã¢ãã¿ãªã³ã°ã®ãããã¯ã¯èšå€§ã§ãããXNUMX ã€ã®èšäºã§å解ããããšã¯ã§ããŸããã ãã®ããã¹ãã®ç®çã¯ãããŒã«ãæŠå¿µãã¢ãããŒãã®æŠèŠãæäŸããããšã§ãã
èšäºã®å
容ã¯ããçµãããŠããŸã
Kubernetes ã¯ã©ã¹ã¿ãŒã§ç£èŠããããã®
ç©çãµãŒããŒã Kubernetes ã¯ã©ã¹ã¿ãŒããµãŒããŒäžã«ãããã€ãããŠããå Žåã¯ããµãŒããŒã®ç¶æ ãç£èŠããå¿ èŠããããŸãã Zabbix ã¯ãã®ã¿ã¹ã¯ãåŠçããŸãã ããªãã圌ãšäžç·ã«åããªããããªãã¯æåŠããå¿ èŠã¯ãããŸãããè¡çªã¯ãããŸããã ãµãŒããŒã®ç¶æ ãç£èŠããã®ã¯ Zabbix ã§ãã
ã¯ã©ã¹ã¿ãŒã¬ãã«ã§ã®ç£èŠã«ç§»ããŸãããã
ã³ã³ãããŒã« ãã¬ãŒã³ã®ã³ã³ããŒãã³ã: APIãã¹ã±ãžã¥ãŒã©ãªã©ã å°ãªããšãããµãŒããŒãŸã㯠etcd ã® API ã 0 ãã倧ããããšã確èªããå¿ èŠããããŸããEtcd ã¯ãå転ããŠãããã£ã¹ã¯ã etcd ã¯ã©ã¹ã¿ãŒã®å¥å šæ§ãªã©ãå€ãã®ã¡ããªã¯ã¹ãè¿ãããšãã§ããŸãã
ããã«ãŒ ããªãåã«ç»å Žãããã®åé¡ç¹ã¯èª°ããããç¥ã£ãŠããŸããå€ãã®ã³ã³ãããããªãŒãºããã®ä»ã®åé¡ãåŒãèµ·ãããŸãã ãããã£ãŠãã·ã¹ãã ãšããŠã® Docker èªäœããå°ãªããšãå¯çšæ§ã«é¢ããŠã¯å¶åŸ¡ãããå¿ èŠããããŸãã
DNS ã¯ã©ã¹ã¿ãŒå 㧠DNS ãåæ¢ãããšããã®åŸ Discovery ãµãŒãã¹å šäœãåæ¢ãããããããããããžã®åŒã³åºããæ©èœããªããªããŸãã ç§ã®å®è·µã§ã¯ãã®ãããªåé¡ã¯ãããŸããã§ãããããã㯠DNS ã®ç¶æ ãç£èŠããå¿ èŠããªãããšãæå³ãããã®ã§ã¯ãããŸããã ãªã¯ãšã¹ãã®ã¬ã€ãã³ã·ããã®ä»ã®ã¡ããªã¯ã¹ã¯ãCoreDNS ã§è¿œè·¡ã§ããŸãã
é²å ¥ã ãããžã§ã¯ããžã®ãšã³ã㪠ãã€ã³ããšããŠã®ã€ã³ã°ã¬ã¹ (ã€ã³ã°ã¬ã¹ ã³ã³ãããŒã©ãŒãå«ã) ã®å¯çšæ§ãå¶åŸ¡ããå¿ èŠããããŸãã
ã¯ã©ã¹ã¿ãŒã®äž»èŠã³ã³ããŒãã³ãã¯è§£äœãããŸããã次ã«ãæœè±¡åã®ã¬ãã«ã«é²ã¿ãŸãããã
ã¢ããªã±ãŒã·ã§ã³ã¯ãããå ã§å®è¡ããããããå¶åŸ¡ããå¿ èŠãããããã«èŠããŸãããå®éã¯ããã§ã¯ãããŸããã ãããã¯äžæçãªãã®ã§ããä»æ¥ã¯ 10 ã€ã®ãµãŒããŒã§å®è¡ãããææ¥ã¯å¥ã®ãµãŒããŒã§å®è¡ãããŸãã ä»æ¥ã¯ 2 åã§ãããææ¥ã¯ XNUMX åã«ãªããŸãããããã£ãŠãããããç£èŠãã人ã¯èª°ãããŸããã ãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£å ã§ã¯ãã¢ããªã±ãŒã·ã§ã³å šäœã®å¯çšæ§ãå¶åŸ¡ããããšãããéèŠã§ãã ç¹ã«ããµãŒãã¹ ãšã³ããã€ã³ãã®å¯çšæ§ã確èªããŠãã ãããäœãæ©èœããŠããã? ã¢ããªã±ãŒã·ã§ã³ãå©çšå¯èœãªå Žåããã®èåŸã§äœãèµ·ãã£ãŠããã®ããçŸåšã¬ããªã«ãããã€ããããããã㯠XNUMX çªç®ã®è³ªåã§ãã åã ã®ã€ã³ã¹ã¿ã³ã¹ãç£èŠããå¿ èŠã¯ãããŸããã
æåŸã®ã¬ãã«ã§ã¯ãã¢ããªã±ãŒã·ã§ã³èªäœã®åäœãå¶åŸ¡ãã泚ææ°ããŠãŒã¶ãŒã®è¡åãªã©ã®ããžãã¹ææšãååŸããå¿ èŠããããŸãã
ããã¡ããŠã¹
ã¯ã©ã¹ã¿ãŒãç£èŠããã®ã«æé©ãªã·ã¹ãã ã¯æ¬¡ã®ãšããã§ãã
Prometheus ã䜿ãå§ããã«ã¯ãããã€ãã®ãªãã·ã§ã³ããããŸããHelm ã䜿çšãããšãéåžžã® Prometheus ãŸã㯠Prometheus Operator ãã€ã³ã¹ããŒã«ã§ããŸãã
- ãã€ãã®ããã¡ããŠã¹ã 圌ã«ãšã£ãŠã¯ãã¹ãŠåé¡ãããŸããããConfigMap ãæ§æããå¿ èŠããããŸããå®éã«ã¯ã以åã«è¡ã£ãããã«ããã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã®åã«ããã¹ãããŒã¹ã®æ§æãã¡ã€ã«ãäœæããŸãã
- Prometheus Operator ã¯ããå°ãåºããããããå éšããžãã¯ã®ç¹ã§ã¯å°ãè€éã§ãããæäœã¯ç°¡åã§ããåå¥ã®ãªããžã§ã¯ãããããæœè±¡åãã¯ã©ã¹ã¿ãŒã«è¿œå ããããããå¶åŸ¡ãšæ§æãã¯ããã«äŸ¿å©ã§ãã
補åãç解ããã«ã¯ããŸãéåžžã® Prometheus ãã€ã³ã¹ããŒã«ããããšããå§ãããŸãã config ãéããŠãã¹ãŠãæ§æããå¿ èŠããããŸãããããã¯æçã§ããäœãäœã«å±ããã©ã®ããã«æ§æãããŠããããç解ã§ããããã«ãªããŸãã Prometheus Operator ã§ã¯ãããã«é«ãæœè±¡åã«å°éã§ããŸãããå¿ èŠã«å¿ããŠããã«æ·±ãæãäžããããšãã§ããŸãã
Prometheus 㯠Kubernetes ãšé©åã«çµ±åãããŠãããAPI ãµãŒããŒã«ã¢ã¯ã»ã¹ããŠå¯Ÿè©±ããããšãã§ããŸãã
Prometheus ã¯äººæ°ããããããå€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãããã°ã©ãã³ã°èšèªã Prometheus ããµããŒãããŠããŸãã Prometheus ã«ã¯ç¬èªã®ã¡ããªã¯ã¹åœ¢åŒããããããã転éããã«ã¯ãã¢ããªã±ãŒã·ã§ã³å ã®ã©ã€ãã©ãªãŸãã¯æ¢è£œã®ãšã¯ã¹ããŒã¿ãŒãå¿ èŠãªããããµããŒããå¿ èŠã§ãã ãããŠããã®ãããªèŒžåºæ¥è ã¯ããªãã®æ°ãããŸãã ããšãã°ãPostgreSQL Exporter ããããŸãããã㯠PostgreSQL ããããŒã¿ãååŸããããã Prometheus 圢åŒã«å€æããŠãPrometheus ãæäœã§ããããã«ããŸãã
ããã¡ããŠã¹ã®ã¢ãŒããã¯ãã£
PrometheusãµãŒã㌠ããã¯ãšã³ããããã¡ããŠã¹ã®é è³ã§ãã ã¡ããªã¯ã¹ã¯ããã«ä¿åãããåŠçãããŸãã
ã¡ããªã¯ã¹ã¯æç³»åããŒã¿ããŒã¹ (TSDB) ã«ä¿åãããŸãã TSDB ã¯å¥åã®ããŒã¿ããŒã¹ã§ã¯ãªããPrometheus ã«çµã¿èŸŒãŸãã Go èšèªã®ããã±ãŒãžã§ãã 倧ãŸãã«èšãã°ããã¹ãŠã XNUMX ã€ã®ãã€ããªå ã«ãããŸãã
TSDBã«ããŒã¿ãé·æéä¿åããªãã§ãã ãã
Prometheus ã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãã¡ããªã¯ã¹ã®é·æä¿åã«ã¯é©ããŠããŸããã ããã©ã«ãã®ä¿åæé㯠15 æ¥éã§ãã ãã®å¶éãè¶ ããããšãã§ããŸãããTSDB ã«ä¿åããããŒã¿ãå¢ããä¿åããæéãé·ããªãã«ã€ããŠãããå€ãã®ãªãœãŒã¹ãæ¶è²»ãããããšã«æ³šæããŠãã ããã Prometheus ã«å±¥æŽããŒã¿ãä¿åããããšã¯æªãç¿æ £ã§ãããšèããããŠããŸãã
倧éã®ãã©ãã£ãã¯ããããã¡ããªã¯ã¹ã®æ°ã XNUMX ç§ãããæ°åäžä»¶ã«éããå Žåã¯ããã£ã¹ã¯å®¹éãŸãã¯æéã«ãã£ãŠã¹ãã¬ãŒãžãå¶éããããšããå§ãããŸãã éåžžããããã ããŒã¿ã㯠TSDB ã«ä¿åãããã¡ããªã¯ã¹ã¯ãããæ°æéã§ä¿åãããŸãã ããé·ãã¹ãã¬ãŒãžã®å Žåã¯ãInfluxDBãClickHouse ãªã©ãããã«é©ããããŒã¿ããŒã¹ã§å€éšã¹ãã¬ãŒãžã䜿çšãããŸãã ClickHouse ã«ã€ããŠã®è¯ãã¬ãã¥ãŒãããã«èŠãŸããã
Prometheus Server ã¯ã¢ãã«äžã§åäœããŸã ãã«: 圌ã¯ãç§ãã¡ã圌ã«äžãããšã³ããã€ã³ããžã®ã¡ããªã¯ã¹ãæ¢ãã«è¡ããŸãã 圌ãã¯ãAPI ãµãŒããŒã«è¡ã£ãŠããšèšã£ãã®ã§ã圌㯠n çªç®ã®ç§ããšã«ããã«è¡ããã¡ããªã¯ã¹ãååŸããŸããã
ã¹ã¯ã¬ã€ãã³ã°æéã®éã«åºçŸããå¯èœæ§ã®ããæå¹æéãçããªããžã§ã¯ã (ãžã§ããŸã㯠cron ãžã§ã) ã®å Žåã¯ãPushgateway ã³ã³ããŒãã³ãããããŸãã çæãªããžã§ã¯ãããã®ã¡ããªã¯ã¹ãããã·ã¥ã²ãŒããŠã§ã€ã«ããã·ã¥ãããŸããã€ãŸãããžã§ããéå§ãããã¢ã¯ã·ã§ã³ãå®è¡ãããã¡ããªã¯ã¹ã Pushgateway ã«éä¿¡ãããå®äºããŸããã ãã°ãããããšãPrometheus ã¯ç¬èªã®ããŒã¹ã§ããŠã³ããPushgateway ãããããã®ã¡ããªã¯ã¹ãååŸããŸãã
Prometheus ã§éç¥ãèšå®ããã«ã¯ãå¥ã®ã³ã³ããŒãã³ãããããŸã - ã¢ã©ãŒããããŒãžã£ãŒã ãããŠãèŠåã«ãŒã«ã ããšãã°ããµãŒã㌠API ã 0 ã®å Žåãã¢ã©ãŒããäœæããå¿ èŠããããŸããã€ãã³ããçºçãããšãã¢ã©ãŒãã¯ããã«ãã£ã¹ãããããããã«ã¢ã©ãŒã ãããŒãžã£ãŒã«æž¡ãããŸãã ã¢ã©ãŒã ãããŒãžã£ãŒã«ã¯éåžžã«æè»ãªã«ãŒãã£ã³ã°èšå®ããããã¢ã©ãŒãã® XNUMX ã€ã®ã°ã«ãŒãã管çè ã®ãã¬ã°ã©ã ãã£ããã«éä¿¡ããå¥ã®ã°ã«ãŒããéçºè ã®ãã£ããã«éä¿¡ããXNUMX çªç®ã®ã°ã«ãŒããã€ã³ãã©ã¹ãã©ã¯ãã£äœæ¥è ã®ãã£ããã«éä¿¡ã§ããŸãã éç¥ã¯ãSlackãTelegramãé»åã¡ãŒã«ããã®ä»ã®ãã£ãã«ã«éä¿¡ã§ããŸãã
ãããŠæåŸã«ãPrometheus ã®ãã©ãŒæ©èœã«ã€ããŠã話ããŸã - çºèŠããã Prometheus ã䜿çšããå Žåãç£èŠãããªããžã§ã¯ãã®ç¹å®ã®ã¢ãã¬ã¹ãæå®ããå¿ èŠã¯ãªãããªããžã§ã¯ãã®ã¿ã€ããèšå®ããã ãã§ååã§ãã ã€ãŸãããããã« IP ã¢ãã¬ã¹ãããã«ããŒã - ã¢ãã¿ãŒããšèšè¿°ããå¿ èŠã¯ãªãã代ããã«ãã©ã®ãããªååã«åŸã£ãŠãããã®ãªããžã§ã¯ããèŠã€ãããã決å®ããå¿ èŠããããŸã (ã¿ãŒã²ãã - ç®æš)ã Prometheus èªäœã¯ãçŸåšã¢ã¯ãã£ããªãªããžã§ã¯ãã«å¿ããŠãå¿ èŠãªãªããžã§ã¯ããååŸããç£èŠã«è¿œå ããŸãã
ãã®ã¢ãããŒãã¯ããã¹ãŠãæµ®åãã Kubernetes æ§é ã«ããé©åããŸããä»æ¥ã¯ 10 å°ã®ãµãŒããŒããããææ¥ã¯ 3 å°ã«ãªããŸãããµãŒããŒã® IP ã¢ãã¬ã¹ãæ¯åæå®ããªãããã«ããããã«ããµãŒããŒã¯ãã® IP ã¢ãã¬ã¹ãèŠã€ããæ¹æ³ãäžåºŠæžããŸããããã㊠Discovering ããããå®è¡ããŸãã ã
ããã¡ããŠã¹èšèªã¯æ¬¡ã®ããã«åŒã°ããŸãã PromQLã ãã®èšèªã䜿çšãããšãç¹å®ã®ã¡ããªã¯ã¹ã®å€ãååŸããŠå€æãããããã«åºã¥ããŠåæèšç®ãæ§ç¯ã§ããŸãã
https://prometheus.io/docs/prometheus/latest/querying/basics/
ÐÑПÑÑПй запÑПÑ
container_memory_usage_bytes
ÐаÑеЌаÑОÑеÑкОе ПпеÑаÑОО
container_memory_usage_bytes / 1024 / 1024
ÐÑÑÑПеММÑе ÑÑМкÑОО
sum(container_memory_usage_bytes) / 1024 / 1024
УÑПÑМеМОе запÑПÑа
100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)
ããã¡ããŠã¹ Web ã€ã³ã¿ãŒãã§ãŒã¹
Prometheus ã«ã¯ãç¬èªã®ããªããããã«ãª Web ã€ã³ã¿ãŒãã§ã€ã¹ããããŸãã ãããã°ãŸãã¯ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã«ã®ã¿é©ããŠããŸãã
Expression è¡ã§ã¯ãPromQL èšèªã§ã¯ãšãªãäœæã§ããŸãã
[ã¢ã©ãŒã] ã¿ãã«ã¯ã¢ã©ãŒã ã«ãŒã«ãå«ãŸããŠããããããã«ã¯æ¬¡ã® XNUMX ã€ã®ã¹ããŒã¿ã¹ããããŸãã
- inactive - çŸæç¹ã§ã¢ã©ãŒããã¢ã¯ãã£ãã§ãªãå Žåãã€ãŸãããã¹ãŠåé¡ãªããæ©èœããªãã£ãå Žåã
- ä¿çäž - ã¢ã©ãŒãã¯æ©èœããããéä¿¡ããŸã å®äºããŠããªãå Žåã§ãã é 延ã¯ããããã¯ãŒã¯ã®ç¹æ» ãè£æ£ããããã«èšå®ãããŸããæå®ããããµãŒãã¹ã XNUMX å以å ã«èµ·åããå Žåãã¢ã©ãŒã ã¯ãŸã 鳎ããããã¹ãã§ã¯ãããŸããã
- èµ·åã¯ãã¢ã©ãŒããç¹ç¯ããŠã¡ãã»ãŒãžãéä¿¡ãã XNUMX çªç®ã®ã¹ããŒã¿ã¹ã§ãã
[ã¹ããŒã¿ã¹] ã¡ãã¥ãŒã§ã¯ãPrometheus ã«ã€ããŠã®æ å ±ã«ã¢ã¯ã»ã¹ã§ããŸãã äžã§èª¬æããã¿ãŒã²ããïŒç®æšïŒãžã®ç§»è¡ããããŸãã
Prometheus ã€ã³ã¿ãŒãã§ã€ã¹ã®è©³çŽ°ãªæŠèŠã«ã€ããŠã¯ã次ãåç
§ããŠãã ããã
ã°ã©ãã¡ããšã®çµ±å
Prometheus Web ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ãã¯ã©ã¹ã¿ãŒã®ç¶æ ã«é¢ããçµè«ãå°ãåºãããã®çŸããããããããã°ã©ãã¯ãããŸããã ããããæ§ç¯ããããã«ãPrometheus 㯠Grafana ãšçµ±åãããŠããŸãã ãã®ãããªããã·ã¥ããŒããå ¥æããŸãã
Prometheus ãš Grafana ã®çµ±åã®ã»ããã¢ããã¯ãŸã£ããé£ãããããŸãããæé ã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã
次ã®èšäºã§ã¯ãç£èŠã®ãããã¯ãç¶ç¶ããŸããGrafana Loki ãšä»£æ¿ããŒã«ã䜿çšãããã°ã®åéãšåæã«ã€ããŠèª¬æããŸãã
èè
: Marcel Ibraevãèªå® Kubernetes 管çè
ã瀟å
ã®çŸåœ¹ãšã³ãžãã¢
åºæïŒ habr.com