เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบขเบนเปˆ Badoo, เบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฒเบกเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบŠเบตเปƒเปเปˆเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ เปเบฅเบฐ เบ›เบฐเป€เบกเบตเบ™เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเปƒเบ™เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เปƒเบ™เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบซเบผเบทเบšเปเปˆ. เบžเบงเบเป€เบฎเบปเบฒเบขเบฒเบเปเบšเปˆเบ‡เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบเบฒเบ™เบชเบถเบเบชเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเบฑเบšเบŠเบธเบกเบŠเบปเบ™. เบกเบฑเบ™เบญเบธเบ—เบดเบ”เบ•เบปเบ™เป€เบžเบทเปˆเบญ Loki, เบฅเบฐเบšเบปเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบšเบฑเบ™เบ—เบถเบ.

Loki เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบ—เบถเบ, เปเบฅเบฐ stack เบ™เบตเป‰เบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒ Prometheus. เปƒเบ™เป€เบ”เบทเบญเบ™เบžเบถเบ”เบชเบฐเบžเบฒ, เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบญเบทเปˆเบ™เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เป€เบชเบตเบกเบขเปˆเบฒเบ‡เบˆเบดเบ‡เบˆเบฑเบ‡เป‚เบ”เบเบœเบนเป‰เบชเป‰เบฒเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ Loki เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบกเบฑเบ™เบชเบฐเบซเบ™เบญเบ‡, เปเบฅเบฐเปƒเบ™เบฅเบฐเบ”เบฑเบšเปƒเบ”เบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡ ELK, stack เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™.

Loki เปเบกเปˆเบ™เบซเบเบฑเบ‡

Grafana Loki เปเบกเปˆเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป„เบกเป‰เบ—เปˆเบญเบ™. เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบญเบทเปˆเบ™เป†, Loki เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡ indexing เบžเบฝเบ‡เปเบ•เปˆ log metadata - เบ›เป‰เบฒเบเบŠเบทเปˆ (เบ„เบทเบเบฑเบ™เบเบฑเบšเปƒเบ™ Prometheus), เปเบฅเบฐเบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เบšเบฑเบ™เบ—เบถเบเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ chunks เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, GitHub

เบเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบเบฑเบš Loki, เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบ„เบงเบฒเบกเบเบฐเบˆเปˆเบฒเบ‡เปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ "เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบตเบžเบฝเบ‡เปเบ•เปˆ metadata." เปƒเบซเป‰เบ›เบฝเบšเบ—เบฝเบšเบงเบดเบ—เบตเบเบฒเบ™ 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"

เบฅเบฐเบšเบปเบšเปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก parse เปเบ–เบงเบ—เบฑเบ‡เบซเบกเบปเบ”, เบฅเบงเบกเบ—เบฑเบ‡เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™ user_id เปเบฅเบฐ item_id เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, เปเบฅเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ. เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เป„เบ”เป‰เป„เบง, เป€เบžเบฒเบฐเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบต. เปเบ•เปˆเบ™เบตเป‰เบกเบฒเปƒเบ™เบฅเบฒเบ„เบฒเบ—เบตเปˆเบ”เบฑเบ”เบŠเบฐเบ™เบตเบเบฒเบเป€เบ›เบฑเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เป€เบŠเบดเปˆเบ‡เปเบ›เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ”เบฑเบ”เบŠเบฐเบ™เบตเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบ„เบงเบฒเบกเป€เบ•เบฑเบกเปเบกเปˆเบ™เบชเบฒเบกเบฒเบ”เบ›เบฝเบšเบ—เบฝเบšเป„เบ”เป‰เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เป€เบžเบทเปˆเบญเบ„เบปเป‰เบ™เบซเบฒเบกเบฑเบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ, เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ•เป‰เบญเบ‡เบ–เบทเบเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบซเบผเบฒเบ, เบ”เบฑเบ”เบŠเบฐเบ™เบตเบˆเบฐเป€เบ•เบตเบšเป‚เบ•เป„เบงเบ‚เบถเป‰เบ™เปเบฅเบฐเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฒเบเบกเบฑเบ™เบšเปเบฅเบดเป‚เบžเบ.

เบงเบดเบ—เบตเบเบฒเบ™ Loki เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฐเบเบฑเบ”เบญเบญเบเบˆเบฒเบเบชเบฐเบ•เบฃเบดเบ‡, เบˆเปเบฒเบ™เบงเบ™เบ„เปˆเบฒเบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ. เบงเบดเบ—เบตเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ”เบฑเบ”เบชเบฐเบ™เบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ„เบปเป‰เบ™เบซเบฒเบ‚เปเป‰เบกเบนเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบกเบฑเบ™เบ•เบฒเบกเป€เบงเบฅเบฒเปเบฅเบฐเป‚เบ”เบเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ”เบฑเบ”เบชเบฐเบ™เบต, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบฐเปเบเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ”เป‰เบงเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบซเบผเบทเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ substring. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบšเปเปˆเป„เบงเบ—เบตเปˆเบชเบธเบ”, เปเบ•เปˆ Loki เปเบเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบญเบญเบเป€เบ›เบฑเบ™เบซเบผเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™, เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบงเบ‡เบซเบผเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบชเบฑเป‰เบ™เป†. เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ shards เปเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบฐเบซเบ™เบฒเบ™เปƒเบ™เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™ configurable; เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เปเปˆเบซเบปเบงเบซเบ™เปˆเบงเบเบ‚เบญเบ‡เป€เบงเบฅเบฒเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰.

เบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบเบ™เบตเป‰เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เป„เบงเปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ, เบ‚เบฐเบซเบ™เบฒเบ™ brute-force เบ”เบฑเบ”เบŠเบฐเบ™เบตเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ Loki เบ„เบงเบšเบ„เบธเบกเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš. เบกเบฑเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ•เบฑเป‰เบ‡โ€‹เปเบฅเบฐโ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เบ•เบปเบงโ€‹เบ•เบฒเบกโ€‹เบ„เบงเบฒเบกโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹.

stack Loki เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบฒเบกเบญเบปเบ‡เบ›เบฐเบเบญเบš: Promtail, Loki, Grafana. Promtail เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบ, เบ›เบธเบ‡โ€‹เปเบ•เปˆเบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปเบฅเบฐโ€‹เบชเบปเปˆเบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒ Loki. Loki เบฎเบฑเบเบชเบฒเบžเบงเบเป€เบ‚เบปเบฒ. เปเบฅเบฐ Grafana เบชเบฒเบกเบฒเบ”เบฎเป‰เบญเบ‡เบ‚เปเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ Loki เปเบฅเบฐเบชเบฐเปเบ”เบ‡เบกเบฑเบ™. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, Loki เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเบ„เบปเป‰เบ™เบซเบฒเบœเปˆเบฒเบ™เบžเบงเบเบกเบฑเบ™. stack เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฐเบซเบ™เบญเบ‡เป‚เบญเบเบฒเบ”เบ—เบตเปˆเบเบดเปˆเบ‡เปƒเบซเบเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบกเบนเบ™เบ‚เบฒเป€เบ‚เบปเป‰เบฒเป‚เบ”เบเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™ Prometheus.
เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰ เบ—เบตเปˆเบ™เบตเป‰.

เบŠเบญเบเบซเบฒเบ”เป‰เบงเบเบšเบฑเบ™เบ—เบถเบ

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบปเป‰เบ™เบซเบฒเบšเบฑเบ™เบ—เบถเบเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Grafana เบžเบดเป€เบชเบ” - Explorer. เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปƒเบŠเป‰เบžเบฒเบชเบฒ LogQL, เป€เบŠเบดเปˆเบ‡เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš PromQL เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™ Prometheus. เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ„เบดเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™ grep เปเบˆเบเบขเบฒเบ.

เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฒเบ™เบŠเบญเบเบซเบฒเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™: เบ•เบปเบงเป€เบฅเบทเบญเบเปเบฅเบฐเบ•เบปเบงเบเบญเบ‡. Selector เปเบกเปˆเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเป‚เบ”เบเปƒเบŠเป‰ metadata เบ—เบตเปˆเบ–เบทเบเบ”เบฑเบ”เบชเบฐเบ™เบต (เบ›เป‰เบฒเบเบŠเบทเปˆ) เบ—เบตเปˆเบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเปƒเบซเป‰เบšเบฑเบ™เบ—เบถเบ, เปเบฅเบฐเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบกเปˆเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ„เบปเป‰เบ™เบซเบฒเบซเบผเบท regexp เบ—เบตเปˆเบเบฑเปˆเบ™เบ•เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบ•เบปเบงเป€เบฅเบทเบญเบ. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš: เปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบš curly เบกเบตเบ•เบปเบงเป€เบฅเบทเบญเบ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ•เบปเบงเบเบญเบ‡.

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

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ Loki, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเป‚เบ”เบเบšเปเปˆเบกเบตเบ•เบปเบงเป€เบฅเบทเบญเบ, เปเบ•เปˆเบ›เป‰เบฒเบเบŠเบทเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ—เบปเปˆเบงเป„เบ›เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™.

เป‚เบ•เป€เบฅเบทเบญเบเปเบกเปˆเบ™เบ„เปˆเบฒเบซเบผเบฑเบเปƒเบ™เบงเบปเบ‡เบ›เบตเบเบเบฒ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบงเบกเบ•เบปเบงเป€เบฅเบทเบญเบเปเบฅเบฐเบฅเบฐเบšเบธเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบเบฒเบ™เบŠเบญเบเบซเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ =, != เบซเบผเบทเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด:

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

เบ•เบปเบงเบเบญเบ‡เปเบกเปˆเบ™เบ‚เปเป‰เบ„เบงเบฒเบก เบซเบผเบท regexp เบ—เบตเปˆเบˆเบฐเบเบฑเปˆเบ™เบ•เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบ•เบปเบงเป€เบฅเบทเบญเบ.

เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบŸเบชเบฐเป€เบžเบฒเบฐเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบฎเบนเบšเปเบšเบš metrics. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป„เบ”เป‰เบงเปˆเบฒเบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบกเบตเบ”เบฑเบ”เบŠเบฐเบ™เบตเบชเบฐเบ•เบฃเบดเบ‡เบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบถเบ nginx เป€เบฅเบทเป‰เบญเบเป†เบชเปเปˆเบฒเปƒเบ”:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบ•เบฑเบกเบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™ LogQL.

เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบ—เบถเบ

เบกเบตโ€‹เบซเบผเบฒเบโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹:

  • เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Promtail, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡ stack เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบšเบฑเบ™เบ—เบถเบ.
  • เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบเบ–เบฑเบ‡ docker เป‚เบ”เบเปƒเบŠเป‰ เป„เบ”เป€เบงเบตเบšเบฑเบ™เบ—เบถเบ Loki Docker.
  • เปƒเบŠเป‰ Fluentd เบซเบผเบท Fluent Bit, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒ Loki. เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบš Promtail, เบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบ•เบปเบงเปเบเบเบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเป€เบเบทเบญเบšเบ—เบธเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบซเบผเบฒเบเปเบ–เบง.

เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง Promtail เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐ. เบกเบฑเบ™เป€เบฎเบฑเบ”เบชเบฒเบกเบขเปˆเบฒเบ‡:

  • เบŠเบญเบเบซเบฒเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™.
  • เบ•เบดเบ”เบ›เป‰เบฒเบเบเบณเบเบฑเบšเปƒเบชเปˆเบžเบงเบเบกเบฑเบ™.
  • เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒ Loki.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ Promtail เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเป„เบŸเบฅเปŒเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบˆเบฒเบเบงเบฒเบฅเบฐเบชเบฒเบ™ systemd. เบกเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เปเบ•เปˆเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบšเบฑเบ™เบ—เบถเบ.

เบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบš Kubernetes: Promtail เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบœเปˆเบฒเบ™ Kubernetes REST API, เบฎเบฑเบšเบฎเบนเป‰เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบเบธเปˆเบก เปเบฅเบฐเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบšเบฑเบ™เบ—เบถเบเบˆเบฒเบ node, เบšเปเบฅเบดเบเบฒเบ™ เบซเบผเบท pod, เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบ›เบฐเบเบฒเบ”เบ›เป‰เบฒเบเบŠเบทเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ metadata เบˆเบฒเบ Kubernetes (เบŠเบทเปˆ pod, เบŠเบทเปˆเป„เบŸเบฅเปŒ, เปเบฅเบฐเบญเบทเปˆเบ™เป†) .

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบงเบฒเบ‡เบ›เป‰เบฒเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบšเบฑเบ™เบ—เบถเบเป‚เบ”เบเปƒเบŠเป‰ Pipeline. Pipeline Promtail เบชเบฒเบกเบฒเบ”เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบตเปˆเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบ‚เป‰เบญเบเบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบšเบฒเบ‡ nuances เบ—เบฑเบ™เบ—เบต.

  1. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™ RegEx เปเบฅเบฐ JSON. เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบšเบฑเบ™เบ—เบถเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเปเบœเบ™เบ—เบตเปˆเบชเบฐเบเบฑเบ”. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบฐเบเบฑเบ”เบˆเบฒเบ JSON เป‚เบ”เบเบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเบ”เบฅเบญเบเบ—เบปเปˆเบ‡เบ™เบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบฐเบเบฑเบ”เบญเบญเบ, เบซเบผเบทเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด (RegEx), เบšเปˆเบญเบ™เบ—เบตเปˆเบเบธเปˆเบกเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ–เบทเบ "เป€เบฎเบฑเบ”เปเบœเบ™เบ—เบตเปˆ" เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบœเบ™เบ—เบตเปˆเบชเบฐเบเบฑเบ”. เปเบœเบ™โ€‹เบ—เบตเปˆโ€‹เบ—เบตเปˆโ€‹เบชเบฐโ€‹เบเบฑเบ”โ€‹เบญเบญเบโ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ„เบธเบ™โ€‹เบ„เปˆเบฒโ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™โ€‹, เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™โ€‹เปเบกเปˆเบ™โ€‹เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบžเบฒเบโ€‹เบชเบฐโ€‹เบซเบ™เบฒเบกโ€‹, เปเบฅเบฐโ€‹เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เปเบกเปˆเบ™โ€‹เบ„เปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เบˆเบฒเบโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹.
  2. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบกเบตเบชเบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบ: เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™, เปเบฅเบฐเปเบซเบผเปˆเบ‡ - เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบˆเบฒเบเปเบœเบ™เบ—เบตเปˆเบชเบฐเบเบฑเบ”. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™เปเบœเบ™เบ—เบตเปˆเบชเบฐเบเบฑเบ”, เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบงเบดเบ—เบตเบ™เบตเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ›เป‰เบฒเบเบ—เบตเปˆเบšเปเปˆเบญเบตเบ‡เปƒเบชเปˆเปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบฐเบเบฑเบ”เบญเบญเบ. เปƒเบ™โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ™เบตเป‰โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบˆเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เปƒเบ™โ€‹เปเบœเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบฐโ€‹เบเบฑเบ”โ€‹เป‚เบ”เบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบญเปเบฒโ€‹เบ™เบฒเบ”โ€‹เบžเปโ€‹เบชเบปเบกโ€‹เบ„เบงเบ™โ€‹ เปเบกเปˆเปเบšเบš Golang. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบฐเบเบฑเบ”เบญเบญเบเบกเบฒเป„เบ”เป‰เบ–เบทเบเป‚เบซเบฅเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบ„เปˆเบฒเปƒเบ™เบกเบฑเบ™: โ€œ{{เบ–เป‰เบฒ .tag}เบ„เปˆเบฒเปเบ—เบฑเบเบกเบตเบขเบนเปˆ{end}}โ€. เปเบกเปˆเปเบšเบšเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚, loops, เปเบฅเบฐเบšเบฒเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™ string เป€เบŠเบฑเปˆเบ™ Replace เปเบฅเบฐ Trim.
  3. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเป€เบ™เบทเป‰เบญเปƒเบ™เบ—เบตเปˆเบชเบฐเบเบฑเบ”เบญเบญเบ:
    • เบชเป‰เบฒเบ‡เบ›เป‰เบฒเบเบŠเบทเปˆเบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฐเบเบฑเบ”เบญเบญเบ, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบ”เบฑเบ”เบชเบฐเบ™เบตเป‚เบ”เบ Loki.
    • เบ›เปˆเบฝเบ™ เบซเบผเบทเบ•เบฑเป‰เบ‡เป€เบงเบฅเบฒเป€เบซเบ”เบเบฒเบ™เบˆเบฒเบเบšเบฑเบ™เบ—เบถเบ.
    • เบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™ (เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบ) เบ—เบตเปˆเบˆเบฐเป„เบ›เบซเบฒ Loki.
    • เบชเป‰เบฒเบ‡เป€เบกเบ•เบฃเบดเบ.
  4. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ /dev/null เบซเบผเบทเบชเบปเปˆเบ‡เบ•เปเปˆเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบ•เปเปˆเป„เบ›.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบšเบฑเบ™เบ—เบถเบ nginx เบ›เบปเบเบเบฐเบ•เบด, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบ—เบถเบเป‚เบ”เบเปƒเบŠเป‰ Promtail.

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เปƒเบซเป‰เปƒเบŠเป‰เป€เบ›เบฑเบ™ nginx-proxy เป€เบ›เบฑเบ™เบฎเบนเบšเบžเบฒเบš nginx เบ—เบตเปˆเบ–เบทเบเบ”เบฑเบ”เปเบ›เบ‡ jwilder/nginx-proxy:alpine เปเบฅเบฐ daemon เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ–เบฒเบกเบ•เบปเบงเป€เบญเบ‡เบœเปˆเบฒเบ™ HTTP. daemon เบกเบตเบซเบผเบฒเบเบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”, เป€เบŠเบดเปˆเบ‡เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบš HTTP เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบเบฑเบšเบšเบฑเบ™เบ—เบถเบเบˆเบฒเบ docker containers, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ /var/lib/docker/containers/ / -json.log

เปƒเบ™ docker-compose.yml เบžเบงเบเป€เบฎเบปเบฒ configure Promtail เปเบฅเบฐเบฅเบฐเบšเบธเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒ config:

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 (เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบ "docker" เปƒเบ™ config, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เปƒเบ™เปเบ–เบงเบ”เบฝเบง, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™):

scrape_configs:
 - job_name: containers

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

เป€เบกเบทเปˆเบญเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™, เบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเบ—เบฑเบ‡เปเบปเบ”เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ Loki. เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš 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

เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบเบฑเบ”เป€เบญเบปเบฒ fields stream, 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 เปเบฅเบฐ container_name.

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

เบชเบณเบฅเบฑเบšเบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบกเบตเบŠเบทเปˆ image_name เปเบกเปˆเบ™ nginx.promtail.test, เปเบเบเบ‚เปเป‰เบกเบนเบ™เบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเบšเบฑเบ™เบ—เบถเบเปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ เปเบฅเบฐเปƒเบชเปˆเปƒเบ™เปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบฐเบเบฑเบ”เบ”เป‰เบงเบเบ›เบธเปˆเบกเปเบ–เบง.

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

เบžเบงเบเป€เบฎเบปเบฒเบฅเบถเบšเบชเบฒเบเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เป‰เบงเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบดเปเบฅเบฐเบ”เบถเบ‡ nginx virtual host เปเบฅเบฐเป€เบชเบฑเป‰เบ™เบšเบฑเบ™เบ—เบถเบ 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 เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบฐ (เบชเบฐเบ–เบฒเบ™เบฐ HTTP) เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบเบฒเบ™เปƒเบชเปˆเปƒเบ™เปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบฐเบเบฑเบ”เบญเบญเบ.

       - output:
           source: nginx_log_row

เบ›เปˆเบฝเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบšเบฑเบ™เบ—เบถเบ nginx เบ—เบตเปˆเบ–เบทเบเบญเบฐเบ™เบฒเป„เบกเบˆเบฒเบเปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบฐเบเบฑเบ”เบญเบญเบเป„เบ›เบซเบฒ Loki.

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบซเบผเบฑเบ‡เบˆเบฒเบเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ config เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบฅเบฒเบเบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเบ›เป‰เบฒเบเบŠเบทเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบšเบฑเบ™เบ—เบถเบ.

เบชเบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ„เบงเบ™เบˆเบทเปˆเปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ”เบถเบ‡เป€เบญเบปเบฒเบ›เป‰เบฒเบเบ—เบตเปˆเบกเบตเบ„เปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ (cardinality) เบชเบฒเบกเบฒเบ”เบŠเป‰เบฒเบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ Loki. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เปƒเบชเปˆ, เบ•เบปเบงเบขเปˆเบฒเบ‡, user_id เปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบต. เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก "เบ›เป‰เบฒเบเบเบณเบเบฑเบšเปƒเบ™ Loki เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบšเบฑเบ™เบ—เบถเบเป„เบ”เป‰เป„เบงเบ‚เบถเป‰เบ™ เปเบฅเบฐเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เปเบ™เบงเปƒเบ”" เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ„เบปเป‰เบ™เบซเบฒเป‚เบ”เบ user_id เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบต. เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ•เบปเบงเบเบญเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ„เบปเป‰เบ™เบซเบฒ ("เบˆเบฑเบš" เบ‚เปเป‰เบกเบนเบ™), เปเบฅเบฐเบ”เบฑเบ”เบŠเบฐเบ™เบตเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ•เบปเบงเบฅเบฐเบšเบธเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”.

เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบ

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

Loki เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เปเบซเบฅเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบš Grafana graphs เป‚เบ”เบเปƒเบŠเป‰ LogQL. เบ„เบธเบ™โ€‹เบ™เบฐโ€‹เบชเบปเบกโ€‹เบšเบฑเบ”โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹:

  • เบญเบฑเบ”โ€‹เบ•เบฒ - เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบ•เปเปˆโ€‹เบงเบดโ€‹เบ™เบฒโ€‹เบ—เบตโ€‹;
  • เบ™เบฑเบšโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบฅโ€‹เบเบฐ โ€” เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบ—เบตเปˆโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เป„เบงเป‰โ€‹.

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰เบเบฑเบ‡เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบฅเบงเบก Sum, Avg เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบเบฒเบŸเบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบฑเบšเบชเบปเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบเบฒเบŸเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ” HTTP:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ Loki เปเบกเปˆเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ Prometheus (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบ), เปเบ•เปˆ Loki เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบตเบ›เบฐเป€เบžเบ” Prometheus. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เปเบ™เปˆโ€‹เปƒเบˆเบงเปˆโ€‹เบฒโ€‹เบงเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบžเบถเบ”โ€‹เบ•เบดโ€‹เบเปเบฒโ€‹เบ—เบตเปˆโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เป„เบงเป‰โ€‹, เปเบ•เปˆโ€‹เบเบฒเบ™โ€‹เบ•เบฑเบ”โ€‹เบชเบดเบ™โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹"เบงเบดเบ—เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Loki เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ Prometheus? ยท เบชเบฐเบšเบฑเบš #1222 ยท grafana/lokiโ€, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบกเปˆเบ™เบเบปเบ”เบซเบกเบฒเบเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เปเบฅเบฐ Loki เปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบš PromQL เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบชเปˆเบงเบ™.

เป€เบžเบตเปˆเบก Loki เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเป€เบžเบ” Prometheus เปเบฅเบฐเป€เบžเบตเปˆเบก URL / loki:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบเบฒเบŸ, เบ„เบทเบเบฑเบšเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš metrics เบˆเบฒเบ Prometheus:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบกเปˆเบ™เบŠเบปเปˆเบงเบ„เบฒเบงเปเบฅเบฐเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบฐเปเบเป‰เป„เบ‚เบชเบดเปˆเบ‡เบ™เบตเป‰เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เป€เบกเบ•เบฃเบดเบ

Loki เปƒเบซเป‰เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเบฐเบเบฑเบ”เบ•เบปเบงเป€เบฅเบเบ•เบปเบงเป€เบฅเบเบˆเบฒเบเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเบชเบปเปˆเบ‡เบžเบงเบเบกเบฑเบ™เป„เบ›เบซเบฒ Prometheus. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเบฑเบ™เบ—เบถเบ nginx เบ›เบฐเบเบญเบšเบกเบตเบˆเปเบฒเบ™เบงเบ™ bytes เบ•เปเปˆเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš, เบ”เป‰เบงเบเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบšเบฑเบ™เบ—เบถเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เป€เบงเบฅเบฒเป€เบ›เบฑเบ™เบงเบดเบ™เบฒเบ—เบตเบ—เบตเปˆเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡. เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบชเบฐเบเบฑเบ”เปเบฅเบฐเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ 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

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡ metrics เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเปเบœเบ™เบ—เบตเปˆเบชเบฐเบเบฑเบ”. metrics เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ Loki - เบžเบงเบเบกเบฑเบ™เบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡ Promtail /metrics. Prometheus เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบžเบทเปˆเบญเบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบชเปเบฒเบฅเบฑเบš request_type=โ€œapiโ€ เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเป€เบญเบปเบฒ histogram metric. เบ”เป‰เบงเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบ™เบตเป‰เบกเบฑเบ™เบชเบฐเบ”เบงเบเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบฎเป‰เบญเบ. เบชเปเบฒเบฅเบฑเบš static เปเบฅเบฐเบฎเบนเบšเบžเบฒเบš, เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒเบœเบปเบ™เบฅเบงเบกเบ‚เบญเบ‡ bytes เปเบฅเบฐเบˆเปเบฒเบ™เบงเบ™เปเบ–เบงเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš bytes เป€เบžเบทเปˆเบญเบ„เบดเบ”เป„เบฅเปˆเบชเบฐเป€เบฅเปˆเบ.

เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบงเบฑเบ”เปเบ—เบ เบ—เบตเปˆเบ™เบตเป‰.

เป€เบ›เบตเบ”เบžเบญเบ”เปƒเบ™ Promtail:

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

เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ promtail_custom เบ›เบฒเบเบปเบ”:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Prometheus. เป€เบžเบตเปˆเบกเบงเบฝเบ promtail:

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

เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเปเบ•เป‰เบกเป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบงเบดเบ—เบตเบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเบตเปˆเบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบŠเป‰เบฒเบ—เบตเปˆเบชเบธเบ”. เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบชเปเบฒเบฅเบฑเบš metrics เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰.

เบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”

Loki เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบ„เบนเปˆโ€‹เบ”เบฝเบงโ€‹เบซเบผเบทโ€‹เปƒเบ™โ€‹เบฎเบนเบšโ€‹เปเบšเบš sharded (เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบเบฒเบ™โ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เบญเบญเบโ€‹เบ•เบฒเบกโ€‹เบฅเบงเบ‡โ€‹เบ™เบญเบ™โ€‹)โ€‹. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเบชเบญเบ‡, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเป€เบกเบ„, เปเบฅเบฐเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เปเบฅเบฐเบ”เบฑเบ”เบชเบฐเบ™เบตเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบฎเบธเปˆเบ™ 1.5 เปเบ™เบฐเบ™เปเบฒเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ”เบฝเบง, เปเบ•เปˆเบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”.

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

Chunks เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš S3, เปเบฅเบฐเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบเป„เบ”เป‰เบ•เบฒเบกเบฅเบงเบ‡เบ™เบญเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ”เบฑเบ”เบชเบฐเบ™เบต: Cassandra, BigTable เบซเบผเบท DynamoDB. เบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™เป†เบ‚เบญเบ‡ Loki - เบœเบนเป‰เบˆเบฑเบ”เบˆเปเบฒเบซเบ™เปˆเบฒเบ (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™) เปเบฅเบฐ Querier (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบก) - เปเบกเปˆเบ™เบšเปเปˆเบกเบตเบฅเบฑเบ”เปเบฅเบฐเบเบฑเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ•เบฒเบกเปเบ™เบงเบ™เบญเบ™.

เปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบก DevOpsDays Vancouver 2019, เบซเบ™เบถเปˆเบ‡เปƒเบ™เบœเบนเป‰เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก Callum Styan เป„เบ”เป‰เบ›เบฐเบเบฒเบ”เบงเปˆเบฒเบ”เป‰เบงเบ Loki เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบฅเบฒเบงเบกเบตเป„เบกเป‰เบ—เปˆเบญเบ™ petabytes เบ—เบตเปˆเบกเบตเบ”เบฑเบ”เบŠเบฐเบ™เบตเบซเบ™เป‰เบญเบเบเบงเปˆเบฒ 1% เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”: "Loki เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Metrics เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเปเบ™เบงเปƒเบ” - เปเบฅเบฐเบ›เบฐเบซเบเบฑเบ”เป€เบ‡เบดเบ™เป€เบˆเบปเป‰เบฒ".

เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš Loki เปเบฅเบฐ ELK

เบ‚เบฐเบซเบ™เบฒเบ”เบ”เบฑเบ”เบŠเบฐเบ™เบต

เป€เบžเบทเปˆเบญเบ—เบปเบ”เบชเบญเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ”เบฑเบ”เบŠเบฐเบ™เบตเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบญเบปเบฒเบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเบ–เบฑเบ‡ nginx เบ—เบตเปˆเบ—เปเปˆเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ. เป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเบกเบต 406 เปเบ–เบงเบ—เบตเปˆเบกเบตเบ›เบฐเบฅเบดเบกเบฒเบ™เบ—เบฑเบ‡เปเบปเบ” 624 MB. เบšเบฑเบ™เบ—เบถเบเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™เบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡, เบ›เบฐเบกเบฒเบ™ 109 เบฅเบฒเบเบเบฒเบ™เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบชเบญเบ‡เปเบ–เบงเบˆเบฒเบเบšเบฑเบ™เบ—เบถเบ:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เป€เบกเบทเปˆเบญเบ–เบทเบเบ”เบฑเบ”เบชเบฐเบ™เบตเป‚เบ”เบ ELK, เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เบฐเบซเบ™เบฒเบ”เบ”เบฑเบ”เบŠเบฐเบ™เบต 30,3 MB:

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ Loki, เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ›เบฐเบกเบฒเบ™ 128 KB เปเบฅเบฐเบ›เบฐเบกเบฒเบ™ 3,8 MB เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™ chunks. เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบšเบฑเบ™เบ—เบถเบเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป‚เบ”เบเบ›เบญเบกเปเบฅเบฐเบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ. gzip เบ‡เปˆเบฒเบเป†เปƒเบ™เบšเบฑเบ™เบ—เบถเบ Docker JSON เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบšเบตเบšเบญเบฑเบ” 95,4%, เปเบฅเบฐเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบ—เบถเบ nginx เบ—เบตเปˆเบชเบฐเบญเบฒเบ”เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ Loki เป€เบญเบ‡, เบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เป€เบ–เบดเบ‡ 4 MB เปเบกเปˆเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰. เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบชเปเบฒเบฅเบฑเบšเบ›เป‰เบฒเบ Loki เปเบกเปˆเบ™ 35, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ—เบดเบšเบฒเบเป€เบ–เบดเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เบ”เบฑเบ”เบŠเบฐเบ™เบต. เบชเปเบฒเบฅเบฑเบš ELK เบšเบฑเบ™เบ—เบถเบเบเบฑเบ‡เบ–เบทเบเบฅเบถเบšเบฅเป‰เบฒเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, Loki เป„เบ”เป‰เบšเบตเบšเบญเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš 96%, เปเบฅเบฐ ELK 70%.

เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ Lokiโ€‹

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ›เบฝเบšเบ—เบฝเบš Prometheus เปเบฅเบฐ ELK stack เบ—เบฑเบ‡เบซเบกเบปเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Loki "เบเบดเบ™" เบซเบผเบฒเบเป€เบ—เบทเปˆเบญเบซเบ™เป‰เบญเบ. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ Go เปƒเบŠเป‰เบซเบ™เป‰เบญเบเบเบงเปˆเบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ Java, เปเบฅเบฐเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ JVM Heap Elasticsearch เปเบฅเบฐเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบˆเบฑเบ”เบชเบฑเบ™เบชเปเบฒเบฅเบฑเบš Loki เปเบกเปˆเบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เปเบ•เปˆเบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ Loki เปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบ™เป‰เบญเบเบฅเบปเบ‡. เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡ CPU เบ‚เบญเบ‡เบกเบฑเบ™เบšเปเปˆเบˆเบฐเปเบˆเป‰เบ‡, เปเบ•เปˆเบกเบฑเบ™เบเบฑเบ‡เบกเบตเบขเบนเปˆ.

เบ„เบงเบฒเบกเป„เบง

Loki โ€œdevursโ€ เบšเบฑเบ™เบ—เบถเบเป„เบงเบ‚เบถเป‰เบ™. เบ„เบงเบฒเบกเป„เบงเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ›เบฑเบ”เปƒเบˆเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ - เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบ, เบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบžเบงเบเบกเบฑเบ™, เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เปเบœเปˆเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป† - เปเบ•เปˆเปเบ™เปˆเบ™เบญเบ™เปเบกเปˆเบ™เบชเบนเบ‡เบเบงเปˆเบฒ ELK (เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡เบ‚เป‰เบญเบ - เบ›เบฐเบกเบฒเบ™เบชเบญเบ‡เป€เบ—เบปเปˆเบฒ). เบ™เบตเป‰เปเบกเปˆเบ™เบญเบฐเบ—เบดเบšเบฒเบเป‚เบ”เบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ Loki เป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เบซเบ™เป‰เบญเบเบฅเบปเบ‡เปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบตเปเบฅเบฐ, เบ•เบฒเบกเบ™เบฑเป‰เบ™, เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบ™เป‰เบญเบเบฅเบปเบ‡เปƒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบต. เบ”เป‰เบงเบเบ„เบงเบฒเบกเป„เบงเปƒเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ, เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปเบกเปˆเบ™เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก: Loki เบŠเป‰เบฒเบฅเบปเบ‡เบขเปˆเบฒเบ‡เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบเบงเปˆเบฒเบซเบผเบฒเบ gigabytes, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ„เบงเบฒเบกเป„เบงเบ„เบปเป‰เบ™เบซเบฒเบ‚เบญเบ‡ ELK เบšเปเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™.

เบŠเบญเบเบซเบฒเบ”เป‰เบงเบเบšเบฑเบ™เบ—เบถเบ

Loki เปเบกเปˆเบ™เบ•เปเปˆเบฒเบเบงเปˆเบฒ ELK เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบŠเบญเบเบซเบฒเบšเบฑเบ™เบ—เบถเบ. Grep เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเปเบกเปˆเบ™เบกเบตเบญเปเบฒเบ™เบฒเบ”, เปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™ inferior เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ mature. เบเบฒเบ™เบ‚เบฒเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบฅเบฐเบ”เบฑเบš, เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบžเบฝเบ‡เปเบ•เปˆเป‚เบ”เบเบ›เป‰เบฒเบเบŠเบทเปˆ, เบ„เบงเบฒเบกเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ„เบปเป‰เบ™เบซเบฒเป‚เบ”เบเบšเปเปˆเบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ - เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบˆเปเบฒเบเบฑเบ”เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเปƒเบ™ Loki. เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบžเบปเบšเป€เบซเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰ Loki, เปเบ•เปˆเบกเบฑเบ™เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป„เบซเบผเป€เบ‚เบปเป‰เบฒเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป„เบกเป‰เบ—เปˆเบญเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเบปเบšเบšเบฑเบ™เบซเบฒเบ—เปเบฒเบญเบดเบ”เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ Prometheus, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบŠเป‰เบ›เป‰เบฒเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบšเบฑเบ™เบ—เบถเบ.

เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบกเบฑเบ™เบ‡เบฒเบก (เบ‚เปเบญเบฐเป„เบž, เบ—เบปเบ™เบšเปเปˆเป„เบ”เป‰). Grafana เบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ‡เบฒเบก, เปเบ•เปˆ Kibana เบกเบตเบซเบผเบฒเบเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™.

เบ‚เปเป‰เบ”เบตเปเบฅเบฐเบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡ Loki

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเปเบกเปˆเบ™เบงเปˆเบฒ Loki เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบš Prometheus, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš metrics เปเบฅเบฐเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบญเบญเบเบˆเบฒเบเบเปˆเบญเบ‡. เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฒเบ Kubernetes Pods, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบกเบตเบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบชเบทเบšเบ—เบญเบ”เบกเบฒเบˆเบฒเบ Prometheus เปเบฅเบฐเบ•เบดเบ”เบ›เป‰เบฒเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

เบ‚เปเป‰เป€เบชเบเปเบกเปˆเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบญเปˆเบญเบ™เปเบญ. เบšเบฒเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบฅเบฑเบเบชเบฐเบ™เบฐเปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡ Promtail, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ„เบปเป‰เบ™เบžเบปเบšเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบชเบถเบเบชเบฒเบฅเบฐเบซเบฑเบ”, เป‚เบŠเบเบ”เบตเบกเบฑเบ™เป€เบ›เบฑเบ™ open-source. เบ‚เปเป‰เป€เบชเบเบญเบตเบเบญเบฑเบ™เปœเบถเปˆเบ‡เปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญ. เบ•เบปเบงเบขเปˆเบฒเบ‡, Loki เบšเปเปˆเบชเบฒเบกเบฒเบ”เบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบ—เบถเบเบซเบผเบฒเบเปเบ–เบงเป„เบ”เป‰. เบ‚เปเป‰เป€เบชเบเบญเบตเบเบญเบฑเบ™เปœเบถเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ Loki เป€เบ›เบฑเบ™เป€เบ—เบฑเบเป‚เบ™เป‚เบฅเบเบตเบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบญเปˆเบญเบ™ (เบเบฒเบ™เบ›เปˆเบญเบ 1.0 เปเบกเปˆเบ™เปƒเบ™เป€เบ”เบทเบญเบ™เบžเบฐเบˆเบดเบ 2019).

เบชเบฐเบซเบฅเบธเบš

Loki เป€เบ›เบฑเบ™เป€เบ—เบเป‚เบ™เป‚เบฅเบเบตเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ 100% เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เบเบฒเบ‡, เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบšเบฑเบ™เบ—เบถเบ, เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบšเบฑเบ™เบ—เบถเบ, เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบ—เบถเบ.

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเปƒเบŠเป‰ Loki เปƒเบ™ Badoo เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบต stack ELK เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบ overgrown เบเบฑเบšเบงเบดเบ—เบตเปเบเป‰เป„เบ‚ custom เบ•เปˆเบฒเบ‡เป†เปƒเบ™เป„เบฅเบเบฐเบ›เบตเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เบเบฒเบ™เบชเบฐเบ”เบธเบ”เปเบกเปˆเบ™เบเบฒเบ™เบŠเบญเบเบซเบฒเบœเปˆเบฒเบ™เป„เบกเป‰เบ—เปˆเบญเบ™. เบ”เป‰เบงเบเบšเบฑเบ™เบ—เบถเบเป€เบเบทเบญเบš 100 GB เบ•เปเปˆเบกเบทเป‰, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบˆเบฐเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบฅเบฐเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบฅเบฑเบเบ™เป‰เบญเบเปเบฅเบฐเป€เบฎเบฑเบ”เบกเบฑเบ™เป„เบ”เป‰เป„เบง. เบชเปเบฒเบฅเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบญเบทเปˆเบ™เป†เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™. Loki stack เบกเบตเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบšเปเปˆเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบซเบผเบฒเบเบเปˆเบงเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เปเบฅเบฐเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบกเบฑเบ™เปเบ™เปˆเบ™เบญเบ™เบˆเบฐเบšเปเปˆเป€เบเบตเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ.

เปเบฅเบฐเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ Loki, เบžเบงเบเป€เบฎเบปเบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเป€เบˆเบปเป‰เบฒเปƒเบ™เบเบฒเบ™เป€เบฅเบทเบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ.

repository เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆ เบ—เบตเปˆเบ™เบตเป‰.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™