ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ืื ื• ื‘-Badoo ืขื•ืงื‘ื™ื ื›ืœ ื”ื–ืžืŸ ืื—ืจ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช ื•ืžืขืจื™ื›ื™ื ื”ืื ืœื”ืฉืชืžืฉ ื‘ื”ืŸ ื‘ืžืขืจื›ืช ืฉืœื ื• ืื• ืœื. ืื ื—ื ื• ืจื•ืฆื™ื ืœื—ืœื•ืง ืืช ืื—ื“ ืžื”ืžื—ืงืจื™ื ื”ืืœื” ืขื ื”ืงื”ื™ืœื”. ื”ื•ื ืžื•ืงื“ืฉ ืœ-Loki, ืžืขืจื›ืช ืฆื‘ื™ืจืช ื™ื•ืžื ื™ื.

Loki ื”ื•ื ืคืชืจื•ืŸ ืœืื—ืกื•ืŸ ื•ืฆืคื™ื™ื” ื‘ื™ื•ืžื ื™ื, ื•ืขืจื™ืžื” ื–ื• ืžืกืคืงืช ื’ื ืžืขืจื›ืช ื’ืžื™ืฉื” ืœื ื™ืชื•ื—ื ื•ืฉืœื™ื—ืช ื ืชื•ื ื™ื ืœ-Prometheus. ื‘ื—ื•ื“ืฉ ืžืื™ ืฉื•ื—ืจืจ ืขื“ื›ื•ืŸ ื ื•ืกืฃ, ืฉืžืงื•ื“ื ื‘ืื•ืคืŸ ืคืขื™ืœ ืขืœ ื™ื“ื™ ื”ื™ื•ืฆืจื™ื. ืขื ื™ื™ืŸ ืื•ืชื ื• ืžื” ืœื•ืงื™ ื™ื›ื•ืœ ืœืขืฉื•ืช, ืื™ืœื• ืชื›ื•ื ื•ืช ื”ื•ื ืžืกืคืง, ื•ืขื“ ื›ืžื” ื”ื•ื ื™ื›ื•ืœ ืœืฉืžืฉ ื›ื—ืœื•ืคื” ืœ-ELK, ื”ืขืจื™ืžื” ืฉื‘ื” ืื ื• ืžืฉืชืžืฉื™ื ื›ืขืช.

ืžื” ื–ื” ืœื•ืงื™

Grafana Loki ื”ื•ื ืกื˜ ืจื›ื™ื‘ื™ื ืœืžืขืจื›ืช ืจื™ืฉื•ื ืฉืœืžื”. ื‘ื ื™ื’ื•ื“ ืœืžืขืจื›ื•ืช ื“ื•ืžื•ืช ืื—ืจื•ืช, ืœื•ืงื™ ืžื‘ื•ืกืกืช ืขืœ ื”ืจืขื™ื•ืŸ ืฉืœ ื™ืฆื™ืจืช ืื™ื ื“ืงืก ืจืง ืฉืœ ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ื™ื•ืžืŸ - ืชื•ื•ื™ื•ืช (ื‘ื“ื™ื•ืง ื›ืžื• ื‘-Prometheus), ื•ื“ื—ื™ืกืช ื”ื™ื•ืžื ื™ื ืขืฆืžื ื–ื” ืœืฆื“ ื–ื” ืœื’ื•ืฉื™ื ื ืคืจื“ื™ื.

ื“ืฃ ื”ื‘ื™ืช, GitHub

ืœืคื ื™ ืฉืื ื™ ื ื›ื ืก ืœืžื” ืฉืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืขื ืœื•ืงื™, ืื ื™ ืจื•ืฆื” ืœื”ื‘ื”ื™ืจ ืœืžื” ื”ื›ื•ื•ื ื” ื‘"ืจืขื™ื•ืŸ ืฉืœ ื”ื•ืกืคืช ืžื˜ื ื ืชื•ื ื™ื ืœืื™ื ื“ืงืก ื‘ืœื‘ื“". ื”ื‘ื” ื ืฉื•ื•ื” ืืช ื’ื™ืฉืช Loki ื•ืืช ื’ื™ืฉืช ื”ืื™ื ื“ืงืก ื‘ืคืชืจื•ื ื•ืช ืžืกื•ืจืชื™ื™ื, ื›ื’ื•ืŸ Elasticsearch, ื‘ืืžืฆืขื•ืช ื“ื•ื’ืžื” ืฉืœ ืฉื•ืจื” ืžื™ื•ืžืŸ nginx:

172.19.0.4 - - [01/Jun/2020:12:05:03 +0000] "GET /purchase?user_id=75146478&item_id=34234 HTTP/1.1" 500 8102 "-" "Stub_Bot/3.0" "0.001"

ืžืขืจื›ื•ืช ืžืกื•ืจืชื™ื•ืช ืžื ืชื—ื•ืช ืืช ื›ืœ ื”ืฉื•ืจื”, ื›ื•ืœืœ ืฉื“ื•ืช ืขื ืขืจื›ื™ user_id ื•-item_id ื™ื™ื—ื•ื“ื™ื™ื ืจื‘ื™ื, ื•ืžืื—ืกื ื•ืช ื”ื›ืœ ื‘ืื™ื ื“ืงืกื™ื ื’ื“ื•ืœื™ื. ื”ื™ืชืจื•ืŸ ื‘ื’ื™ืฉื” ื–ื• ื”ื•ื ืฉื ื™ืชืŸ ืœื”ืจื™ืฅ ืฉืื™ืœืชื•ืช ืžื•ืจื›ื‘ื•ืช ื‘ืžื”ื™ืจื•ืช, ืžื›ื™ื•ื•ืŸ ืฉื›ืžืขื˜ ื›ืœ ื”ื ืชื•ื ื™ื ื ืžืฆืื™ื ื‘ืื™ื ื“ืงืก. ืื‘ืœ ืืชื” ืฆืจื™ืš ืœืฉืœื ืขืœ ื–ื” ื‘ื›ืš ืฉื”ืžื“ื“ ื”ื•ืคืš ื’ื“ื•ืœ, ืžื” ืฉืžืชื•ืจื’ื ืœื“ืจื™ืฉื•ืช ื–ื™ื›ืจื•ืŸ. ื›ืชื•ืฆืื” ืžื›ืš, ืื™ื ื“ืงืก ื”ื˜ืงืกื˜ ื”ืžืœื ืฉืœ ื”ื™ื•ืžื ื™ื ื“ื•ืžื” ื‘ื’ื•ื“ืœื• ืœื™ื•ืžื ื™ื ืขืฆืžื. ืขืœ ืžื ืช ืœื—ืคืฉ ื‘ืžื”ื™ืจื•ืช ื“ืจื›ื•, ื™ืฉ ืœื˜ืขื•ืŸ ืืช ื”ืื™ื ื“ืงืก ืœื–ื™ื›ืจื•ืŸ. ื•ื›ื›ืœ ืฉื™ื•ืชืจ ื™ื•ืžื ื™ื, ื”ืื™ื ื“ืงืก ื’ื“ืœ ืžื”ืจ ื™ื•ืชืจ ื•ื”ื•ื ืฆื•ืจืš ื™ื•ืชืจ ื–ื™ื›ืจื•ืŸ.

ื’ื™ืฉืช ืœื•ืงื™ ื“ื•ืจืฉืช ืœื—ืœืฅ ืžื”ืžื—ืจื•ื–ืช ืจืง ืืช ื”ื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื, ืฉืžืกืคืจ ื”ืขืจื›ื™ื ืฉืœื”ื ืงื˜ืŸ. ื›ืš ืื ื—ื ื• ืžืงื‘ืœื™ื ืื™ื ื“ืงืก ืงื˜ืŸ ื•ื ื•ื›ืœ ืœื—ืคืฉ ืืช ื”ื ืชื•ื ื™ื ืขืœ ื™ื“ื™ ืกื™ื ื•ืŸ ืœืคื™ ื–ืžืŸ ื•ืฉื“ื•ืช ื‘ืื™ื ื“ืงืก, ื•ืœืื—ืจ ืžื›ืŸ ืœืกืจื•ืง ืืช ื”ืฉืืจ ืขื ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื ืื• ื—ื™ืคื•ืฉื™ ืžื—ืจื•ื–ืช ืžืฉื ื”. ื”ืชื”ืœื™ืš ืœื ื ืจืื” ื”ืžื”ื™ืจ ื‘ื™ื•ืชืจ, ืื‘ืœ ืœื•ืงื™ ืžืคืฆืœ ืืช ื”ื‘ืงืฉื” ืœืžืกืคืจ ื—ืœืงื™ื ื•ืžื‘ืฆืข ืื•ืชื ื‘ืžืงื‘ื™ืœ, ื•ืžืขื‘ื“ ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ื ืชื•ื ื™ื ื‘ื–ืžืŸ ืงืฆืจ. ืžืกืคืจ ื”ืจืกื™ืกื™ื ื•ื”ื‘ืงืฉื•ืช ื”ืžืงื‘ื™ืœื•ืช ื‘ื”ื ื ื™ืชืŸ ืœื”ื’ื“ืจื”; ืœืคื™ื›ืš, ื›ืžื•ืช ื”ื ืชื•ื ื™ื ืฉื ื™ืชืŸ ืœืขื‘ื“ ืœื™ื—ื™ื“ืช ื–ืžืŸ ืชืœื•ื™ื” ื‘ืื•ืคืŸ ืœื™ื ื™ืืจื™ ื‘ื›ืžื•ืช ื”ืžืฉืื‘ื™ื ื”ืžืกื•ืคืงื™ื.

