Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

НиС ΠΎΡ‚ Badoo Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ слСдим Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ прСцСнявамС Π΄Π°Π»ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ»ΠΈ Π½Π΅ Π² Π½Π°ΡˆΠ°Ρ‚Π° систСма. ИскамС Π΄Π° сподСлим Π΅Π΄Π½ΠΎ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ проучвания с общността. ΠŸΠΎΡΠ²Π΅Ρ‚Π΅Π½ Π΅ Π½Π° Loki, систСма Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Loki Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ ΠΈ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Ρ‚ΠΎΠ·ΠΈ стСк ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° прСдоставя гъвкава систСма Π·Π° тяхното Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ към Prometheus. ΠŸΡ€Π΅Π· ΠΌΠ°ΠΉ бСшС пусната Π΄Ρ€ΡƒΠ³Π° актуализация, която сС популяризира Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΎΡ‚ ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΡƒΠ²Π°Ρ…ΠΌΠ΅ сС ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Loki, ΠΊΠ°ΠΊΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдоставя ΠΈ Π΄ΠΎ ΠΊΠ°ΠΊΠ²Π° стСпСн ΠΌΠΎΠΆΠ΅ Π΄Π° дСйства ΠΊΠ°Ρ‚ΠΎ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° ELK, стСка, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ сСга.

Какво Π΅ Π›ΠΎΠΊΠΈ

Grafana Loki Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° цялостна систСма Π·Π° Π΄ΡŠΡ€Π²ΠΎΠ΄ΠΎΠ±ΠΈΠ². Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ систСми, Loki сС основава Π½Π° идСята Π·Π° индСксиранС само Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ - Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ (Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΡ‚ΠΎ Π² Prometheus) ΠΈ компрСсиранС Π½Π° самитС рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π΅Π΄ΠΈΠ½ Π΄ΠΎ Π΄Ρ€ΡƒΠ³ Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π°.

Начална страница, GitHub

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° навляза Π² Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ с Loki, искам Π΄Π° изясня ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΏΠΎΠ΄ β€žΠΈΠ΄Π΅ΡΡ‚Π° Π·Π° индСксиранС само Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈβ€œ. НСка сравним ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π° 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, ΠΈ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ всичко Π² Π³ΠΎΠ»Π΅ΠΌΠΈ индСкси. ΠŸΡ€Π΅Π΄ΠΈΠΌΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ слоТни заявки, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ всички Π΄Π°Π½Π½ΠΈ са Π² индСкса. Но трябва Π΄Π° ΠΏΠ»Π°Ρ‚ΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ става голям, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° Π² изисквания Π·Π° ΠΏΠ°ΠΌΠ΅Ρ‚. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Π½Π° пълния тСкст Π½Π° рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π΅ сравним ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ със самитС рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π² Π½Π΅Π³ΠΎ, ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ трябва Π΄Π° бъдС Π·Π°Ρ€Π΅Π΄Π΅Π½ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. И ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚ консумира.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ Π½Π° Loki изисква само Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈ ΠΎΡ‚ Π½ΠΈΠ·Π°, Ρ‡ΠΈΠΉΡ‚ΠΎ Π±Ρ€ΠΎΠΉ стойности Π΅ малък. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ малък индСкс ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΠΌ Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ Π³ΠΈ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ индСксирани ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΈ слСд Ρ‚ΠΎΠ²Π° сканирамС останалитС с рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΈΠ»ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΠ΄Π½ΠΈΠ·ΠΎΠ²Π΅. ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΈΡΡ‚, Π½ΠΎ Loki раздСля заявката Π½Π° няколко части ΠΈ Π³ΠΈ изпълнява ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΉΠΊΠΈ голямо количСство Π΄Π°Π½Π½ΠΈ Π·Π° ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅. Броят Π½Π° ΡˆΠ°Ρ€Π΄ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈΡ‚Π΅ заявки Π² тях Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌ; ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ количСството Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ Π·Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π²Ρ€Π΅ΠΌΠ΅, зависи Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΎΡ‚ количСството прСдоставСни рСсурси.

Π’ΠΎΠ·ΠΈ компромис ΠΌΠ΅ΠΆΠ΄Ρƒ голям Π±ΡŠΡ€Π· индСкс ΠΈ малък ΠΏΠ°Ρ€Π°Π»Π΅Π»Π΅Π½ Π³Ρ€ΡƒΠ± форс индСкс позволява Π½Π° Π›ΠΎΠΊΠΈ Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° Ρ†Π΅Π½Π°Ρ‚Π° Π½Π° систСмата. МоТС Π΄Π° бъдС гъвкаво ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ спорСд Π²Π°ΡˆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ.

Π‘Ρ‚Π΅ΠΊΡŠΡ‚ Loki сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: Promtail, Loki, Grafana. Promtail ΡΡŠΠ±ΠΈΡ€Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π³ΠΈ ΠΈ Π³ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π½Π° Loki. Π›ΠΎΠΊΠΈ Π³ΠΈ ΠΏΠ°Π·ΠΈ. И Π“Ρ€Π°Ρ„Π°Π½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° поиска Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ ΠΈ Π΄Π° Π³ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅. ΠšΠ°Ρ‚ΠΎ цяло Loki ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅ само Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² тях. ЦСлият стСк прСдоставя Π³ΠΎΠ»Π΅ΠΌΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° входящитС Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π½Π°Ρ‡ΠΈΠ½Π° Π½Π° Prometheus.
ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ описаниС Π½Π° инсталационния процСс Ρ‚ΡƒΠΊ.

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π² рСгистрационния Ρ„Π°ΠΉΠ»

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π² рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² спСциалСн интСрфСйс Grafana β€” Explorer. ЗаявкитС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΅Π·ΠΈΠΊΠ° LogQL, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° PromQL, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ‚ Prometheus. По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ grep.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡŠΡ‚ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Π‘Π°ΠΌΠ°Ρ‚Π° заявка сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΄Π²Π΅ части: сСлСктор ΠΈ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€. Π‘Π΅Π»Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ Π΅ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ ΠΏΠΎ индСксирани ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ (Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ), ΠΊΠΎΠΈΡ‚ΠΎ са присвоСни Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π° Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ΡŠΡ‚ Π΅ Π½ΠΈΠ· Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ ΠΈΠ»ΠΈ рСгулярСн ΠΈΠ·Ρ€Π°Π·, ΠΊΠΎΠΉΡ‚ΠΎ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° записитС, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ сСлСктора. Π’ дадСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π’ΡŠΠ² ΠΊΡŠΠ΄Ρ€Π°Π²ΠΈ скоби - сСлСктора, всичко слСд Π½Π΅Π³ΠΎ - Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π°.

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

ΠŸΠΎΡ€Π°Π΄ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Loki, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ заявки Π±Π΅Π· сСлСктор, Π½ΠΎ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ ΠΎΠ±Ρ‰ΠΈ.

Π‘Π΅Π»Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ Π΅ ΠΊΠ»ΡŽΡ‡-стойност Π½Π° стойността във Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΈ скоби. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ сСлСктори ΠΈ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ условия Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ =, != ΠΈΠ»ΠΈ рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ:

{instance=~"kafka-[23]",name!="kafka-dev"} 
// Найдёт Π»ΠΎΠ³ΠΈ с Π»Π΅ΠΉΠ±Π»ΠΎΠΌ instance, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ kafka-2, kafka-3, ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ dev 

Π€ΠΈΠ»Ρ‚ΡŠΡ€ΡŠΡ‚ Π΅ тСкст ΠΈΠ»ΠΈ рСгулярСн ΠΈΠ·Ρ€Π°Π·, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° всички Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ сСлСктора.

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ad-hoc Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ въз основа Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ чСстотата Π½Π° срСщанС Π² рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° nginx Π½Π° запис, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ индСксния Π½ΠΈΠ·:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Пълно описаниС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² докумСнтацията LogQL.

Π Π°Π·Π±ΠΎΡ€ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊ

Има няколко Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈ:

  • Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Promtail, стандартСн ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° стСка Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅.
  • Π”ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ Π·Π° рСгистриранС Π½Π° Loki Docker.
  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Fluentd ΠΈΠ»ΠΈ Fluent Bit, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Π΄ΠΎ Loki. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Promtail, Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΠΈ парсСри Π·Π° ΠΏΠΎΡ‡Ρ‚ΠΈ всСки Ρ‚ΠΈΠΏ ΠΆΡƒΡ€Π½Π°Π» ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ€Π΅Π΄ΠΎΠ²ΠΈ ΠΆΡƒΡ€Π½Π°Π»ΠΈ.

