Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

НиС Π² Badoo постоянно слСдим Π·Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ оцСнявамС Π΄Π°Π»ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² Π½Π°ΡˆΠ°Ρ‚Π° систСма. Π•Π΄Π½ΠΎ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ изслСдвания искамС Π΄Π° сподСлим с общността. Π’ΠΎ Π΅ посвСтСно Π½Π° Loki β€” систСма Π·Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³Π°.

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

Какво С Loki

Grafana Loki Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° цялостна систСма Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π»ΠΎΠ³Π°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ систСми, Loki Π΅ основан Π½Π° идСята Π΄Π° индСксира само ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ β€” labels (ΠΊΠ°Ρ‚ΠΎ Π² 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 Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° систСмата. Вя ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС гъвкаво настроСна ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π½ΡƒΠΆΠ΄ΠΈΡ‚Π΅.

Π‘Ρ‚Π΅ΠΊΡŠΡ‚ Π½Π° Loki сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: Promtail, Loki ΠΈ Grafana. Promtail ΡΡŠΠ±ΠΈΡ€Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π³ΠΈ ΠΈ Π³ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π² Loki. Loki Π³ΠΈ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°. А Grafana ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΠΏΠΈΡ‚Π²Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Loki ΠΈ Π΄Π° Π³ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Loki ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅ само Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² тях. ЦСлият стСк ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π°Ρ‰ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Prometheus way.
ОписаниС Π½Π° процСса Π½Π° инсталиранС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ..

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅

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

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

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

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

ΠŸΠΎΡ€Π°Π΄ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Loki Π½Π΅ Π΅ възмоТно Π΄Π° сС правят заявки Π±Π΅Π· сСлСктор, Π½ΠΎ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΎΠ±Ρ‰ΠΈ.

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

{instance=~"kafka-[23]",name!="kafka-dev"} 
// Намира Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ instance, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ стойност kafka-2, kafka-3 ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ dev 

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

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

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

ΠŸΠ°Ρ€ΡΠΈΠ½Π³ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅

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

  • Π§Ρ€Π΅Π· Promtail, стандартСн ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ стСка Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅.
  • Направо ΠΎΡ‚ Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Loki Docker Logging Driver.
  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Fluentd ΠΈΠ»ΠΈ Fluent Bit, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Π² Loki. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Promtail, Ρ‚Π΅ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Ρ‚ с Π³ΠΎΡ‚ΠΎΠ²ΠΈ ΠΏΠ°Ρ€ΡΡŠΡ€ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π·Π° всСки Π²ΠΈΠ΄ Π»ΠΎΠ³ ΠΈ сС справят ΠΈ с ΠΌΡƒΠ»Ρ‚ΠΈΠ»Ρ‚Π°ΠΉΠ½ΠΎΠ²ΠΈ Π»ΠΎΠ³ΠΎΠ²Π΅.

ОбикновСно Π·Π° парсинг ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Promtail. Π’ΠΎΠΉ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Ρ‚Ρ€ΠΈ Π½Π΅Ρ‰Π°:

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

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

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

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΊΡ€Π΅ΠΏΠ²Π°Ρ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Pipeline. Pipeline Π½Π° Promtail ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ‚ΠΈΠΏΠ° Π΅Ρ‚Π°ΠΏΠΈ. По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ β€” Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° докумСнтация, Ρ‚ΡƒΠΊ ΡΡŠΡ‰ΠΎ отбСлязвам някои нюанси.

  1. Π•Ρ‚Π°ΠΏΠΈ Π½Π° парсинг. Π’ΠΎΠ²Π° Π΅ Π΅Ρ‚Π°ΠΏΡŠΡ‚ RegEx ΠΈ JSON. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π² Ρ‚Π°ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π°Ρ‚Π° extracted map. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ ΠΎΡ‚ JSON, просто ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΠΊΠΈ Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π° Π² extracted map, ΠΈΠ»ΠΈ Ρ‡Ρ€Π΅Π· рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ (RegEx), ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π² extracted map сС β€œΠΌΠ°ΠΏΠ²Π°Ρ‚β€ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ Π³Ρ€ΡƒΠΏΠΈ. Extracted map прСдставлява Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ key-value, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ key Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ, Π° value Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° стойност ΠΎΡ‚ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅.
  2. Π•Ρ‚Π°ΠΏΠΈ Π½Π° трансформация. Π’ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΠΏΡ†ΠΈΠΈ: трансформация, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° трансформация, ΠΈ source β€” ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° трансформация ΠΎΡ‚ extracted map. Ако Ρ‚Π°ΠΊΠΎΠ²Π° ΠΏΠΎΠ»Π΅ Π² extracted map няма, Ρ‰Π΅ бъдС създадСно. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° създадСм Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° extracted map. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² extracted map, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΌΠΎΡ‰Π΅Π½ Golang Template. ОсвСн Ρ‚ΠΎΠ²Π°, трябва Π΄Π° сС ΠΏΠΎΠΌΠ½ΠΈ, Ρ‡Π΅ extracted map сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° напълно ΠΏΡ€ΠΈ парсинг, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ стойността Π² Π½Π΅Π³ΠΎ: β€œ{{if .tag}tag value exists{end}}”. Template ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° условия, Ρ†ΠΈΠΊΠ»ΠΈ ΠΈ някои стрингови Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ Replace ΠΈ Trim.
  3. Π•Ρ‚Π°ΠΏΠΈ Π½Π° дСйствиСто. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ с ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΎΡ‚ΠΎ:
    • Π”Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ ΠΎΡ‚ extracted data, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС индСксира Π² Loki.
    • Π”Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ ΠΎΡ‚ Π»ΠΎΠ³Π°.
    • Π”Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ (тСкста Π½Π° Π»ΠΎΠ³Π°), ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΎΡ‚ΠΈΠ΄Π°Ρ‚ Π² Loki.
    • Π”Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ.
  4. Π•Ρ‚Π°ΠΏΠΈ Π½Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅. Бтадията match, Π² която ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ‚Π΅ Π² /dev/null записитС, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ няматС Π½ΡƒΠΆΠ΄Π°, ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ насочитС Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π©Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ nginx Π»ΠΎΠ³Π°, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° парситС Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Promtail.

Π—Π° тСст Ρ‰Π΅ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ ΠΎΠ±Ρ€Π°Π· Π½Π° nginx jwilder/nginx-proxy:alpine ΠΊΠ°Ρ‚ΠΎ nginx-proxy ΠΈ малък Π΄Π΅ΠΌΠΎΠ½, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΠΏΠΈΡ‚Π²Π° сам сСбС си ΠΏΠΎ HTTP. На Π΄Π΅ΠΌΠΎΠ½Π° са Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ няколко ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π°Π²Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ 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 ΠΏΡŠΡ‚Ρ Π΄ΠΎ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ (Π² конфигурацията ΠΈΠΌΠ° опция "docker", която ΠΏΡ€Π°Π²ΠΈ ΡΡŠΡ‰ΠΎΡ‚ΠΎ с Π΅Π΄Π½Π° строка, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° наглядно):

scrape_configs:
 - job_name: containers

   static_configs:
       labels:
         job: containerlogs
         __path__: /var/lib/docker/containers/*/*log  # само за linux

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠ°Π²Π° конфигурация, Π² Loki Ρ‰Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚ всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π—Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌ Ρ‚ΠΎΠ²Π°, промСнямС настройкитС Π½Π° тСстовия nginx Π² docker-compose.yml β€” добавямС Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅ с ΠΏΠΎΠ»Π΅ tag:

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"}

Π•Ρ‚Π°ΠΏ Π½Π° Pipeline:

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

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

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

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

 - labels:
     image_name:
     container_name:

НазначавамС Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ. Ако Π² extracted data сС открият ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ 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, ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ ΠΏΠΎΠ»Π΅Ρ‚ΠΎ log ΠΎΡ‚ изходния Π»ΠΎΠ³ ΠΈ Π³ΠΎ поставямС Π² extracted map с ΠΊΠ»ΡŽΡ‡ row.

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

ΠŸΠΎΡ‡ΠΈΡΡ‚Π²Π°ΠΌΠ΅ Π²Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° строка с рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΈ ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ nginx virtual host ΠΈ строката Π»ΠΎΠ³ Π½Π° nginx.

     - regex:
         source: nginxlog
         expression: ^(?P[w.]+) - (?P[^ ]*) [(?P[^ ]+).*] "(?P[^ ]*) (?P[^ ]*) (?P[^ ]*)" (?P[d]+) (?P[d]+) "(?P[^"]*)" "(?P[^"]*)"( "(?P[d.]+)")?

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΠΌΠ΅ nginx Π»ΠΎΠ³Π° с рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ.

    - regex:
           source: request_url
           expression: ^.+.(?Pjpg|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[^/?]+).*$
       - regex:
           source: request_url
           expression: ^/api/(?P[^/?]+).*$

Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ request_url. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° рСгСкспи опрСдСлямС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° заявката: Π·Π° статични рСсурси, снимки, API ΠΈ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡ Π² extracted map.

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

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° условни ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π² Template провСрявамС Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π° Π² extracted map ΠΈ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ стойности Π·Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ request_type: photo, static, API. ΠŸΡ€ΠΈΡΠ²ΠΎΡΠ²Π°ΠΌΠ΅ other, Π°ΠΊΠΎ Π½Π΅ успССм. Π‘Π΅Π³Π° request_type ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ‚ΠΈΠΏΠ° Π½Π° заявката.

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

УстановявамС Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ api_request, virtual_host, request_type ΠΈ статус (HTTP status) Π½Π° Π±Π°Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ успяхмС Π΄Π° поставим Π² extracted map.

       - output:
           source: nginx_log_row

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

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

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

Визуализация Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

  • rate β€” Π±Ρ€ΠΎΠΉ записи Π² сСкунда;
  • count over time β€” Π±Ρ€ΠΎΠΉ записи Π² Π·Π°Π΄Π°Π΄Π΅Π½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.

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

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

ДобавямС Loki ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ с Ρ‚ΠΈΠΏ Prometheus ΠΈ добавямС URL /loki:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

И ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ Π°ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ…Ρ‚Π΅ с ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΎΡ‚ Prometheus:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

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

ДобавяйтС ΠΎΡ‰Π΅ Π΅Π΄Π½Π° сСкция Π² promtail.yml:

- match:
   selector: '{request_type="api"}'
   stages:
     - metrics:
         http_nginx_response_time:
           type: Histogram
           description: "Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π² 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: "сума Π½Π° Π±Π°ΠΉΡ‚ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€"
           source: bytes_out
           config:
             action: add
         http_nginx_response_bytes_count:
           type: Counter
           description: "броя Π½Π° Π±Π°ΠΉΡ‚ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€"
           source: bytes_out
           config:
             action: inc

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

По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈΡ‚Π΅ Ρ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚ΡƒΠΊ..

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

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

Π£Π±Π΅Π΄Π΅Ρ‚Π΅ сС, Ρ‡Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈΡ‚Π΅ с прСфикс promtail_custom са сС появили:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

НастройвамС Prometheus. ДобавямС job promtail:

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

И рисувамС Π³Ρ€Π°Ρ„ΠΈΠΊ:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈΡ‚Π΅ Π½Π°ΠΉ-Π±Π°Π²Π½ΠΈ запитвания. ОсвСн Ρ‚ΠΎΠ²Π° Π½Π° Ρ‚Π΅Π·ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС настрои ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³.

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

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

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

На конфСрСнцията DevOpsDays Vancouver 2019 Π΅Π΄ΠΈΠ½ ΠΎΡ‚ участницитС Callum Styan спомСна, Ρ‡Π΅ с Loki нСговият ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π° с ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚ΠΈ Π»ΠΎΠ³ΠΎΠ²Π΅ с индСкс ΠΏΠΎΠ΄ 1% ΠΎΡ‚ общия Ρ€Π°Π·ΠΌΠ΅Ρ€: "How Loki Correlates Metrics and Logs β€” And Saves You Money".

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° Loki ΠΈ ELK

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

Π—Π° тСстванС Π½Π° получСния Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° индСкса Π²Π·Π΅Ρ… Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° nginx, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ сС Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠ²Π°ΡˆΠ΅ Pipeline, прСдоставСн ΠΏΠΎ-Π³ΠΎΡ€Π΅. Π€Π°ΠΉΠ»ΡŠΡ‚ с Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°ΡˆΠ΅ 406 624 Ρ€Π΅Π΄Π° с ΠΎΠ±Ρ‰ ΠΎΠ±Π΅ΠΌ 109 Мб. Π›ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ…Π° Π·Π° Π΅Π΄ΠΈΠ½ час, ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ 100 записа Π² сСкунда.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π΄Π²Π° Ρ€Π΅Π΄Π° ΠΎΡ‚ Π»ΠΎΠ³Π°:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

ΠŸΡ€ΠΈ индСксацията Π² ELK Ρ‚ΠΎΠ²Π° Π΄Π°Π»ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° индСкса 30,3 Мб:

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

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

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ с Loki

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

Бкорост

Loki ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ β€žΠΈΠ·ΡΠΆΠ΄Π°β€œ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅. Бкоростта зависи ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ – ΠΊΠ°ΠΊΠ²ΠΈ са Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠ»ΠΊΠΎ слоТни са парсинга, ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, диска ΠΈ Ρ‚.Π½. – Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π΅ ΠΏΠΎ-висока ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Π½Π° ELK (Π² тСста ΠΌΠΈ – ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ). Π’ΠΎΠ²Π° сС обяснява с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Loki поставя ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ Π² индСкса ΠΈ слСдоватСлно отдСля ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° индСксиранС. По ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° скоростта Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ ΠΎΠ±Π°Ρ‡Π΅ ситуацията Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Π°: Loki Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ забавя Π½Π° Π΄Π°Π½Π½ΠΈ с Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π°Π΄ няколко Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°, ΠΏΡ€ΠΈ ELK скоростта Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π΅ зависи ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅.

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅

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

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ

На ΠΏΡŠΡ€Π²ΠΎ място, Ρ‚ΠΎΠ²Π° Π΅ красиво (ΠΈΠ·Π²ΠΈΠ½Π΅Ρ‚Π΅, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ… Π΄Π° сС ΡΠ΄ΡŠΡ€ΠΆΠ°). Grafana ΠΈΠΌΠ° приятСн Π·Π° ΠΎΡ‡ΠΈΡ‚Π΅ интСрфСйс, Π½ΠΎ Kibana Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π°.

ПлюсовС ΠΈ минуси Π½Π° Loki

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

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

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

Loki Π΅ изцяло интСрСсна тСхнология, която ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π° Π·Π° ΠΌΠ°Π»ΠΊΠΈ ΠΈ срСдни ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, позволявайки Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° мноТСство Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° агрСгация Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅, Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² Π»ΠΎΠ³ΠΎΠ²Π΅, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅.

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

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

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌΡŠΡ‚ с ΠΊΠΎΠ΄Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² статията, сС Π½Π°ΠΌΠΈΡ€Π° Ρ‚ΡƒΠΊ.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster