ΠΠΈΠ΅ ΠΎΡ Badoo Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΡΠ»Π΅Π΄ΠΈΠΌ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΏΡΠ΅ΡΠ΅Π½ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ»ΠΈ Π½Π΅ Π² Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ Π΅Π΄Π½ΠΎ ΠΎΡ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΡΡΠ²Π°Π½ΠΈΡ Ρ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°. ΠΠΎΡΠ²Π΅ΡΠ΅Π½ Π΅ Π½Π° Loki, ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
Loki Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π΅ ΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΡΠΎΠ·ΠΈ ΡΡΠ΅ΠΊ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π³ΡΠ²ΠΊΠ°Π²Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΡΡΡ Π½ΠΎΡΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ Prometheus. ΠΡΠ΅Π· ΠΌΠ°ΠΉ Π±Π΅ΡΠ΅ ΠΏΡΡΠ½Π°ΡΠ° Π΄ΡΡΠ³Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠΈΠ·ΠΈΡΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΡ ΡΡΠ·Π΄Π°ΡΠ΅Π»ΠΈΡΠ΅. ΠΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°Ρ ΠΌΠ΅ ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Loki, ΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΈ Π΄ΠΎ ΠΊΠ°ΠΊΠ²Π° ΡΡΠ΅ΠΏΠ΅Π½ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΠΉΡΡΠ²Π° ΠΊΠ°ΡΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° ELK, ΡΡΠ΅ΠΊΠ°, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅Π³Π°.
ΠΠ°ΠΊΠ²ΠΎ Π΅ ΠΠΎΠΊΠΈ
Grafana Loki Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΡΡΠ»ΠΎΡΡΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π΄ΡΡΠ²ΠΎΠ΄ΠΎΠ±ΠΈΠ². ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Loki ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΠΈΠ΄Π΅ΡΡΠ° Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ - Π΅ΡΠΈΠΊΠ΅ΡΠΈ (ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΡΠΎ Π² Prometheus) ΠΈ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π΅Π΄ΠΈΠ½ Π΄ΠΎ Π΄ΡΡΠ³ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ°.
ΠΡΠ΅Π΄ΠΈ Π΄Π° Π½Π°Π²Π»ΡΠ·Π° Π² ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ Ρ 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 Π½Π° Π·Π°ΠΏΠΈΡ, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΈΡ Π½ΠΈΠ·:
ΠΡΠ»Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°
Π Π°Π·Π±ΠΎΡ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊ
ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ:
- Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Promtail, ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π° ΡΡΠ΅ΠΊΠ° Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅.
- ΠΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ Π΄ΠΎΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ°
ΠΡΠ°ΠΉΠ²Π΅Ρ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° Loki Docker. - ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Fluentd ΠΈΠ»ΠΈ Fluent Bit, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π΄Π°Π½Π½ΠΈ Π΄ΠΎ Loki. ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ Promtail, ΡΠ΅ ΠΈΠΌΠ°Ρ Π³ΠΎΡΠΎΠ²ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠΈ Π·Π° ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΏ ΠΆΡΡΠ½Π°Π» ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΅Π΄ΠΎΠ²ΠΈ ΠΆΡΡΠ½Π°Π»ΠΈ.
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Promtail ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅. ΠΡΠ°Π²ΠΈ ΡΡΠΈ Π½Π΅ΡΠ°:
- ΠΠ°ΠΌΠΈΡΠ° ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ.
- ΠΡΠΈΠΊΡΠ΅ΠΏΠ΅ΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈ ΠΊΡΠΌ ΡΡΡ .
- ΠΠ·ΠΏΡΠ°ΡΠ° Π΄Π°Π½Π½ΠΈ Π½Π° ΠΠΎΠΊΠΈ.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Promtail ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ ΠΆΡΡΠ½Π°Π». Π’ΠΎΠΉ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Π½Π° Π²ΡΡΠΊΠ° ΠΌΠ°ΡΠΈΠ½Π°, ΠΎΡ ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ±ΠΈΡΠ°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
ΠΠΌΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Kubernetes: Promtail Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΡΡΠ΅Π· Kubernetes REST API ΠΈ ΡΡΠ±ΠΈΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ Π²ΡΠ·Π΅Π», ΡΡΠ»ΡΠ³Π° ΠΈΠ»ΠΈ pod, Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΠΊΠΈ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ ΠΎΡ Kubernetes (ΠΈΠΌΠ΅ Π½Π° pod, ΠΈΠΌΠ΅ Π½Π° ΡΠ°ΠΉΠ» ΠΈ Ρ.Π½.).
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° ΠΎΠΊΠ°ΡΠΈΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Pipeline. Pipeline Promtail ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΠ΅ΡΠΈΡΠΈ ΡΠΈΠΏΠ° Π΅ΡΠ°ΠΏΠΈ. ΠΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ - Π²
- ΠΡΠ°ΠΏΠΈ Π½Π° ΡΠ°Π·Π±ΠΎΡ. Π’ΠΎΠ²Π° Π΅ Π΅ΡΠ°ΠΏΡΡ Π½Π° RegEx ΠΈ JSON. ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΠΈΠ·Π²Π»ΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ Π² ΡΠ°ΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½Π°ΡΠ° ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π° ΠΊΠ°ΡΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΡΠ΅ ΠΎΡ JSON, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ°, ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ, Π² ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ° ΠΈΠ»ΠΈ ΡΡΠ΅Π· ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ (RegEx), ΠΊΡΠ΄Π΅ΡΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈΡΠ΅ Π³ΡΡΠΏΠΈ ΡΠ΅ βΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ°Ρβ Π² ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°. ΠΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ° Π΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π° ΠΊΠ»ΡΡ-ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΠΊΠ»ΡΡΡΡ Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ»Π΅ΡΠΎ, Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
- ΠΡΠ°ΠΏΠΈ Π½Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ. Π’ΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΠΏΡΠΈΠΈ: transform, ΠΊΡΠ΄Π΅ΡΠΎ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΈ source - ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° ΠΎΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°. ΠΠΊΠΎ Π² ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ° Π½ΡΠΌΠ° ΡΠ°ΠΊΠΎΠ²Π° ΠΏΠΎΠ»Π΅, ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°. ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΎΡΡΠ° ΠΌΠΎΡΠ΅Π½
Π³ΠΎΠ»Π°Π½Π³ ΡΠ°Π±Π»ΠΎΠ½ . ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ° Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π·Π°ΡΠ΅Π΄Π΅Π½Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π² Π½Π΅Ρ: β{{if .tag}tag value exists{end}}β. Π¨Π°Π±Π»ΠΎΠ½ΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΡΠ»ΠΎΠ²ΠΈΡ, ΡΠΈΠΊΠ»ΠΈ ΠΈ Π½ΡΠΊΠΎΠΈ Π½ΠΈΠ·ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ Replace ΠΈ Trim. - ΠΡΠ°ΠΏΠΈ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½Π΅ΡΠΎ Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΎΡΠΎ:
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π΅ΡΠΈΠΊΠ΅Ρ ΠΎΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ ΠΎΡ Loki.
- ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΠΈΠ»ΠΈ Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΠ°ΡΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ ΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°.
- ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ (Π»ΠΎΠ³ ΡΠ΅ΠΊΡΡ), ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΡΠΈΠ΄Π°Ρ Π΄ΠΎ Loki.
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ.
- ΠΡΠ°ΠΏΠΈ Π½Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅. ΠΡΠ°ΠΏΡΡ Π½Π° ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅, ΠΊΡΠ΄Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΠΌ Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π½ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π² /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 ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΠΉΡΡΠ²Π° ΠΊΠ°ΡΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° Π³ΡΠ°ΡΠΈΠΊΠΈ Π½Π° Grafana, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ LogQL. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
- rate - Π±ΡΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°;
- count over time - Π±ΡΠΎΡΡ Π½Π° Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Π² Π΄Π°Π΄Π΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.
ΠΠΌΠ° ΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΠ°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Sum, Avg ΠΈ Π΄ΡΡΠ³ΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ½ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π³ΡΠ°ΡΠΈΠΊΠ° Π½Π° Π±ΡΠΎΡ HTTP Π³ΡΠ΅ΡΠΊΠΈ:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° Loki Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΎΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ Prometheus (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π»Π΅Π³Π΅Π½Π΄Π°ΡΠ°), Π½ΠΎ Loki ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ²ΡΡΠ·Π°Π½ ΠΊΠ°ΡΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ ΠΎΡ ΡΠΈΠΏΠ° Prometheus. ΠΠ΅ ΡΡΠΌ ΡΠΈΠ³ΡΡΠ΅Π½ Π΄Π°Π»ΠΈ ΡΠΎΠ²Π° Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½ΠΎ ΡΡΠ΄Π΅ΠΉΠΊΠΈ ΠΏΠΎ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ β
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ 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