ื”ื”ื—ืœืคื” ื”ื–ื• ื‘ื™ืŸ ืžื“ื“ ืžื”ื™ืจ ื’ื“ื•ืœ ืœื‘ื™ืŸ ืžื“ื“ ื›ื•ื— ื’ืก ืžืงื‘ื™ืœ ืงื˜ืŸ ืžืืคืฉืจ ืœืœื•ืงื™ ืœืฉืœื•ื˜ ื‘ืขืœื•ืช ื”ืžืขืจื›ืช. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ื•ืœื”ืจื—ื™ื‘ ืื•ืชื• ื‘ื’ืžื™ืฉื•ืช ื‘ื”ืชืื ืœืฆืจื›ื™ื ืฉืœืš.

ืขืจื™ืžืช ืœื•ืงื™ ืžื•ืจื›ื‘ืช ืžืฉืœื•ืฉื” ืžืจื›ื™ื‘ื™ื: Promtail, Loki, Grafana. Promtail ืื•ืกืคืช ื™ื•ืžื ื™ื, ืžืขื‘ื“ืช ืื•ืชื ื•ืฉื•ืœื—ืช ืื•ืชื ืœืœื•ืงื™. ืœื•ืงื™ ืฉื•ืžืจ ืขืœื™ื”ื. ื•ื’ืจืคื™ื ื” ื™ื›ื•ืœื” ืœื‘ืงืฉ ื ืชื•ื ื™ื ืžืœื•ืงื™ ื•ืœื”ืจืื•ืช ืื•ืชื. ื‘ืื•ืคืŸ ื›ืœืœื™, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืœื•ืงื™ ืœื ืจืง ืœืื—ืกื•ืŸ ื™ื•ืžื ื™ื ื•ืœื—ื™ืคื•ืฉ ื“ืจื›ื. ื”ืขืจื™ืžื” ื›ื•ืœื” ืžืกืคืงืช ื”ื–ื“ืžื ื•ื™ื•ืช ื ื”ื“ืจื•ืช ืœืขื™ื‘ื•ื“ ื•ื ื™ืชื•ื— ื ืชื•ื ื™ื ื ื›ื ืกื™ื ื‘ืืžืฆืขื•ืช ืฉื™ื˜ืช ืคืจื•ืžืชืื•ืก.
ื ื™ืชืŸ ืœืžืฆื•ื ืชื™ืื•ืจ ืฉืœ ืชื”ืœื™ืš ื”ื”ืชืงื ื” ื›ืืŸ.

ื—ื™ืคื•ืฉ ื™ื•ืžืŸ

ืืชื” ื™ื›ื•ืœ ืœื—ืคืฉ ื‘ื™ื•ืžื ื™ื ื‘ืžืžืฉืง ืžื™ื•ื—ื“ Grafana โ€” Explorer. ื”ืฉืื™ืœืชื•ืช ืžืฉืชืžืฉื•ืช ื‘ืฉืคืช LogQL, ืฉื“ื•ืžื” ืžืื•ื“ ืœ-PromQL ืฉื‘ื” ืžืฉืชืžืฉ ืคืจื•ืžืชืื•ืก. ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ื ื™ืชืŸ ืœื—ืฉื•ื‘ ืขืœื™ื• ื›-grep ืžื‘ื•ื–ืจ.

ืžืžืฉืง ื”ื—ื™ืคื•ืฉ ื ืจืื” ื›ืš:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ื”ืฉืื™ืœืชื” ืขืฆืžื” ืžื•ืจื›ื‘ืช ืžืฉื ื™ ื—ืœืงื™ื: ื‘ื•ืจืจ ื•ืžืกื ืŸ. ื‘ื•ืจืจ ื”ื•ื ื—ื™ืคื•ืฉ ืœืคื™ ืžื˜ื ื ืชื•ื ื™ื (ืชื•ื•ื™ื•ืช) ืฉื”ื•ืงืฆื• ืœื™ื•ืžื ื™ื, ื•ืคื™ืœื˜ืจ ื”ื•ื ืžื—ืจื•ื–ืช ื—ื™ืคื•ืฉ ืื• ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™ ืฉืžืกื ื ืช ืจืฉื•ืžื•ืช ืฉื”ื•ื’ื“ืจื• ืขืœ ื™ื“ื™ ื”ื‘ื•ืจืจ. ื‘ื“ื•ื’ืžื” ื”ื ืชื•ื ื”: ื‘ืกื•ื’ืจื™ื™ื ืžืกื•ืœืกืœื™ื - ื”ื‘ื•ืจืจ, ื”ื›ืœ ืื—ืจื™ - ื”ืคื™ืœื˜ืจ.

{image_name="nginx.promtail.test"} |= "index"

ื‘ื’ืœืœ ื”ืื•ืคืŸ ืฉื‘ื• ืœื•ืงื™ ืขื•ื‘ื“, ืœื ื ื™ืชืŸ ืœื”ื’ื™ืฉ ื‘ืงืฉื•ืช ืœืœื ื‘ื•ืจืจ, ืืš ื ื™ืชืŸ ืœื”ืคื•ืš ืืช ื”ืชื•ื•ื™ื•ืช ืœื’ื ืจื™ื•ืช ื‘ืื•ืคืŸ ืฉืจื™ืจื•ืชื™.

ื”ื‘ื•ืจืจ ื”ื•ื ืขืจืš ื”ืžืคืชื— ืฉืœ ื”ืขืจืš ื‘ืกื•ื’ืจื™ื ืžืกื•ืœืกืœื™ื. ื ื™ืชืŸ ืœืฉืœื‘ ื‘ื•ืจืจื™ื ื•ืœืฆื™ื™ืŸ ืชื ืื™ ื—ื™ืคื•ืฉ ืฉื•ื ื™ื ื‘ืืžืฆืขื•ืช ื”ืื•ืคืจื˜ื•ืจื™ื =, != ืื• ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื:

{instance=~"kafka-[23]",name!="kafka-dev"} 
// ะะฐะนะดั‘ั‚ ะปะพะณะธ ั ะปะตะนะฑะปะพะผ instance, ะธะผะตัŽั‰ะธะต ะทะฝะฐั‡ะตะฝะธะต kafka-2, kafka-3, ะธ ะธัะบะปัŽั‡ะธั‚ dev 

ืžืกื ืŸ ื”ื•ื ื˜ืงืกื˜ ืื• ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™ ืฉื™ืกื ืŸ ืืช ื›ืœ ื”ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ืขืœ ื™ื“ื™ ื”ื‘ื•ืจืจ.

ืืคืฉืจ ืœืงื‘ืœ ื’ืจืคื™ื ืื“-ื”ื•ืง ืขืœ ืกืžืš ื”ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ื‘ืžืฆื‘ ื”ืžื“ื“ื™ื. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœื’ืœื•ืช ืืช ืชื“ื™ืจื•ืช ื”ื”ืชืจื—ืฉื•ืช ื‘ื™ื•ืžื ื™ nginx ืฉืœ ืขืจืš ื”ืžื›ื™ืœ ืืช ืžื—ืจื•ื–ืช ื”ืื™ื ื“ืงืก:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ื ื™ืชืŸ ืœืžืฆื•ื ืชื™ืื•ืจ ืžืœื ืฉืœ ื”ืชื›ื•ื ื•ืช ื‘ืชื™ืขื•ื“ LogQL.

ื ื™ืชื•ื— ื™ื•ืžืŸ