ОбикновСно Promtail сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅. ΠŸΡ€Π°Π²ΠΈ Ρ‚Ρ€ΠΈ Π½Π΅Ρ‰Π°:

  • Намира ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ.
  • ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠ΅Ρ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ към тях.
  • Π˜Π·ΠΏΡ€Π°Ρ‰Π° Π΄Π°Π½Π½ΠΈ Π½Π° Π›ΠΎΠΊΠΈ.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Promtail ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ‡Π΅Ρ‚Π΅ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΎΡ‚ систСмния ΠΆΡƒΡ€Π½Π°Π». Π’ΠΎΠΉ трябва Π΄Π° бъдС инсталиран Π½Π° всяка машина, ΠΎΡ‚ която сС ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Има интСграция с Kubernetes: Promtail Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Ρ‡Ρ€Π΅Π· Kubernetes REST API ΠΈ ΡΡŠΠ±ΠΈΡ€Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ възСл, услуга ΠΈΠ»ΠΈ pod, Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΠΊΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ въз основа Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Kubernetes (ΠΈΠΌΠ΅ Π½Π° pod, ΠΈΠΌΠ΅ Π½Π° Ρ„Π°ΠΉΠ» ΠΈ Ρ‚.Π½.).

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΎΠΊΠ°Ρ‡ΠΈΡ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ въз основа Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Pipeline. Pipeline Promtail ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ‚ΠΈΠΏΠ° Π΅Ρ‚Π°ΠΏΠΈ. ΠŸΠΎΠ²Π΅Ρ‡Π΅ подробности - Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация, Π²Π΅Π΄Π½Π°Π³Π° Ρ‰Π΅ ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ° някои ΠΎΡ‚ Π½ΡŽΠ°Π½ΡΠΈΡ‚Π΅.

  1. Π•Ρ‚Π°ΠΏΠΈ Π½Π° Ρ€Π°Π·Π±ΠΎΡ€. Π’ΠΎΠ²Π° Π΅ Π΅Ρ‚Π°ΠΏΡŠΡ‚ Π½Π° RegEx ΠΈ JSON. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅ Π² Ρ‚Π°ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π° ΠΊΠ°Ρ€Ρ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ ΠΎΡ‚ JSON, ΠΊΠ°Ρ‚ΠΎ просто ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π°, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ, Π² ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π° ΠΈΠ»ΠΈ Ρ‡Ρ€Π΅Π· рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ (RegEx), ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈΡ‚Π΅ Π³Ρ€ΡƒΠΏΠΈ сС β€žΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Ρ‚β€œ Π² ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°. Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π° Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΠΊΠ»ΡŽΡ‡-стойност, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ, Π° стойността Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° стойност ΠΎΡ‚ рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.
  2. Π•Ρ‚Π°ΠΏΠΈ Π½Π° трансформация. Π’ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΠΏΡ†ΠΈΠΈ: transform, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° трансформация, ΠΈ source - ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° трансформацията ΠΎΡ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°. Ако Π² ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π° няма Ρ‚Π°ΠΊΠΎΠ²Π° ΠΏΠΎΠ»Π΅, Ρ‚ΠΎ Ρ‰Π΅ бъдС създадСно. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π΅ възмоТно Π΄Π° сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ доста ΠΌΠΎΡ‰Π΅Π½ Π³ΠΎΠ»Π°Π½Π³ шаблон. ОсвСн Ρ‚ΠΎΠ²Π° трябва Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π° Π΅ напълно Π·Π°Ρ€Π΅Π΄Π΅Π½Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ възмоТно Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ стойността Π² нСя: β€ž{{if .tag}tag value exists{end}}β€œ. Π¨Π°Π±Π»ΠΎΠ½ΡŠΡ‚ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° условия, Ρ†ΠΈΠΊΠ»ΠΈ ΠΈ някои Π½ΠΈΠ·ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ Replace ΠΈ Trim.
  3. Π•Ρ‚Π°ΠΏΠΈ Π½Π° дСйствиС. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ с ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΎΡ‚ΠΎ:
    • Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ ΠΎΡ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС индСксиран ΠΎΡ‚ Loki.
    • ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ ΠΈΠ»ΠΈ Π·Π°Π΄Π°ΠΉΡ‚Π΅ часа Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°.
    • ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ (Π»ΠΎΠ³ тСкст), ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΎΡ‚ΠΈΠ΄Π°Ρ‚ Π΄ΠΎ Loki.
    • Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.
  4. Π•Ρ‚Π°ΠΏΠΈ Π½Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅. Π•Ρ‚Π°ΠΏΡŠΡ‚ Π½Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ записи, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π² /dev/null, ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π·Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Използвайки ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° nginx, Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Promtail.

Π—Π° тСста Π½Π΅ΠΊΠ° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° nginx jwilder/nginx-proxy:alpine ΠΈ малък Π΄Π΅ΠΌΠΎΠ½, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠΈΡ‚Π²Π° сам Ρ‡Ρ€Π΅Π· HTTP ΠΊΠ°Ρ‚ΠΎ nginx-прокси. Π”Π΅ΠΌΠΎΠ½ΡŠΡ‚ ΠΈΠΌΠ° няколко ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π°Π²Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈ, с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ HTTP статуси ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ забавяния.

Π©Π΅ ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ ΠΏΠΎ ΠΏΡŠΡ‚Ρ /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 (ΠΈΠΌΠ° опция "docker" Π² конфигурацията, която ΠΏΡ€Π°Π²ΠΈ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π² Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄, Π½ΠΎ няма Π΄Π° Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ):

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

Π˜Π·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° stream, attrs, attrs.tag (Π°ΠΊΠΎ ΠΈΠΌΠ° Ρ‚Π°ΠΊΠΈΠ²Π°) ΠΎΡ‚ входящия JSON ΠΈ Π³ΠΈ поставямС Π² ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°.

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

Ако Π΅ възмоТно Π΄Π° поставим ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Π·Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ Π² ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°, Ρ‚ΠΎΠ³Π°Π²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° рСгулярния ΠΈΠ·Ρ€Π°Π· ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

 - 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 ΠΈ Ρ€Π΅Π΄Π° Π½Π° ΠΆΡƒΡ€Π½Π°Π»Π° Π½Π° 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 status) въз основа Π½Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ успяхмС Π΄Π° поставим Π² ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°.

       - output:
           source: nginx_log_row

ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π°. Π‘Π΅Π³Π° почистСният ΠΆΡƒΡ€Π½Π°Π» Π½Π° nginx ΠΎΡ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π° ΠΎΡ‚ΠΈΠ²Π° ΠΏΡ€ΠΈ Loki.

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ стартиратС Π³ΠΎΡ€Π½Π°Ρ‚Π° конфигурация, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ всСки запис Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ въз основа Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°.

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ с голям Π±Ρ€ΠΎΠΉ стойности (кардиналност) ΠΌΠΎΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π·Π°Π±Π°Π²ΠΈ Loki. ВоСст Π½Π΅ трябва Π΄Π° поставятС Π² индСкса Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ user_id. ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° Π² ΡΡ‚Π°Ρ‚ΠΈΡΡ‚Π°ΠšΠ°ΠΊ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π² Loki ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° направят заявкитС Π² ΠΆΡƒΡ€Π½Π°Π»Π° ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ ΠΈ ΠΏΠΎ-лСсни". Но Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ ΠΏΠΎ user_id Π±Π΅Π· индСкси. НСобходимо Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ (β€žΠ³Ρ€Π°Π±Π²Π°Π½Π΅β€œ спорСд Π΄Π°Π½Π½ΠΈΡ‚Π΅), Π° ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Ρ‚ΡƒΠΊ дСйства ΠΊΠ°Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Визуализация Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Loki ΠΌΠΎΠΆΠ΅ Π΄Π° дСйства ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Grafana, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ LogQL. ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ сС слСднитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • rate - Π±Ρ€ΠΎΠΉ записи Π² сСкунда;
  • count over time - броят Π½Π° записитС Π² дадСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.

Има ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Ρ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Sum, Avg ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ доста слоТни Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° броя HTTP Π³Ρ€Π΅ΡˆΠΊΠΈ:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Loki Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΎΡ‚ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ Prometheus (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π»Π΅Π³Π΅Π½Π΄Π°Ρ‚Π°), Π½ΠΎ Loki ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Prometheus. НС съм сигурСн Π΄Π°Π»ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½ΠΎ съдСйки ΠΏΠΎ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ β€œΠšΠ°ΠΊ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌ Loki ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π° Prometheus? Β· ИзданиС #1222 Β· grafana/loki”, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ²Π° Π΅ напълно Π·Π°ΠΊΠΎΠ½Π½ΠΎ ΠΈ Loki Π΅ напълно ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с PromQL.

Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Loki ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ с Ρ‚ΠΈΠΏ Prometheus ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ URL /loki:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

И ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, сякаш Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΎΡ‚ Prometheus:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Мисля, Ρ‡Π΅ Π½Π΅ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ във функционалността Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Ρ‰Π΅ Π³ΠΎ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅.

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ°

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

ΠžΠΏΡ†ΠΈΡΡ‚Π° Π²ΠΈ позволява Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ въз основа Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°. Π’Π΅Π·ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π½Π° Loki - Ρ‚Π΅ сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ Π² ΠΊΡ€Π°ΠΉΠ½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Promtail /metrics. Prometheus трябва Π΄Π° бъдС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ. Π’ горния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° request_type="api" ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° Π½Π° хистограма. Π‘ Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΠΈ. Π—Π° статики ΠΈ снимки ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ сумата ΠΎΡ‚ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅ ΠΈ броя Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅, Π² ΠΊΠΎΠΈΡ‚ΠΎ смС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅, Π·Π° Π΄Π° изчислим срСдната стойност.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ.

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ ΠΏΠΎΡ€Ρ‚ Π½Π° Promtail:

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

УвСрявамС сС, Ρ‡Π΅ са сС появили ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ с прСфикса promtail_custom:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Настройка Π½Π° Prometheus. ДобавянС Π½Π° обява Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°:

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

И Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°ΠΉΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈΡ‚Π΅ Π½Π°ΠΉ-Π±Π°Π²Π½ΠΈ заявки. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ наблюдСниС Π·Π° Ρ‚Π΅Π·ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.

ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅

Loki ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠ°ΠΊΡ‚ΠΎ Π² Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ Π΄Π²ΠΎΠΈΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ, Ρ‚Π°ΠΊΠ° ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ (Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌ). Π’ΡŠΠ² втория случай ΠΌΠΎΠΆΠ΅ Π΄Π° записва Π΄Π°Π½Π½ΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ°, Π° частитС ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ. Π’ΡŠΠ² вСрсия 1.5 Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π΅Π΄Π½ΠΎ място, Π½ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² производството.

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

ΠŸΠ°Ρ€Ρ‡Π΅Ρ‚Π°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² S3-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π° Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° индСкси: Cassandra, BigTable ΠΈΠ»ΠΈ DynamoDB. Π”Ρ€ΡƒΠ³ΠΈ части Π½Π° Loki - Дистрибутори (Π·Π° писанС) ΠΈ Querier (Π·Π° заявки) - са Π±Π΅Π· ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ ΠΈ ΡΡŠΡ‰ΠΎ сС ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Ρ‚ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ.

На конфСрСнцията DevOpsDays Vancouver 2019, Π΅Π΄ΠΈΠ½ ΠΎΡ‚ участницитС Callum Styan обяви, Ρ‡Π΅ Π·Π°Π΅Π΄Π½ΠΎ с Loki нСговият ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠΌΠ° ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚ΠΈ ΠΆΡƒΡ€Π½Π°Π»ΠΈ с индСкс ΠΏΠΎ-малък ΠΎΡ‚ 1% ΠΎΡ‚ общия Ρ€Π°Π·ΠΌΠ΅Ρ€: β€žΠšΠ°ΠΊ Π›ΠΎΠΊΠΈ ΡΠ²ΡŠΡ€Π·Π²Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ - ΠΈ Π²ΠΈ спСстява ΠΏΠ°Ρ€ΠΈ".

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° Π›ΠΎΠΊΠΈ ΠΈ ELK

Π Π°Π·ΠΌΠ΅Ρ€ Π½Π° индСкса

Π—Π° Π΄Π° тСствам получСния Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° индСкса, Π²Π·Π΅Ρ… рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° nginx, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ бСшС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΡŠΡ‚ ΠΏΠΎ-Π³ΠΎΡ€Π΅. РСгистрационният Ρ„Π°ΠΉΠ» ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° 406 624 Ρ€Π΅Π΄Π° с ΠΎΠ±Ρ‰ ΠΎΠ±Π΅ΠΌ ΠΎΡ‚ 109 MB. Π”Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅ бяха Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ час, ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 100 записа Π² сСкунда.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π΄Π²Π° Ρ€Π΅Π΄Π° ΠΎΡ‚ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

ΠšΠΎΠ³Π°Ρ‚ΠΎ сС индСксира ΠΎΡ‚ ELK, Ρ‚ΠΎΠ²Π° Π΄Π°Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° индСкса ΠΎΡ‚ 30,3 MB:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Π’ случая с Loki Ρ‚ΠΎΠ²Π° Π΄Π°Π΄Π΅ ΠΎΠΊΠΎΠ»ΠΎ 128 KB индСкс ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 3,8 MB Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π°. Π‘Ρ‚Ρ€ΡƒΠ²Π° си Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΡŠΡ‚ Π΅ изкуствСно Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ ΠΈ Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° голямо Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ. Π•Π΄ΠΈΠ½ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ gzip Π½Π° оригиналния Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° Docker JSON с Π΄Π°Π½Π½ΠΈ Π΄Π°Π΄Π΅ компрСсия ΠΎΡ‚ 95,4% ΠΈ ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ само почистСният Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° nginx бСшС ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ Π΄ΠΎ самия Loki, компрСсията Π΄ΠΎ 4 MB Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠ°. ΠžΠ±Ρ‰ΠΈΡΡ‚ Π±Ρ€ΠΎΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ стойности Π·Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π½Π° Loki бСшС 35, ΠΊΠΎΠ΅Ρ‚ΠΎ обяснява малкия Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° индСкса. Π—Π° ELK Π΄Π½Π΅Π²Π½ΠΈΠΊΡŠΡ‚ ΡΡŠΡ‰ΠΎ бСшС изчистСн. Π’Π°ΠΊΠ° Π›ΠΎΠΊΠΈ компрСсира ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ с 96%, Π° ELK със 70%.

ΠšΠΎΠ½ΡΡƒΠΌΠ°Ρ†ΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π›ΠΎΠΊΠΈ

Ако сравним цСлия стСк Π½Π° Prometheus ΠΈ ELK, Ρ‚ΠΎΠ³Π°Π²Π° Π›ΠΎΠΊΠΈ "ядС" няколко ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ. Ясно Π΅, Ρ‡Π΅ услугата Go консумира ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ услугата Java ΠΈ сравняванСто Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Heap Elasticsearch JVM ΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π·Π° Loki Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Π½ΠΎ Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° си струва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Loki ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚. ΠŸΡ€Π΅Π΄ΠΈΠΌΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° CPU Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½ΠΎ ΡΡŠΡ‰ΠΎ Π΅ Π½Π°Π»ΠΈΡ†Π΅.

Бкорост

Π›ΠΎΠΊΠΈ "ΠΏΠΎΠ³Π»ΡŠΡ‰Π°" Ρ‚Ρ€ΡƒΠΏΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ. Бкоростта зависи ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ - ΠΊΠ°ΠΊΠ²ΠΈ Π»ΠΎΠ³ΠΎΠ²Π΅, ΠΊΠΎΠ»ΠΊΠΎ слоТни Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅, ΠΌΡ€Π΅ΠΆΠ°, диск ΠΈ Ρ‚.Π½. - Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π΅ ΠΏΠΎ-висока ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Π½Π° ELK (Π² моя тСст - ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ). Π’ΠΎΠ²Π° сС обяснява с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π›ΠΎΠΊΠΈ поставя ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ Π² индСкса ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ отдСля ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° индСксиранС. Π’ Ρ‚ΠΎΠ·ΠΈ случай ситуацията Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Π° със скоростта Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅: Loki Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ сС забавя ΠΏΡ€ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΡ‚ няколко Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈ ELK скоростта Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π΅ зависи ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅.

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π² рСгистрационния Ρ„Π°ΠΉΠ»

Loki Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΡ‚ΡΡ‚ΡŠΠΏΠ²Π° Π½Π° ELK ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² Π»ΠΎΠ³ΠΎΠ²Π΅. Grep с рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ Π΅ силно Π½Π΅Ρ‰ΠΎ, Π½ΠΎ Π΅ ΠΏΠΎ-лошо ΠΎΡ‚ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π° Π²ΡŠΠ·Ρ€Π°ΡΡ‚Π½ΠΈ. Липсата Π½Π° заявки Π·Π° ΠΎΠ±Ρ…Π²Π°Ρ‚, Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ само ΠΏΠΎ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ, Π½Π΅Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π±Π΅Π· Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ - всичко Ρ‚ΠΎΠ²Π° Π½ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° интСрСсна информация Π² Loki. Π’ΠΎΠ²Π° Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π½ΠΈΡ‰ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Loki, Π½ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π½Π° Prometheus ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ сС Π΅ случило Π² рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ.

интСрфСйс

ΠŸΡŠΡ€Π²ΠΎ, красиво Π΅ (съТалявам, Π½Π΅ ΠΌΠΎΠΆΠ°Ρ… Π΄Π° устоя). Grafana ΠΈΠΌΠ° Π΄ΠΎΠ±Ρ€Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‰ интСрфСйс, Π½ΠΎ Kibana Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½.

Π›ΠΎΠΊΠΈ плюсовС ΠΈ минуси

ΠžΡ‚ ΠΏΠ»ΡŽΡΠΎΠ²Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Loki сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° с Prometheus, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ прСдупрСТдСния извън кутията. Π’ΠΎΠΉ Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ с Kubernetes Pods, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ° услуга Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅, наслСдСна ΠΎΡ‚ Prometheus ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ прикрСпя Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ.

ΠžΡ‚ минуситС - лоша докумСнтация. Някои Π½Π΅Ρ‰Π°, ΠΊΠ°Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° Promtail, ΠΎΡ‚ΠΊΡ€ΠΈΡ… Π΅Π΄Π²Π° Π² процСса Π½Π° ΠΈΠ·ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ»Π·Π°Ρ‚Π° ΠΎΡ‚ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄. Π”Ρ€ΡƒΠ³ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ са слабитС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ·. НапримСр, Loki Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΌΠ½ΠΎΠ³ΠΎΡ€Π΅Π΄ΠΎΠ²ΠΈ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Loki Π΅ сравнитСлно ΠΌΠ»Π°Π΄Π° тСхнология (вСрсия 1.0 бСшС ΠΏΡ€Π΅Π· Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ 2019 Π³.).

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Loki Π΅ 100% интСрСсна тСхнология, която Π΅ подходяща Π·Π° ΠΌΠ°Π»ΠΊΠΈ ΠΈ срСдни ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, позволявайки Π²ΠΈ Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈ, Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈ, Π½Π°Π±Π»ΡŽΠ΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈ.

НиС Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Loki Π² Badoo, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ELK стСк, ΠΊΠΎΠΉΡ‚ΠΎ Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π° ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΎΠ±Ρ€Π°ΡΡŠΠ» с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ пСрсонализирани Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€Π΅Π· Π³ΠΎΠ΄ΠΈΠ½ΠΈΡ‚Π΅. Π—Π° нас ΠΏΡ€Π΅ΠΏΡŠΠ½ΠΈΠΊΠ°ΠΌΡŠΠΊΡŠΡ‚ Π΅ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π² Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅. Π‘ ΠΏΠΎΡ‡Ρ‚ΠΈ 100 GB рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Π΄Π΅Π½, Π·Π° нас Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ всичко ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈ Π΄Π° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ Π±ΡŠΡ€Π·ΠΎ. Π—Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ са ΡΡŠΠΎΠ±Ρ€Π°Π·Π΅Π½ΠΈ с Π½Π°ΡˆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ Π΅Π΄Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΎ. Π‘Ρ‚Π΅ΠΊΡŠΡ‚ Π½Π° Loki ΠΈΠΌΠ° осСзаСми ΠΏΠΎΠ»Π·ΠΈ, Π½ΠΎ няма Π΄Π° Π½ΠΈ Π΄Π°Π΄Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅, ΠΈ ΠΏΠΎΠ»Π·ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ няма Π΄Π° Π½Π°Π΄Ρ…Π²ΡŠΡ€Π»ΡΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ†Π΅Π½Π°Ρ‚Π° Π½Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ.

И Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ слСд ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ стана ясно, Ρ‡Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Loki, надявамС сС, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ публикация Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π² ΠΈΠ·Π±ΠΎΡ€Π°.

Намира сС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с ΠΊΠΎΠ΄Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² статията Ρ‚ΡƒΠΊ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€