ื™ืฉื ืŸ ืžืกืคืจ ื“ืจื›ื™ื ืœืื™ืกื•ืฃ ื™ื•ืžื ื™ื:

  • ื‘ืขื–ืจืช Promtail, ืจื›ื™ื‘ ืกื˜ื ื“ืจื˜ื™ ืฉืœ ื”ืžื—ืกื ื™ืช ืœืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ.
  • ื™ืฉื™ืจื•ืช ืžืžื™ื›ืœ ื”ื“ื•ืงืจ ื‘ืืžืฆืขื•ืช ืžื ื”ืœ ื”ืœื•ื’ื™ื ื’ ืฉืœ ืœื•ืงื™ ื“ื•ืงืจ.
  • ื”ืฉืชืžืฉ ื‘- Fluentd ืื• Fluent Bit ืฉื™ื›ื•ืœื™ื ืœืฉืœื•ื— ื ืชื•ื ื™ื ืœืœื•ืงื™. ื‘ื ื™ื’ื•ื“ ืœ-Promtail, ื™ืฉ ืœื”ื ืžื ืชื—ื™ื ืžื•ื›ื ื™ื ื›ืžืขื˜ ืœื›ืœ ืกื•ื’ ืฉืœ ื™ื•ืžืŸ ื•ื”ื ื™ื›ื•ืœื™ื ืœื”ืชืžื•ื“ื“ ื’ื ืขื ื™ื•ืžื ื™ื ืžืจื•ื‘ื™ ืฉื•ืจื•ืช.

ื‘ื“ืจืš ื›ืœืœ Promtail ืžืฉืžืฉ ืœื ื™ืชื•ื—. ื–ื” ืขื•ืฉื” ืฉืœื•ืฉื” ื“ื‘ืจื™ื:

  • ืžื•ืฆื ืžืงื•ืจื•ืช ื ืชื•ื ื™ื.
  • ืฆืจืฃ ืœื”ื ืชื•ื•ื™ื•ืช.
  • ืฉื•ืœื— ื ืชื•ื ื™ื ืœืœื•ืงื™.

ื ื›ื•ืŸ ืœืขื›ืฉื™ื•, Promtail ื™ื›ื•ืœ ืœืงืจื•ื ื™ื•ืžื ื™ื ืžืงื‘ืฆื™ื ืžืงื•ืžื™ื™ื ื•ืžื™ื•ืžืŸ systemd. ื–ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžื•ืชืงืŸ ื‘ื›ืœ ืžื›ื•ื ื” ืฉืžืžื ื” ื ืืกืคื™ื ื™ื•ืžื ื™ื.

ื™ืฉ ืื™ื ื˜ื’ืจืฆื™ื” ืขื Kubernetes: Promtail ืžื’ืœื” ืื•ื˜ื•ืžื˜ื™ืช ืืช ืžืฆื‘ ื”ืืฉื›ื•ืœ ื“ืจืš Kubernetes REST API ื•ืื•ืกืคืช ื™ื•ืžื ื™ื ืžืฆื•ืžืช, ืฉื™ืจื•ืช ืื• ืคื•ื“, ื•ืžืคืจืกืžืช ืžื™ื“ ืชื•ื•ื™ื•ืช ื”ืžื‘ื•ืกืกื•ืช ืขืœ ืžื˜ื ื ืชื•ื ื™ื ืž-Kubernetes (ืฉื ื”ืคื•ื“, ืฉื ื”ืงื•ื‘ืฅ ื•ื›ื•').

ื ื™ืชืŸ ื’ื ืœืชืœื•ืช ืชื•ื•ื™ื•ืช ืขืœ ืกืžืš ื ืชื•ื ื™ื ืžื”ื™ื•ืžืŸ ื‘ืืžืฆืขื•ืช Pipeline. Pipeline Promtail ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื•ืจื›ื‘ ืžืืจื‘ืขื” ืกื•ื’ื™ื ืฉืœ ืฉืœื‘ื™ื. ืคืจื˜ื™ื ื ื•ืกืคื™ื - ื‘ ืชื™ืขื•ื“ ืจืฉืžื™, ืžื™ื“ ืืฆื™ื™ืŸ ื›ืžื” ืžื”ื ื™ื•ืื ืกื™ื.

  1. ืฉืœื‘ื™ ื ื™ืชื•ื—. ื–ื” ื”ืฉืœื‘ ืฉืœ RegEx ื•-JSON. ื‘ืฉืœื‘ ื–ื”, ืื ื• ืžื—ืœืฆื™ื ื ืชื•ื ื™ื ืžื”ื™ื•ืžื ื™ื ืœืชื•ืš ื”ืžืคื” ืฉื ืงืจืืช ืฉื—ื•ืœืฆื”. ืืชื” ื™ื›ื•ืœ ืœื—ืœืฅ ืž-JSON ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ื”ืขืชืงืช ื”ืฉื“ื•ืช ืฉืื ื• ืฆืจื™ื›ื™ื ืœืชื•ืš ื”ืžืคื” ืฉื—ื•ืœืฆื”, ืื• ื‘ืืžืฆืขื•ืช ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื (RegEx), ื›ืืฉืจ ืงื‘ื•ืฆื•ืช ืขื ืฉื "ืžืžื•ืคื•ืช" ืœืžืคื” ืฉื—ื•ืœืฆื”. ื”ืžืคื” ืฉื—ื•ืœืฆื” ื”ื™ื ืื—ืกื•ืŸ ืžืคืชื—-ืขืจืš, ื›ืืฉืจ ืžืคืชื— ื”ื•ื ืฉื ื”ืฉื“ื”, ื•ื”ืขืจืš ื”ื•ื ืขืจื›ื• ืžื”ื™ื•ืžื ื™ื.
  2. ืฉื™ื ื•ื™ ืฉืœื‘ื™ื. ืœืฉืœื‘ ื–ื” ื™ืฉ ืฉืชื™ ืืคืฉืจื•ื™ื•ืช: ื˜ืจื ืกืคื•ืจืžืฆื™ื”, ืฉื‘ื” ืื ื• ืงื•ื‘ืขื™ื ืืช ื›ืœืœื™ ื”ื˜ืจื ืกืคื•ืจืžืฆื™ื”, ื•ืžืงื•ืจ - ืžืงื•ืจ ื”ื ืชื•ื ื™ื ืœื˜ืจื ืกืคื•ืจืžืฆื™ื” ืžื”ืžืคื” ืฉื—ื•ืœืฆื”. ืื ืื™ืŸ ืฉื“ื” ื›ื–ื” ื‘ืžืคื” ืฉื—ื•ืœืฆื”, ืื– ื”ื•ื ื™ื™ื•ื•ืฆืจ. ื›ืš, ื ื™ืชืŸ ืœื™ืฆื•ืจ ืชื•ื•ื™ื•ืช ืฉืื™ื ืŸ ืžื‘ื•ืกืกื•ืช ืขืœ ื”ืžืคื” ืฉื—ื•ืœืฆื”. ื‘ืฉืœื‘ ื–ื”, ืื ื• ื™ื›ื•ืœื™ื ืœืชืคืขืœ ืืช ื”ื ืชื•ื ื™ื ื‘ืžืคื” ืฉื—ื•ืœืฆื” ื‘ืืžืฆืขื•ืช ืฉื™ืžื•ืฉ ื—ื–ืง ืœืžื“ื™ ืชื‘ื ื™ืช ื’ื•ืœื ื’. ื‘ื ื•ืกืฃ, ืขืœื™ื ื• ืœื–ื›ื•ืจ ืฉื”ืžืคื” ืฉื—ื•ืœืฆื” ื ื˜ืขื ื” ื‘ืžืœื•ืื” ื‘ืžื”ืœืš ื”ื ื™ืชื•ื—, ืžื” ืฉืžืืคืฉืจ ืœืžืฉืœ ืœื‘ื“ื•ืง ืืช ื”ืขืจืš ื‘ื”: "{{if .tag}tag value exists{end}}". ื”ืชื‘ื ื™ืช ืชื•ืžื›ืช ื‘ืชื ืื™ื, ื‘ืœื•ืœืื•ืช ื•ื‘ื›ืžื” ืคื•ื ืงืฆื™ื•ืช ืžื—ืจื•ื–ื•ืช ื›ื’ื•ืŸ Replace ื•-Trim.
  3. ืฉืœื‘ื™ ืคืขื•ืœื”. ื‘ืฉืœื‘ ื–ื”, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืžืฉื”ื• ืขื ื”ื—ื™ืœื•ืฅ:
    • ืฆื•ืจ ืชื•ื•ื™ืช ืžื”ื ืชื•ื ื™ื ืฉื—ื•ืœืฆื•, ืฉืชื•ื›ื ืก ืœืื™ื ื“ืงืก ืขืœ ื™ื“ื™ ืœื•ืงื™.
    • ืฉื ื” ืื• ื”ื’ื“ืจ ืืช ื–ืžืŸ ื”ืื™ืจื•ืข ืžื”ื™ื•ืžืŸ.
    • ืฉื ื” ืืช ื”ื ืชื•ื ื™ื (ื˜ืงืกื˜ ื™ื•ืžืŸ) ืฉื™ืขื‘ืจื• ืœืœื•ืงื™.
    • ืฆื•ืจ ืžื“ื“ื™ื.
  4. ืฉืœื‘ื™ ืกื™ื ื•ืŸ. ืฉืœื‘ ื”ื”ืชืืžื”, ืฉื‘ื• ื ื•ื›ืœ ืœืฉืœื•ื— ืจืฉื•ืžื•ืช ืฉืื™ื ื ื• ืฆืจื™ื›ื™ื ืœ-/dev/null, ืื• ืœืฉืœื•ื— ืื•ืชืŸ ืœืขื™ื‘ื•ื“ ื ื•ืกืฃ.

ื‘ืขื–ืจืช ื”ื“ื•ื’ืžื” ืฉืœ ืขื™ื‘ื•ื“ ื™ื•ืžื ื™ nginx ืจื’ื™ืœื™ื, ืืจืื” ื›ื™ืฆื“ ื ื™ืชืŸ ืœื ืชื— ื™ื•ืžื ื™ื ื‘ืืžืฆืขื•ืช Promtail.

ืœื‘ื“ื™ืงื”, ื ื™ืงื— ืชืžื•ื ืช nginx jwilder/nginx-proxy:alpine ืฉื•ื ื” ื•ื“ืžื•ืŸ ืงื˜ืŸ ืฉื™ื›ื•ืœ ืœื‘ืฆืข ืฉืื™ืœืชื•ืช ื‘ืขืฆืžื• ื‘ืืžืฆืขื•ืช HTTP ื‘ืชื•ืจ nginx-proxy. ืœื“ืžื•ืŸ ื™ืฉ ื›ืžื” ื ืงื•ื“ื•ืช ืงืฆื”, ืœื”ืŸ ื”ื•ื ื™ื›ื•ืœ ืœืชืช ืชื’ื•ื‘ื•ืช ื‘ื’ื“ืœื™ื ืฉื•ื ื™ื, ืขื ืกื˜ื˜ื•ืกื™ื ืฉื•ื ื™ื ืฉืœ HTTP ื•ืขื ืขื™ื›ื•ื‘ื™ื ืฉื•ื ื™ื.

ื ืืกื•ืฃ ื™ื•ืžื ื™ื ืžืžื›ื•ืœื•ืช docker, ืื•ืชืŸ ื ื™ืชืŸ ืœืžืฆื•ื ืœืื•ืจืš ื”ื ืชื™ื‘ /var/lib/docker/containers/ / -json.log

ื‘-docker-compose.yml ืื ื• ืžื’ื“ื™ืจื™ื ืืช Promtail ื•ืžืฆื™ื™ื ื™ื ืืช ื”ื ืชื™ื‘ ืœืชืฆื•ืจื”:

promtail:
  image: grafana/promtail:1.4.1
 // ...
 volumes:
   - /var/lib/docker/containers:/var/lib/docker/containers:ro
   - promtail-data:/var/lib/promtail/positions
   - ${PWD}/promtail/docker.yml:/etc/promtail/promtail.yml
 command:
   - '-config.file=/etc/promtail/promtail.yml'
 // ...

ื”ื•ืกืฃ ืืช ื”ื ืชื™ื‘ ืœืœื•ื’ื™ื ืœ-promtail.yml (ื™ืฉ ืืคืฉืจื•ืช "ื“ื•ืงืจ" ื‘ืชืฆื•ืจื” ืฉืขื•ืฉื” ืืช ืื•ืชื• ื”ื“ื‘ืจ ื‘ืฉื•ืจื” ืื—ืช, ืื‘ืœ ื–ื” ืœื ื™ื”ื™ื” ื›ืœ ื›ืš ื‘ืจื•ืจ):

scrape_configs:
 - job_name: containers

   static_configs:
       labels:
         job: containerlogs
         __path__: /var/lib/docker/containers/*/*log  # for linux only

ื›ืืฉืจ ืชืฆื•ืจื” ื–ื• ืžื•ืคืขืœืช, ืœื•ืงื™ ื™ืงื‘ืœ ื™ื•ืžื ื™ื ืžื›ืœ ื”ืงื•ื ื˜ื™ื™ื ืจื™ื. ื›ื“ื™ ืœื”ื™ืžื ืข ืžื›ืš, ืื ื• ืžืฉื ื™ื ืืช ื”ื”ื’ื“ืจื•ืช ืฉืœ test nginx ื‘-docker-compose.yml - ื”ื•ืกืฃ ืจื™ืฉื•ื ืœืฉื“ื” ื”ืชื’:

proxy:
 image: nginx.test.v3
//โ€ฆ
 logging:
   driver: "json-file"
   options:
     tag: "{{.ImageName}}|{{.Name}}"

ืขืจื•ืš ืืช promtail.yml ื•ื”ื’ื“ืจ Pipeline. ื”ื™ื•ืžื ื™ื ื”ื ื›ื“ืœืงืžืŸ:

{"log":"u001b[0;33;1mnginx.1    | u001b[0mnginx.test 172.28.0.3 - - [13/Jun/2020:23:25:50 +0000] "GET /api/index HTTP/1.1" 200 0 "-" "Stub_Bot/0.1" "0.096"n","stream":"stdout","attrs":{"tag":"nginx.promtail.test|proxy.prober"},"time":"2020-06-13T23:25:50.66740443Z"}
{"log":"u001b[0;33;1mnginx.1    | u001b[0mnginx.test 172.28.0.3 - - [13/Jun/2020:23:25:50 +0000] "GET /200 HTTP/1.1" 200 0 "-" "Stub_Bot/0.1" "0.000"n","stream":"stdout","attrs":{"tag":"nginx.promtail.test|proxy.prober"},"time":"2020-06-13T23:25:50.702925272Z"}

ืฉืœื‘ื™ ืฆื™ื ื•ืจ:

 - json:
     expressions:
       stream: stream
       attrs: attrs
       tag: attrs.tag

ืื ื• ืžื—ืœืฆื™ื ืืช ืฉื“ื•ืช ื”ื–ืจื, attrs, attrs.tag (ืื ื™ืฉ) ืžื”-JSON ื”ื ื›ื ืก ื•ืžื›ื ื™ืกื™ื ืื•ืชื ืœืžืคื” ืฉื—ื•ืœืฆื”.

 - regex:
     expression: ^(?P<image_name>([^|]+))|(?P<container_name>([^|]+))$
     source: "tag"

ืื ื”ื™ื” ืืคืฉืจ ืœืฉื™ื ืืช ืฉื“ื” ื”ืชื’ ื‘ืžืคื” ืฉื—ื•ืœืฆื”, ืื– ื‘ืืžืฆืขื•ืช ื”-regexp ื ื—ืœืฅ ืืช ืฉืžื•ืช ื”ืชืžื•ื ื” ื•ื”ืžื™ื›ืœ.

 - labels:
     image_name:
     container_name:

ืื ื• ืžื—ืœืงื™ื ืชื•ื•ื™ื•ืช. ืื ื”ืžืคืชื—ื•ืช image_name ื•-container_name ื ืžืฆืื™ื ื‘ื ืชื•ื ื™ื ืฉื—ื•ืœืฆื•, ื”ืขืจื›ื™ื ืฉืœื”ื ื™ื•ืงืฆื• ืœืชื•ื•ื™ื•ืช ื”ืžืชืื™ืžื•ืช.

 - match:
     selector: '{job="docker",container_name="",image_name=""}'
     action: drop

ืื ื• ืžืฉืœื™ื›ื™ื ืืช ื›ืœ ื”ื™ื•ืžื ื™ื ืฉืื™ืŸ ืœื”ื ืชื•ื•ื™ื•ืช image_name ื•-contain_name ืžื•ื’ื“ืจื™ื.

  - match:
     selector: '{image_name="nginx.promtail.test"}'
     stages:
       - json:
           expressions:
             row: log

ืขื‘ื•ืจ ื›ืœ ื”ื™ื•ืžื ื™ื ืฉืฉื ื”-image ืฉืœื”ื ืฉื•ื•ื” ืœ-nginx.promtail.test, ืื ื• ืžื—ืœืฆื™ื ืืช ืฉื“ื” ื”ื™ื•ืžืŸ ืžื™ื•ืžืŸ ื”ืžืงื•ืจ ื•ืžื›ื ื™ืกื™ื ืื•ืชื• ืœืžืคื” ืฉื—ื•ืœืฆื” ื‘ืขื–ืจืช ืžืงืฉ ื”ืฉื•ืจื”.

  - regex:
         # suppress forego colors
         expression: .+nginx.+|.+[0m(?P<virtual_host>[a-z_.-]+) +(?P<nginxlog>.+)
         source: logrow

ืื ื• ืžื ืงื™ื ืืช ืžื—ืจื•ื–ืช ื”ืงืœื˜ ืขื ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื ื•ืฉื•ืœืคื™ื ืืช ื”ืžืืจื— ื”ื•ื™ืจื˜ื•ืืœื™ ืฉืœ nginx ื•ืืช ืฉื•ืจืช ื”ื™ื•ืžืŸ ืฉืœ nginx.

     - regex:
         source: nginxlog
         expression: ^(?P<ip>[w.]+) - (?P<user>[^ ]*) [(?P<timestamp>[^ ]+).*] "(?P<method>[^ ]*) (?P<request_url>[^ ]*) (?P<request_http_protocol>[^ ]*)" (?P<status>[d]+) (?P<bytes_out>[d]+) "(?P<http_referer>[^"]*)" "(?P<user_agent>[^"]*)"( "(?P<response_time>[d.]+)")?

ื ื™ืชื•ื— ื™ื•ืžืŸ nginx ืขื ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื.

    - regex:
           source: request_url
           expression: ^.+.(?P<static_type>jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$
     - regex:
           source: request_url
           expression: ^/photo/(?P<photo>[^/?.]+).*$
       - regex:
           source: request_url
           expression: ^/api/(?P<api_request>[^/?.]+).*$

ื ื™ืชื•ื— request_url. ื‘ืขื–ืจืช regexp, ืื ื• ืงื•ื‘ืขื™ื ืืช ืžื˜ืจืช ื”ื‘ืงืฉื”: ืœืกื˜ื˜ื™ืงื”, ืœืชืžื•ื ื•ืช, ืœ-API ื•ืœื”ื’ื“ื™ืจ ืืช ื”ืžืคืชื— ื”ืžืชืื™ื ื‘ืžืคื” ืฉื—ื•ืœืฆื”.

       - template:
           source: request_type
           template: "{{if .photo}}photo{{else if .static_type}}static{{else if .api_request}}api{{else}}other{{end}}"

ื‘ืืžืฆืขื•ืช ืื•ืคืจื˜ื•ืจื™ื ืžื•ืชื ื™ื ื‘-Template, ืื ื• ื‘ื•ื“ืงื™ื ืืช ื”ืฉื“ื•ืช ื”ืžื•ืชืงื ื™ื ื‘ืžืคื” ื”ืžื—ื•ืœืฆืช ื•ืžื’ื“ื™ืจื™ื ืืช ื”ืขืจื›ื™ื ื”ื ื“ืจืฉื™ื ืœืฉื“ื” request_type: photo, static, API. ื”ืงืฆื” ืื—ืจ ืื ื ื›ืฉืœ. ื›ืขืช request_type ืžื›ื™ืœ ืืช ืกื•ื’ ื”ื‘ืงืฉื”.

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

ืื ื—ื ื• ืžื’ื“ื™ืจื™ื ืืช ื”ืชื•ื•ื™ื•ืช api_request, virtual_host, request_type ื•-status (ืกื˜ื˜ื•ืก HTTP) ืขืœ ืกืžืš ืžื” ืฉื”ืฆืœื—ื ื• ืœืฉื™ื ื‘ืžืคื” ืฉื—ื•ืœืฆื”.

       - output:
           source: nginx_log_row

ืฉื ื” ืคืœื˜. ื›ืขืช ื™ื•ืžืŸ ื”-nginx ื”ื ื•ืงื” ืžื”ืžืคื” ืฉื—ื•ืœืฆื” ืขื•ื‘ืจ ืœืœื•ืงื™.

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ืœืื—ืจ ื”ืคืขืœืช ื”ืชืฆื•ืจื” ืœืขื™ืœ, ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉื›ืœ ืขืจืš ืžืกื•ืžืŸ ืขืœ ืกืžืš ื ืชื•ื ื™ื ืžื”ื™ื•ืžืŸ.

ื–ื›ื•ืจ ืฉื—ื™ืœื•ืฅ ืชื•ื•ื™ื•ืช ืขื ืžืกืคืจ ืจื‘ ืฉืœ ืขืจื›ื™ื (ืงืจื“ื™ื ืœื™ื•ืช) ื™ื›ื•ืœ ืœื”ืื˜ ืžืฉืžืขื•ืชื™ืช ืืช ืœื•ืงื™. ื›ืœื•ืžืจ, ืืกื•ืจ ืœื”ื›ื ื™ืก ืœืื™ื ื“ืงืก, ืœืžืฉืœ, user_id. ืงืจื ืขื•ื“ ืขืœ ื›ืš ื‘ืžืืžืจื›ื™ืฆื“ ืชื•ื•ื™ื•ืช ื‘ืœื•ืงื™ ื™ื›ื•ืœื•ืช ืœื”ืคื•ืš ืฉืื™ืœืชื•ืช ื™ื•ืžืŸ ืœืžื”ื™ืจื•ืช ื•ืงืœื•ืช ื™ื•ืชืจ". ืื‘ืœ ื–ื” ืœื ืื•ืžืจ ืฉืืชื” ืœื ื™ื›ื•ืœ ืœื—ืคืฉ ืœืคื™ user_id ืœืœื ืื™ื ื“ืงืกื™ื. ื™ืฉ ืฆื•ืจืš ืœื”ืฉืชืžืฉ ื‘ืžืกื ื ื™ื ื‘ื—ื™ืคื•ืฉ ("ืชืคื•ืก" ืœืคื™ ื”ื ืชื•ื ื™ื), ื•ื”ืื™ื ื“ืงืก ื›ืืŸ ืžืฉืžืฉ ื›ืžื–ื”ื” ื–ืจื.

ื”ื“ืžื™ื™ืช ื™ื•ืžืŸ

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ืœื•ืงื™ ื™ื›ื•ืœ ืœืฉืžืฉ ื›ืžืงื•ืจ ื ืชื•ื ื™ื ืขื‘ื•ืจ ืชืจืฉื™ืžื™ Grafana ื‘ืืžืฆืขื•ืช LogQL. ื”ืชื›ื•ื ื•ืช ื”ื‘ืื•ืช ื ืชืžื›ื•ืช:

  • ืงืฆื‘ - ืžืกืคืจ ืจืฉื•ืžื•ืช ื‘ืฉื ื™ื™ื”;
  • ืกืคื™ืจื” ืœืื•ืจืš ื–ืžืŸ - ืžืกืคืจ ื”ืจืฉื•ืžื•ืช ื‘ื˜ื•ื•ื— ื”ื ืชื•ืŸ.

ื™ืฉ ื’ื ืคื•ื ืงืฆื™ื•ืช ืฆื‘ื™ืจื” Sum, Avg ื•ืื—ืจื•ืช. ืืชื” ื™ื›ื•ืœ ืœื‘ื ื•ืช ื’ืจืคื™ื ืžื•ืจื›ื‘ื™ื ืœืžื“ื™, ืœืžืฉืœ, ื’ืจืฃ ืฉืœ ืžืกืคืจ ืฉื’ื™ืื•ืช HTTP:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ืžืงื•ืจ ื”ื ืชื•ื ื™ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืœื•ืงื™ ื”ื•ื ืงืฆืช ืคื—ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™ ืžืžืงื•ืจ ื”ื ืชื•ื ื™ื ืฉืœ ืคืจื•ืžืชืื•ืก (ืœื“ื•ื’ืžื”, ืœื ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ื”ืžืงืจื), ืื‘ืœ ืืช ืœื•ืงื™ ื ื™ืชืŸ ืœื—ื‘ืจ ื›ืžืงื•ืจ ืžืกื•ื’ ืคืจื•ืžืชืื•ืก. ืื ื™ ืœื ื‘ื˜ื•ื— ืื ื–ื• ื”ืชื ื”ื’ื•ืช ืžืชื•ืขื“ืช, ืื‘ืœ ืื ืœืฉืคื•ื˜ ืœืคื™ ืชื’ื•ื‘ืช ื”ืžืคืชื—ื™ื "ื›ื™ืฆื“ ืœื”ื’ื“ื™ืจ ืืช ืœื•ืงื™ ื›ืžืงื•ืจ ื ืชื•ื ื™ื ืฉืœ ืคืจื•ืžืชืื•ืก? ยท ื’ื™ืœื™ื•ืŸ #1222 ยท grafana/loki", ืœืžืฉืœ, ื–ื” ื—ื•ืงื™ ืœื—ืœื•ื˜ื™ืŸ ื•ืœื•ืงื™ ืชื•ืื ื‘ืื•ืคืŸ ืžืœื ืœ-PromQL.

ื”ื•ืกืฃ ืืช Loki ื›ืžืงื•ืจ ื ืชื•ื ื™ื ืขื ืกื•ื’ Prometheus ื•ื”ื•ืกืฃ ื›ืชื•ื‘ืช URL /loki:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ื•ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื’ืจืคื™ื, ื›ืื™ืœื• ืื ื—ื ื• ืขื•ื‘ื“ื™ื ืขื ืžื“ื“ื™ื ืžืคืจื•ืžืชืื•ืก:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ืื ื™ ื—ื•ืฉื‘ ืฉื”ืคืขืจ ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื•ื ื–ืžื ื™ ื•ื”ืžืคืชื—ื™ื ื™ืชืงื ื• ืืช ื–ื” ื‘ืขืชื™ื“.

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ืžื“ื“ื™ื

ืœื•ืงื™ ืžืกืคืง ืืช ื”ื™ื›ื•ืœืช ืœื—ืœืฅ ืžื“ื“ื™ื ืžืกืคืจื™ื™ื ืžื™ื•ืžื ื™ื ื•ืœืฉืœื•ื— ืื•ืชื ืœ-Prometheus. ืœื“ื•ื’ืžื”, ื™ื•ืžืŸ ื”-nginx ืžื›ื™ืœ ืืช ืžืกืคืจ ื”ื‘ืชื™ื ืœื›ืœ ืชื’ื•ื‘ื”, ื•ื’ื, ืขื ืฉื™ื ื•ื™ ืžืกื•ื™ื ืฉืœ ืคื•ืจืžื˜ ื”ื™ื•ืžืŸ ื”ืกื˜ื ื“ืจื˜ื™, ืืช ื”ื–ืžืŸ ื‘ืฉื ื™ื•ืช ืฉื ื“ืจืฉ ืœื”ื’ื™ื‘. ื ื™ืชืŸ ืœื—ืœืฅ ืืช ื”ื ืชื•ื ื™ื ื”ืœืœื• ื•ืœืฉืœื•ื— ืื•ืชื ืœ-Prometheus.

ื”ื•ืกืฃ ืงื˜ืข ื ื•ืกืฃ ืœ-promtail.yml:

- match:
   selector: '{request_type="api"}'
   stages:
     - metrics:
         http_nginx_response_time:
           type: Histogram
           description: "response time ms"
           source: response_time
           config:
             buckets: [0.010,0.050,0.100,0.200,0.500,1.0]
- match:
   selector: '{request_type=~"static|photo"}'
   stages:
     - metrics:
         http_nginx_response_bytes_sum:
           type: Counter
           description: "response bytes sum"
           source: bytes_out
           config:
             action: add
         http_nginx_response_bytes_count:
           type: Counter
           description: "response bytes count"
           source: bytes_out
           config:
             action: inc

ื”ืืคืฉืจื•ืช ืžืืคืฉืจืช ืœื”ื’ื“ื™ืจ ื•ืœืขื“ื›ืŸ ืžื“ื“ื™ื ืขืœ ืกืžืš ื ืชื•ื ื™ื ืžื”ืžืคื” ืฉื—ื•ืœืฆื”. ืžื“ื“ื™ื ืืœื• ืื™ื ื ื ืฉืœื—ื™ื ืœืœื•ืงื™ - ื”ื ืžื•ืคื™ืขื™ื ื‘ื ืงื•ื“ืช ื”ืงืฆื” Promtail /metrics. ื™ืฉ ืœื”ื’ื“ื™ืจ ืืช ืคืจื•ืžืชืื•ืก ืœืงื‘ืœ ื ืชื•ื ื™ื ืžืฉืœื‘ ื–ื”. ื‘ื“ื•ื’ืžื” ืฉืœืžืขืœื”, ืขื‘ื•ืจ request_type="api" ืื ื• ืื•ืกืคื™ื ืžื“ื“ ื”ื™ืกื˜ื•ื’ืจืžื”. ืขื ืžื“ื“ื™ื ืžืกื•ื’ ื–ื” ื ื•ื— ืœืงื‘ืœ ืื—ื•ื–ื•ื ื™ื. ืขื‘ื•ืจ ืกื˜ื˜ื™ื•ืช ื•ืชืžื•ื ื•ืช, ืื ื• ืื•ืกืคื™ื ืืช ืกื›ื•ื ื”ื‘ืชื™ื ื•ืžืกืคืจ ื”ืฉื•ืจื•ืช ื‘ื”ืŸ ืงื™ื‘ืœื ื• ื‘ืชื™ื ื›ื“ื™ ืœื—ืฉื‘ ืืช ื”ืžืžื•ืฆืข.

ืงืจื ืขื•ื“ ืขืœ ืžื“ื“ื™ื ื›ืืŸ.

ืคืชื— ื™ืฆื™ืื” ื‘-Promtail:

promtail:
     image: grafana/promtail:1.4.1
     container_name: monitoring.promtail
     expose:
       - 9080
     ports:
       - "9080:9080"

ืื ื• ืžื•ื•ื“ืื™ื ืฉื”ืžื“ื“ื™ื ืขื ื”ืงื™ื“ื•ืžืช promtail_custom ื”ื•ืคื™ืขื•:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ื”ืงืžืช ืคืจื•ืžืชืื•ืก. ื”ื•ืกืฃ ืคื™ืจื•ื˜ ืขื‘ื•ื“ื”:

- job_name: 'promtail'
 scrape_interval: 10s
 static_configs:
   - targets: ['promtail:9080']

ื•ืชืฆื™ื™ืจ ื’ืจืฃ:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ื›ืš ืชื•ื›ืœ ืœื’ืœื•ืช, ืœืžืฉืœ, ืืช ืืจื‘ืข ื”ืฉืื™ืœืชื•ืช ื”ืื™ื˜ื™ื•ืช ื‘ื™ื•ืชืจ. ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ื’ื“ื™ืจ ื ื™ื˜ื•ืจ ืขื‘ื•ืจ ืžื“ื“ื™ื ืืœื”.

ืฉื™ื ื•ื™ ืงื ื” ืžื™ื“ื”

ืœื•ืงื™ ื™ื›ื•ืœ ืœื”ื™ื•ืช ื’ื ื‘ืžืฆื‘ ื‘ื™ื ืืจื™ ื™ื—ื™ื“ ื•ื’ื ื‘-Sharded (ืžืฆื‘ ืฉื ื™ืชืŸ ืœื”ืจื—ื‘ื” ืื•ืคืงื™ืช). ื‘ืžืงืจื” ื”ืฉื ื™, ื”ื•ื ื™ื›ื•ืœ ืœืฉืžื•ืจ ื ืชื•ื ื™ื ื‘ืขื ืŸ, ื•ื”ื ืชื—ื™ื ื•ื”ืื™ื ื“ืงืก ืžืื•ื—ืกื ื™ื ื‘ื ืคืจื“. ื‘ื’ืจืกื” 1.5 ืžื™ื•ืฉืžืช ื”ื™ื›ื•ืœืช ืœืื—ืกืŸ ื‘ืžืงื•ื ืื—ื“, ืืš ืขื“ื™ื™ืŸ ืœื ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื” ื‘ื™ื™ืฆื•ืจ.

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ื ื™ืชืŸ ืœืื—ืกืŸ ื ืชื—ื™ื ื‘ืื—ืกื•ืŸ ืชื•ืื S3, ื•ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื ื”ื ื™ืชื ื™ื ืœื”ืจื—ื‘ื” ืื•ืคืงื™ืช ืœืื—ืกื•ืŸ ืื™ื ื“ืงืกื™ื: Cassandra, BigTable ืื• DynamoDB. ื—ืœืงื™ื ืื—ืจื™ื ืฉืœ Loki - ืžืคื™ืฆื™ื (ืœื›ืชื™ื‘ื”) ื•-Querier (ืœืฉืื™ืœืชื•ืช) - ื”ื ื—ืกืจื™ ืžื“ื™ื ื” ื•ื”ื ื’ื ืžื•ืชืืžื™ื ืœืจื•ื—ื‘.

ื‘ื›ื ืก DevOpsDays Vancouver 2019, ืื—ื“ ื”ืžืฉืชืชืคื™ื Callum Styan ื”ื•ื“ื™ืข โ€‹โ€‹ื›ื™ ืขื ืœื•ืงื™ ืœืคืจื•ื™ืงื˜ ืฉืœื• ื™ืฉ ืคื˜ื”-ื‘ื™ื™ื˜ ืฉืœ ื™ื•ืžื ื™ื ืขื ืื™ื ื“ืงืก ืฉืœ ืคื—ื•ืช ืž-1% ืžื”ื’ื•ื“ืœ ื”ื›ื•ืœืœ: "ื›ื™ืฆื“ ืœื•ืงื™ ืžืชืื ืžื“ื“ื™ื ื•ื™ื•ืžื ื™ื - ื•ื—ื•ืกืš ืœืš ื›ืกืฃ".

ื”ืฉื•ื•ืื” ืฉืœ ืœื•ืงื™ ื•-ELK

ื’ื•ื“ืœ ืื™ื ื“ืงืก

ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื’ื•ื“ืœ ื”ืื™ื ื“ืงืก ืฉื”ืชืงื‘ืœ, ืœืงื—ืชื™ ื™ื•ืžื ื™ื ืžืžื™ื›ืœ nginx ืฉืขื‘ื•ืจื• ื”ื•ื’ื“ืจ ื”-Pipeline ืœืขื™ืœ. ืงื•ื‘ืฅ ื”ื™ื•ืžืŸ ื”ื›ื™ืœ 406 ืฉื•ืจื•ืช ื‘ื ืคื— ื›ื•ืœืœ ืฉืœ 624 MB. ื™ื•ืžื ื™ื ื ื•ืฆืจื• ืชื•ืš ืฉืขื”, ื‘ืขืจืš 109 ืจืฉื•ืžื•ืช ื‘ืฉื ื™ื™ื”.

ื“ื•ื’ืžื” ืœืฉืชื™ ืฉื•ืจื•ืช ืžื”ื™ื•ืžืŸ:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ื›ืืฉืจ ื”ื•ื›ื ืก ืœืื™ื ื“ืงืก ืขืœ ื™ื“ื™ ELK, ื–ื” ื ืชืŸ ื’ื•ื“ืœ ืื™ื ื“ืงืก ืฉืœ 30,3 MB:

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ื‘ืžืงืจื” ืฉืœ ืœื•ืงื™, ื–ื” ื ืชืŸ ื›-128 KB ืฉืœ ืื™ื ื“ืงืก ื•ื›-3,8 MB ืฉืœ ื ืชื•ื ื™ื ื‘ื ืชื—ื™ื. ืจืื•ื™ ืœืฆื™ื™ืŸ ื›ื™ ื”ื™ื•ืžืŸ ื ื•ืฆืจ ื‘ืื•ืคืŸ ืžืœืื›ื•ืชื™ ื•ืœื ื›ืœืœ ืžื’ื•ื•ืŸ ืจื—ื‘ ืฉืœ ื ืชื•ื ื™ื. gzip ืคืฉื•ื˜ ื‘ื™ื•ืžืŸ ื”-JSON ื”ืžืงื•ืจื™ ืฉืœ Docker ืขื ื ืชื•ื ื™ื ื ืชืŸ ื“ื—ื™ืกื” ืฉืœ 95,4%, ื•ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉืจืง ื™ื•ืžืŸ ื”-nginx ื”ื ื•ืงื” ื ืฉืœื— ืœืœื•ืงื™ ืขืฆืžื•, ื”ื“ื—ื™ืกื” ืœ-4MB ืžื•ื‘ื ืช. ื”ืžืกืคืจ ื”ื›ื•ืœืœ ืฉืœ ืขืจื›ื™ื ื™ื™ื—ื•ื“ื™ื™ื ืขื‘ื•ืจ ืชื•ื•ื™ื•ืช ืœื•ืงื™ ื”ื™ื” 35, ืžื” ืฉืžืกื‘ื™ืจ ืืช ื”ื’ื•ื“ืœ ื”ืงื˜ืŸ ืฉืœ ื”ืžื“ื“. ืขื‘ื•ืจ ELK, ื’ื ื”ื™ื•ืžืŸ ื ื•ืงื”. ืœืคื™ื›ืš, ืœื•ืงื™ ื“ื—ืก ืืช ื”ื ืชื•ื ื™ื ื”ืžืงื•ืจื™ื™ื ื‘-96%, ื•-ELK ื‘-70%.

ืฆืจื™ื›ืช ื–ื™ื›ืจื•ืŸ

ืื™ืกื•ืฃ ื‘ื•ืœื™ ืขืฅ ืžืœื•ืงื™

ืื ื ืฉื•ื•ื” ืืช ื›ืœ ื”ืขืจื™ืžื” ืฉืœ ืคืจื•ืžืชืื•ืก ื•-ELK, ืื– ืœื•ืงื™ "ืื•ื›ืœ" ืคื™ ื›ืžื” ืคื—ื•ืช. ื‘ืจื•ืจ ืฉืฉื™ืจื•ืช Go ืฆื•ืจืš ืคื—ื•ืช ืžืฉื™ืจื•ืช Java, ื•ื”ืฉื•ื•ืืช ื’ื•ื“ืœ ื”-Heap Elasticsearch JVM ื•ื”ื–ื™ื›ืจื•ืŸ ืฉื”ื•ืงืฆื” ืœ-Loki ืื™ื ื” ื ื›ื•ื ื”, ืืš ืขื ื–ืืช, ืจืื•ื™ ืœืฆื™ื™ืŸ ืฉืœื•ืงื™ ืžืฉืชืžืฉ ื‘ื”ืจื‘ื” ืคื—ื•ืช ื–ื™ื›ืจื•ืŸ. ื™ืชืจื•ืŸ ื”ืžืขื‘ื“ ืฉืœื• ืœื ื›ืœ ื›ืš ื‘ืจื•ืจ, ืื‘ืœ ื”ื•ื ื’ื ืงื™ื™ื.

ืžื”ื™ืจื•ืช

ืœื•ืงื™ "ื˜ื•ืจืฃ" ื‘ื•ืœื™ ืขืฅ ืžื”ืจ ื™ื•ืชืจ. ื”ืžื”ื™ืจื•ืช ืชืœื•ื™ื” ื‘ื”ืจื‘ื” ื’ื•ืจืžื™ื - ืื™ื–ื” ืกื•ื’ ืฉืœ ืœื•ื’ื™ื, ื›ืžื” ืžืชื•ื—ื›ืžื™ื ืื ื—ื ื• ืžื ืชื—ื™ื ืื•ืชื, ืจืฉืช, ื“ื™ืกืง ื•ื›ื•' - ืื‘ืœ ื”ื™ื ื‘ื”ื—ืœื˜ ื’ื‘ื•ื”ื” ืžื–ื• ืฉืœ ELK (ื‘ื‘ื“ื™ืงื” ืฉืœื™ - ื‘ืขืจืš ืคื™ ืฉื ื™ื™ื). ื–ื” ืžื•ืกื‘ืจ ืขืœ ื™ื“ื™ ื”ืขื•ื‘ื“ื” ืฉืœื•ืงื™ ืžื›ื ื™ืก ื”ืจื‘ื” ืคื—ื•ืช ื ืชื•ื ื™ื ืœืื™ื ื“ืงืก ื•ื‘ื”ืชืื, ืžื‘ืœื” ืคื—ื•ืช ื–ืžืŸ ื‘ืื™ื ื“ืงืก. ื‘ืžืงืจื” ื–ื”, ื”ืžืฆื‘ ื”ืคื•ืš ืขื ืžื”ื™ืจื•ืช ื”ื—ื™ืคื•ืฉ: ืœื•ืงื™ ืžืื˜ ื‘ืื•ืคืŸ ื ื™ื›ืจ ื‘ื ืชื•ื ื™ื ื’ื“ื•ืœื™ื ืžื›ืžื” ื’ื™ื’ื”-ื‘ื™ื™ื˜, ื‘ืขื•ื“ ืขื‘ื•ืจ ELK, ืžื”ื™ืจื•ืช ื”ื—ื™ืคื•ืฉ ืื™ื ื” ืชืœื•ื™ื” ื‘ื’ื•ื“ืœ ื”ื ืชื•ื ื™ื.

ื—ื™ืคื•ืฉ ื™ื•ืžืŸ

ืœื•ืงื™ ื ื—ื•ืช ืžืฉืžืขื•ืชื™ืช ืž-ELK ืžื‘ื—ื™ื ืช ื™ื›ื•ืœื•ืช ื—ื™ืคื•ืฉ ื‘ื™ื•ืžืŸ. ื’ืจืค ืขื ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื ื”ื•ื ื“ื‘ืจ ื—ื–ืง, ืื‘ืœ ื–ื” ื ื—ื•ืช ืžืžืกื“ ื ืชื•ื ื™ื ืœืžื‘ื•ื’ืจื™ื. ื”ื™ืขื“ืจ ืฉืื™ืœืชื•ืช ื˜ื•ื•ื—, ืฆื‘ื™ืจื” ืจืง ืœืคื™ ืชื•ื•ื™ื•ืช, ื—ื•ืกืจ ื”ื™ื›ื•ืœืช ืœื—ืคืฉ ืœืœื ืชื•ื•ื™ื•ืช - ื›ืœ ื–ื” ืžื’ื‘ื™ืœ ืื•ืชื ื• ื‘ื—ื™ืคื•ืฉ ืื—ืจ ืžื™ื“ืข ืžืขื ื™ื™ืŸ ื‘ืœื•ืงื™. ื–ื” ืœื ืื•ืžืจ ืฉืœื ื ื™ืชืŸ ืœืžืฆื•ื ืฉื•ื ื“ื‘ืจ ื‘ืืžืฆืขื•ืช ืœื•ืงื™, ืื‘ืœ ื–ื” ืžื’ื“ื™ืจ ืืช ื–ืจื™ืžืช ื”ืขื‘ื•ื“ื” ืขื ื™ื•ืžื ื™ื, ื›ืืฉืจ ืืชื” ืžื•ืฆื ื‘ืขื™ื” ืœืจืืฉื•ื ื” ื‘ืชืจืฉื™ืžื™ื ืฉืœ ืคืจื•ืžืชืื•ืก, ื•ืื– ืžื—ืคืฉ ืžื” ืงืจื” ื‘ื™ื•ืžื ื™ื ื‘ืืžืฆืขื•ืช ื”ืชื•ื•ื™ื•ืช ื”ืœืœื•.

ืžืžืฉืง

ืจืืฉื™ืช, ื–ื” ื™ืคื” (ืกืœื™ื—ื”, ืœื ื™ื›ื•ืœืชื™ ืœื”ืชืืคืง). ืœ-Grafana ื™ืฉ ืžืžืฉืง ื ื—ืžื“ ืœืžืจืื”, ืื‘ืœ ืœ-Kibana ื”ืจื‘ื” ื™ื•ืชืจ ืคื•ื ืงืฆื™ื•ื ืœื™.

ืœื•ืงื™ ื™ืชืจื•ื ื•ืช ื•ื—ืกืจื•ื ื•ืช

ืžื”ื™ืชืจื•ื ื•ืช, ื ื™ืชืŸ ืœืฆื™ื™ืŸ ืฉืœื•ืงื™ ืžืฉืชืœื‘ ืขื ืคืจื•ืžืชืื•ืก, ื‘ื”ืชืืžื”, ืื ื• ืžืงื‘ืœื™ื ืžื“ื“ื™ื ื•ื”ืชืจืื” ืžื—ื•ืฅ ืœืงื•ืคืกื”. ื–ื” ื ื•ื— ืœืื™ืกื•ืฃ ื™ื•ืžื ื™ื ื•ืœืื—ืกื ื ืขื Kubernetes Pods, ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืœื• ื’ื™ืœื•ื™ ืฉื™ืจื•ืช ืฉืขื‘ืจ ื‘ื™ืจื•ืฉื” ืž-Prometheus ื•ืžืฆืžื™ื“ ืชื•ื•ื™ื•ืช ืื•ื˜ื•ืžื˜ื™ืช.

ืžื”ื—ืกืจื•ื ื•ืช - ืชื™ืขื•ื“ ื’ืจื•ืข. ื›ืžื” ื“ื‘ืจื™ื, ื›ืžื• ื”ืชื›ื•ื ื•ืช ื•ื”ื™ื›ื•ืœื•ืช ืฉืœ Promtail, ื’ื™ืœื™ืชื™ ืจืง ื‘ืชื”ืœื™ืš ืฉืœ ืœื™ืžื•ื“ ื”ืงื•ื“, ืืช ื”ื™ืชืจื•ืŸ ืฉืœ ืงื•ื“ ืคืชื•ื—. ื—ื™ืกืจื•ืŸ ื ื•ืกืฃ ื”ื•ื ื™ื›ื•ืœื•ืช ื”ื ื™ืชื•ื— ื”ื—ืœืฉื•ืช. ืœื“ื•ื’ืžื”, ืœื•ืงื™ ืœื ื™ื›ื•ืœ ืœื ืชื— ื™ื•ืžื ื™ื ืžืจื•ื‘ื™ ืฉื•ืจื•ืช. ื›ืžื• ื›ืŸ, ื”ื—ืกืจื•ื ื•ืช ื›ื•ืœืœื™ื ืืช ื”ืขื•ื‘ื“ื” ืฉืœื•ืงื™ ื”ื™ื ื˜ื›ื ื•ืœื•ื’ื™ื” ืฆืขื™ืจื” ื™ื—ืกื™ืช (ืžื”ื“ื•ืจื” 1.0 ื”ื™ื™ืชื” ื‘ื ื•ื‘ืžื‘ืจ 2019).

ืžืกืงื ื”

Loki ื”ื™ื ื˜ื›ื ื•ืœื•ื’ื™ื” ืžืขื ื™ื™ื ืช ืฉืœ 100% ื”ืžืชืื™ืžื” ืœืคืจื•ื™ืงื˜ื™ื ืงื˜ื ื™ื ื•ื‘ื™ื ื•ื ื™ื™ื, ื”ืžืืคืฉืจืช ืœืš ืœืคืชื•ืจ ื‘ืขื™ื•ืช ืจื‘ื•ืช ืฉืœ ืฆื‘ื™ืจืช ื™ื•ืžื ื™ื, ื—ื™ืคื•ืฉ ื™ื•ืžื ื™ื, ื ื™ื˜ื•ืจ ื•ื ื™ืชื•ื— ื™ื•ืžื ื™ื.

ืื ื—ื ื• ืœื ืžืฉืชืžืฉื™ื ื‘-Loki ื‘-Badoo, ื›ื™ ื™ืฉ ืœื ื• ืžื—ืกื ื™ืช ELK ืฉืžืชืื™ืžื” ืœื ื• ื•ืฉื˜ื•ืคืœื” ื‘ืคืชืจื•ื ื•ืช ืžื•ืชืืžื™ื ืฉื•ื ื™ื ืœืื•ืจืš ื”ืฉื ื™ื. ืขื‘ื•ืจื ื•, ืื‘ืŸ ื”ื ื’ืฃ ื”ื™ื ื”ื—ื™ืคื•ืฉ ื‘ื™ื•ืžื ื™ื. ืขื ื›ืžืขื˜ 100 GB ืฉืœ ื™ื•ืžื ื™ื ืœื™ื•ื, ื—ืฉื•ื‘ ืœื ื• ืฉื ื•ื›ืœ ืœืžืฆื•ื ื”ื›ืœ ื•ืงืฆืช ื™ื•ืชืจ ื•ืœืขืฉื•ืช ื–ืืช ื‘ืžื”ื™ืจื•ืช. ืœืฆื•ืจืš ืชืจืฉื™ืžื™ื ื•ื ื™ื˜ื•ืจ ืื ื• ืžืฉืชืžืฉื™ื ื‘ืคืชืจื•ื ื•ืช ืื—ืจื™ื ื”ืžื•ืชืืžื™ื ืœืฆืจื›ื™ื ืฉืœื ื• ื•ืžืฉื•ืœื‘ื™ื ื–ื” ื‘ื–ื”. ืœืžื—ืกื ื™ืช Loki ื™ืฉ ื™ืชืจื•ื ื•ืช ืžื•ื—ืฉื™ื™ื, ืื‘ืœ ื”ื™ื ืœื ืชื™ืชืŸ ืœื ื• ื™ื•ืชืจ ืžืžื” ืฉื™ืฉ ืœื ื•, ื•ื”ื™ืชืจื•ื ื•ืช ืฉืœื” ืœื ื‘ื“ื™ื•ืง ื™ืขืœื• ืขืœ ืขืœื•ืช ื”ื”ื’ื™ืจื”.

ื•ืœืžืจื•ืช ืฉืœืื—ืจ ืžื—ืงืจ ื”ืชื‘ืจืจ ืฉืื™ื ื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืœื•ืงื™, ืื ื• ืžืงื•ื•ื™ื ืฉื”ืคื•ืกื˜ ื”ื–ื” ื™ืขื–ื•ืจ ืœื›ื ื‘ื‘ื—ื™ืจื”.

ื”ืžืื’ืจ ืขื ื”ืงื•ื“ ื”ืžืฉืžืฉ ื‘ืžืืžืจ ื ืžืฆื ื›ืืŸ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”