ΠΠΎ Badoo, Π½ΠΈΠ΅ ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ Π³ΠΈ ΡΠ»Π΅Π΄ΠΈΠΌΠ΅ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΎΡΠ΅Π½ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Π²ΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΈ ΡΠ°ΠΊΠ°Π»Π΅ Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ Π΅Π΄Π½Π° ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΡΡΡΠ΄ΠΈΠΈ ΡΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠ°ΡΠ°. Π’ΠΎΡ Π΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ Π½Π° ΠΠΎΠΊΠΈ, ΡΠΈΡΡΠ΅ΠΌ Π·Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡΠ° Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ.
ΠΠΎΠΊΠΈ Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄ΡΠ²Π°ΡΠ΅ Π»ΠΎΠ³ΠΎΠ²ΠΈ, Π° ΠΎΠ²ΠΎΡ ΡΡΠ΅ΠΊ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΈ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ Π·Π° Π½ΠΈΠ²Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΄ΠΎ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ. ΠΠΎ ΠΌΠ°Ρ Π±Π΅ΡΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΎ ΡΡΡΠ΅ Π΅Π΄Π½ΠΎ Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅, ΠΊΠΎΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π³ΠΎ ΠΏΡΠΎΠΌΠΎΠ²ΠΈΡΠ°Π°Ρ ΠΊΡΠ΅Π°ΡΠΎΡΠΈΡΠ΅. ΠΠ΅Π²ΠΌΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π·Π° ΡΠΎΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Loki, ΠΊΠ°ΠΊΠ²ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΈ Π΄ΠΎ ΠΊΠΎΡ ΡΡΠ΅ΠΏΠ΅Π½ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΡΡΡΠ²ΡΠ²Π° ΠΊΠ°ΠΊΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° ELK, ΡΡΠ΅ΠΊΠΎΡ ΡΡΠΎ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ΅Π³Π°.
Π¨ΡΠΎ Π΅ ΠΠΎΠΊΠΈ
Grafana 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 ΡΠ΅ ΡΠΎΡΡΠΎΠΈ ΠΎΠ΄ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ: Promtail, Loki, Grafana. Promtail ΡΠΎΠ±ΠΈΡΠ° Π»ΠΎΠ³ΠΎΠ²ΠΈ, Π³ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° ΠΈ Π³ΠΈ ΠΈΡΠΏΡΠ°ΡΠ° Π΄ΠΎ ΠΠΎΠΊΠΈ. ΠΠΎΠΊΠΈ Π³ΠΈ ΡΡΠ²Π°. Π ΠΡΠ°ΡΠ°Π½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±Π°ΡΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ ΠΠΎΠΊΠΈ ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠΈΠΊΠ°ΠΆΠ΅. ΠΠΏΡΡΠΎ Π·Π΅ΠΌΠ΅Π½ΠΎ, Loki ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ ΠΈ ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π½ΠΈΠ· Π½ΠΈΠ². Π¦Π΅Π»ΠΈΠΎΡ ΠΎΡΠ°ΠΊ Π΄Π°Π²Π° ΠΎΠ΄Π»ΠΈΡΠ½ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Π΄ΠΎΡΠ΄ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ Π½Π°ΡΠΈΠ½ΠΎΡ Π½Π° ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ.
ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ ΠΎΠΏΠΈΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°
ΠΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ ΠΏΠΎ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π½Π° Grafana - Explorer. ΠΡΠ°ΡΠ°ΡΠ°ΡΠ° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ°Π·ΠΈΠΊΠΎΡ LogQL, ΠΊΠΎΡ Π΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ»ΠΈΡΠ΅Π½ ΡΠΎ PromQL ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ Prometheus. ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΌΠ΅ΡΠ° ΠΊΠ°ΠΊΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ Π³ΡΠΈΠΏ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
Π‘Π°ΠΌΠΎΡΠΎ Π±Π°ΡΠ°ΡΠ΅ ΡΠ΅ ΡΠΎΡΡΠΎΠΈ ΠΎΠ΄ Π΄Π²Π° Π΄Π΅Π»Π°: ΠΈΠ·Π±ΠΈΡΠ°Ρ ΠΈ ΡΠΈΠ»ΡΠ΅Ρ. Π‘Π΅Π»Π΅ΠΊΡΠΎΡΠΎΡ Π΅ ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ΠΈ ΠΌΠ΅ΡΠ°ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ (Π΅ΡΠΈΠΊΠ΅ΡΠΈ) ΠΊΠΎΠΈ ΡΠ΅ Π΄ΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ, Π° ΡΠΈΠ»ΡΠ΅ΡΠΎΡ Π΅ Π½ΠΈΠ·Π° Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ regexp ΡΡΠΎ Π³ΠΈ ΡΠΈΠ»ΡΡΠΈΡΠ° Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ ΠΈΠ·Π±ΠΈΡΠ°ΡΠΎΡ. ΠΠΎ Π΄Π°Π΄Π΅Π½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ: ΠΠΎ ΠΊΠ°Π΄ΡΠ°Π²ΠΈΡΠ΅ Π·Π°Π³ΡΠ°Π΄ΠΈ ΠΈΠΌΠ° ΠΈΠ·Π±ΠΈΡΠ°Ρ, ΡΓ¨ ΠΏΠΎΡΠΎΠ° Π΅ ΡΠΈΠ»ΡΠ΅Ρ.
{image_name="nginx.promtail.test"} |= "index"
ΠΠΎΡΠ°Π΄ΠΈ Π½Π°ΡΠΈΠ½ΠΎΡ Π½Π° ΠΊΠΎΡ ΡΠ°Π±ΠΎΡΠΈ ΠΠΎΠΊΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° Π±Π΅Π· ΡΠ΅Π»Π΅ΠΊΡΠΎΡ, Π½ΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²Π°Ρ ΡΠΎΠ»ΠΊΡ ΠΎΠΏΡΡΠΈ ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅.
ΠΠ·Π±ΠΈΡΠ°ΡΠΎΡ Π΅ ΠΊΠ»ΡΡΠ½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π²ΠΎ ΠΊΠ°Π΄ΡΠ°Π²Π° Π·Π°Π³ΡΠ°Π΄Π°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°ΡΠΈ ΠΈ Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈ Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ =, != ΠΈΠ»ΠΈ ΡΠ΅Π³ΡΠ»Π°ΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ:
{instance=~"kafka-[23]",name!="kafka-dev"}
// ΠΠ°ΠΉΠ΄ΡΡ Π»ΠΎΠ³ΠΈ Ρ Π»Π΅ΠΉΠ±Π»ΠΎΠΌ instance, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ kafka-2, kafka-3, ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡ dev
Π€ΠΈΠ»ΡΠ΅Ρ Π΅ ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ regexp ΡΡΠΎ ΡΠ΅ Π³ΠΈ ΡΠΈΠ»ΡΡΠΈΡΠ° ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ ΠΎΠ΄ ΠΈΠ·Π±ΠΈΡΠ°ΡΠΎΡ.
ΠΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°Ρ Π°Π΄-Ρ ΠΎΠΊ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½ΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ΡΡΠΎ Π·Π°ΠΏΠΈΡΠΎΡ ΡΡΠΎ Π³ΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΡ Π½Π° ΡΡΡΠΈΠ½Π³ΠΎΡ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π° Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ Π½Π° 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), ΠΊΠ°Π΄Π΅ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈΡΠ΅ Π³ΡΡΠΏΠΈ ΡΠ΅ βΠΌΠ°ΠΏΠΈΡΠ°Π°Ρβ Π²ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°. ΠΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΌΠ°ΠΏΠ° Π΅ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ Π·Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π½Π° ΠΊΠ»ΡΡΠ΅Π²ΠΈ, ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΊΠ»ΡΡΠΎΡ Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ»Π΅ΡΠΎ, Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΎΠ΄ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅.
- Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°ΡΡΠ΅ ΡΠ°Π·ΠΈ. ΠΠ²Π°Π° ΡΠ°Π·Π° ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΠΏΡΠΈΠΈ: ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΠ°, ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π³ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΠΌΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΠΈ ΠΈΠ·Π²ΠΎΡ - ΠΈΠ·Π²ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΠΎΠ΄ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°. ΠΠΎΠΊΠΎΠ»ΠΊΡ Π½Π΅ΠΌΠ° ΡΠ°ΠΊΠ²ΠΎ ΠΏΠΎΠ»Π΅ Π²ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°, ΡΠ°Π° ΡΠ΅ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°. ΠΠ° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½ Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ ΠΊΠΎΠΈ Π½Π΅ ΡΠ΅ Π±Π°Π·ΠΈΡΠ°Π°Ρ Π½Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°. ΠΠΎ ΠΎΠ²Π°Π° ΡΠ°Π·Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΠΌΠΎΡΠ΅Π½
Π¨Π°Π±Π»ΠΎΠ½ ΠΠΎΠ»Π°Π½Π³ . ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΌΠΎΡΠ°ΠΌΠ΅ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ° Π΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π²ΡΠΈΡΠ°Π½Π° Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΠ°ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ, ΡΡΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π²ΠΎ Π½Π΅Π°: β{{Π°ΠΊΠΎ .tag}Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΎΠ·Π½Π°ΠΊΠ°ΡΠ° ΠΏΠΎΡΡΠΎΠΈ{ΠΊΡΠ°Ρ}}β. Π¨Π°Π±Π»ΠΎΠ½ΠΎΡ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΡΠ»ΠΎΠ²ΠΈ, ΡΠ°ΠΌΠΊΠΈ ΠΈ Π½Π΅ΠΊΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Π½ΠΈΠ·Π° ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ Replace ΠΈ Trim. - Π€Π°Π·ΠΈ Π½Π° Π°ΠΊΡΠΈΡΠ°. ΠΠΎ ΠΎΠ²ΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½Π΅ΡΡΠΎ ΡΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°:
- ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠ° ΠΎΠ΄ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΊΠΎΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ ΠΠΎΠΊΠΈ.
- ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π³ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π½Π°ΡΡΠ°Π½ΠΎΡ ΠΎΠ΄ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ.
- ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π³ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ (ΡΠ΅ΠΊΡΡ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ) ΡΡΠΎ ΡΠ΅ ΠΎΠ΄Π°Ρ Π²ΠΎ ΠΠΎΠΊΠΈ.
- Π‘ΠΎΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠ°.
- Π€Π°Π·ΠΈ Π½Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠ΅. Π€Π°Π·Π° Π½Π° Π½Π°ΡΠΏΡΠ΅Π²Π°Ρ, ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΠΈΡΠΏΡΠ°ΡΠΈΠΌΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΡΡΠΎ Π½Π΅ Π½ΠΈ ΡΡΠ΅Π±Π°Π°Ρ Π΄Π° Π³ΠΈ /dev/null ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌΠ΅ Π·Π° ΠΏΠΎΠ½Π°ΡΠ°ΠΌΠΎΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°.
ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅Π΄ΠΎΠ²Π½ΠΈ Π»ΠΎΠ³ΠΎΠ²ΠΈ Π½Π° nginx, ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Promtail.
ΠΠ° ΡΠ΅ΡΡΠΎΡ, Π΄Π° Π·Π΅ΠΌΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ nginx-proxy ΠΈΠ·ΠΌΠ΅Π½Π΅ΡΠ° ΡΠ»ΠΈΠΊΠ° nginx jwilder/nginx-proxy:alpine ΠΈ ΠΌΠ°Π» Π΄Π΅ΠΌΠΎΠ½ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΡΠ°ΡΠ° ΠΏΡΠ΅ΠΊΡ HTTP. ΠΠ΅ΠΌΠΎΠ½ΠΎΡ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΊΡΠ°ΡΠ½ΠΈ ΡΠΎΡΠΊΠΈ, Π½Π° ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈ ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½ΠΈ, ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ 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"
ΠΠΊΠΎ ΡΡΠΏΠ΅Π°Π²ΠΌΠ΅ Π΄Π° Π³ΠΎ ΡΡΠ°Π²ΠΈΠΌΠ΅ ΠΏΠΎΠ»Π΅ΡΠΎ Π·Π° ΠΎΠ·Π½Π°ΠΊΠ° Π²ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°, ΡΠΎΠ³Π°Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ regexp Π³ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΡΠ²Π°ΠΌΠ΅ ΠΈΠΌΠΈΡΠ°ΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ.
- labels:
image_name:
container_name:
ΠΠΈΠ΅ Π΄ΠΎΠ΄Π΅Π»ΡΠ²Π°ΠΌΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈ. ΠΠΊΠΎ Π²ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ Π½Π°ΡΠ΄Π°Ρ ΠΊΠΎΠΏΡΠΈΡΠ°ΡΠ° image_name ΠΈ container_name, ΡΠΎΠ³Π°Ρ Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π΄ΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π½Π° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠΈ.
- match:
selector: '{job="docker",container_name="",image_name=""}'
action: drop
ΠΠΈ ΠΎΡΡΡΠ»Π°ΠΌΠ΅ ΡΠΈΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ ΠΊΠΎΠΈ Π½Π΅ΠΌΠ°Π°Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ Π΅ΡΠΈΠΊΠ΅ΡΠΈ image_name ΠΈ container_name.
- match:
selector: '{image_name="nginx.promtail.test"}'
stages:
- json:
expressions:
row: log
ΠΠ° ΡΠΈΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ ΡΠΈΠ΅ ΠΈΠΌΠ΅_ΠΈΠΌΠ΅ Π΅ nginx.promtail.test, ΠΈΠ·Π²Π°Π΄Π΅ΡΠ΅ Π³ΠΎ ΠΏΠΎΠ»Π΅ΡΠΎ Π·Π° Π΄Π½Π΅Π²Π½ΠΈΠΊ ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΠΊ ΠΈ ΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ Π²ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ° ΡΠΎ ΠΊΠΎΠΏΡΠ΅ΡΠΎ Π·Π° ΡΠ΅Π΄.
- regex:
# suppress forego colors
expression: .+nginx.+|.+[0m(?P<virtual_host>[a-z_.-]+) +(?P<nginxlog>.+)
source: logrow
ΠΠ° Π±ΡΠΈΡΠ΅ΠΌΠ΅ Π»ΠΈΠ½ΠΈΡΠ°ΡΠ° Π·Π° Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅ ΡΠΎ ΡΠ΅Π΄ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ ΠΈ Π³ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΡΠ²Π°ΠΌΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈΠΎΡ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ nginx ΠΈ Π»ΠΈΠ½ΠΈΡΠ°ΡΠ° nginx log.
- 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}}"
ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Π²ΠΎ Π¨Π°Π±Π»ΠΎΠ½, Π³ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠ° Π²ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ° ΠΈ Π³ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π·Π° ΠΏΠΎΠ»Π΅ΡΠΎ request_type: ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡΠ°, ΡΡΠ°ΡΠΈΠΊΠ°, API. ΠΠΎΠ΄Π΅Π»Π΅ΡΠ΅ Π΄ΡΡΠ³ΠΈ Π°ΠΊΠΎ Π½Π΅ ΡΡΠΏΠ΅Π΅. request_type ΡΠ΅Π³Π° Π³ΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠΈΠΏΠΎΡ Π½Π° Π±Π°ΡΠ°ΡΠ΅.
- labels:
api_request:
virtual_host:
request_type:
status:
ΠΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΠ²ΠΌΠ΅ ΠΎΠ·Π½Π°ΠΊΠΈΡΠ΅ api_request, virtual_host, request_type ΠΈ status (HTTP ΡΡΠ°ΡΡΡ) Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΎΠ½Π° ΡΡΠΎ ΡΡΠΏΠ΅Π°Π²ΠΌΠ΅ Π΄Π° Π³ΠΎ ΡΡΠ°Π²ΠΈΠΌΠ΅ Π²ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΊΠ°ΡΡΠ°.
- output:
source: nginx_log_row
ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π³ΠΎ ΠΈΠ·Π»Π΅Π·ΠΎΡ. Π‘Π΅Π³Π° ΠΈΡΡΠΈΡΡΠ΅Π½ΠΈΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° nginx ΠΎΠ΄ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΌΠ°ΠΏΠ° ΠΎΠ΄ΠΈ Π½Π° ΠΠΎΠΊΠΈ.
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ Π³ΠΎΡΠ½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π΄Π΅ΠΊΠ° Π½Π° ΡΠ΅ΠΊΠΎΡ Π·Π°ΠΏΠΈΡ ΠΌΡ ΡΠ΅ Π΄ΠΎΠ΄Π΅Π»ΡΠ²Π°Π°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΎΠ΄ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ.
ΠΠ΄Π½ΠΎ Π½Π΅ΡΡΠΎ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΠΌΠ° Π½Π° ΡΠΌ Π΅ Π΄Π΅ΠΊΠ° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ΡΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ (ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»Π½ΠΎΡΡ) ΠΌΠΎΠΆΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π³ΠΎ Π·Π°Π±Π°Π²ΠΈ ΠΠΎΠΊΠΈ. Π’ΠΎΠ° Π΅, Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΡΠ°Π²Π°ΡΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, user_id Π²ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΡ. ΠΡΠΎΡΠΈΡΠ°ΡΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΎΠ²Π° Π²ΠΎ ΡΡΠ°ΡΠΈΡΠ°ΡΠ° β
ΠΠΈΠ·ΡΠ΅Π»ΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΡΡΡΠΏΡΠΈ
ΠΠΎΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΡΡΡΠ²ΡΠ²Π° ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π³ΡΠ°ΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΡΠ°ΡΠ°Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ LogQL. Π‘Π»Π΅Π΄Π½ΠΈΠ²Π΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ:
- ΡΡΠ°ΠΏΠΊΠ° - Π±ΡΠΎΡ Π½Π° Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄Π°;
- Π±ΡΠΎΠΈ ΡΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ β Π±ΡΠΎΡΠΎΡ Π½Π° Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΎΡ ΠΎΠΏΡΠ΅Π³.
ΠΠΎΡΡΠΎΡΠ°Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡΠ° Sum, Avg ΠΈ Π΄ΡΡΠ³ΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ΅Π½ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½ΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½ Π·Π° Π±ΡΠΎΡΠΎΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π²ΠΎ HTTP:
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΠΎΡ ΠΈΠ·Π²ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Loki Π΅ ΠΌΠ°Π»ΠΊΡ Π½Π°ΠΌΠ°Π»Π΅Π½ Π²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° Π²ΠΎ ΡΠΏΠΎΡΠ΅Π΄Π±Π° ΡΠΎ ΠΈΠ·Π²ΠΎΡΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Prometheus (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π»Π΅Π³Π΅Π½Π΄Π°ΡΠ°), Π½ΠΎ Loki ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π΅ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΠΎΡ ΡΠΎ ΡΠΈΠΏΠΎΡ Prometheus. ΠΠ΅ ΡΡΠΌ ΡΠΈΠ³ΡΡΠ΅Π½ Π΄Π°Π»ΠΈ ΠΎΠ²Π° Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΎ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅, Π½ΠΎ ΡΡΠ΄Π΅ΡΡΠΈ ΡΠΏΠΎΡΠ΅Π΄ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΎΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ β
ΠΠΎΠ΄Π°Π΄Π΅ΡΠ΅ Loki ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠΎ ΡΠΈΠΏ Prometheus ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ URL /loki:
Π ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½ΠΈ, ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ ΡΠΎ ΠΌΠ΅ΡΡΠΈΠΊΠ° ΠΎΠ΄ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ:
ΠΠΈΡΠ»Π°ΠΌ Π΄Π΅ΠΊΠ° Π½Π΅ΡΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΎΡΡΠ° Π²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° Π΅ ΠΏΡΠΈΠ²ΡΠ΅ΠΌΠ΅Π½Π° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ΅ Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²Π°Ρ ΡΠΎΠ° Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π°.
ΠΠ΅ΡΡΠΈΠΊΠ°
ΠΠΎΠΊΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·Π²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ Π½Π° Π½ΡΠΌΠ΅ΡΠΈΡΠΊΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΎΠ΄ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ Π΄ΠΎ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ Π½Π° nginx Π³ΠΎ ΡΠΎΠ΄ΡΠΆΠΈ Π±ΡΠΎΡΠΎΡ Π½Π° Π±Π°ΡΡΠΈ ΠΏΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ, ΠΊΠ°ΠΊΠΎ ΠΈ, ΡΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΠΎΡ ΡΠΎΡΠΌΠ°Ρ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ, Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈ. ΠΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ°Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠ°Ρ Π΄ΠΎ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ.
ΠΠΎΠ΄Π°ΡΡΠ΅ Π΄ΡΡΠ³ Π΄Π΅Π» Π²ΠΎ 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. ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Π΄Π° Π³ΠΈ ΠΏΡΠΈΠΌΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ Π²ΠΎ ΠΎΠ²Π°Π° ΡΠ°Π·Π°. ΠΠΎ Π³ΠΎΡΠ½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° request_type=βapiβ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠ° Π½Π° Ρ ΠΈΡΡΠΎΠ³ΡΠ°ΠΌ. Π‘ΠΎ ΠΎΠ²ΠΎΡ ΡΠΈΠΏ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠ° Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°Ρ ΠΏΠ΅ΡΡΠ΅Π½ΡΠΈΠ»ΠΈ. ΠΠ° ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΠΈ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ, Π³ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ Π·Π±ΠΈΡΠΎΡ Π½Π° Π±Π°ΡΡΠΈ ΠΈ Π±ΡΠΎΡΠΎΡ Π½Π° ΡΠ΅Π΄ΠΎΠ²ΠΈ Π²ΠΎ ΠΊΠΎΠΈ ΡΠΌΠ΅ Π΄ΠΎΠ±ΠΈΠ»Π΅ Π±Π°ΡΡΠΈ Π·Π° Π΄Π° Π³ΠΎ ΠΏΡΠ΅ΡΠΌΠ΅ΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΠΊΠΎΡ.
ΠΡΠΎΡΠΈΡΠ°ΡΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ ΡΠ° ΠΏΠΎΡΡΠ°ΡΠ° Π½Π° Promtail:
promtail:
image: grafana/promtail:1.4.1
container_name: monitoring.promtail
expose:
- 9080
ports:
- "9080:9080"
ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π°Π°Ρ ΠΌΠ΅ΡΡΠΈΠΊΠ° ΡΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΡ promtail_custom:
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ. ΠΠΎΠ΄Π°ΡΡΠ΅ ΠΏΡΠΎΠΌΠΎΡΠΈΠ²Π½Π° ΡΠ°Π±ΠΎΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ°:
- job_name: 'promtail'
scrape_interval: 10s
static_configs:
- targets: ['promtail:9080']
Π Π½ΠΈΠ΅ ΡΡΡΠ°ΠΌΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½:
ΠΠ° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π΄ΠΎΠ·Π½Π°Π΅ΡΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠΈΡΠΈΡΠ΅ Π½Π°ΡΠ±Π°Π²Π½ΠΈ ΠΏΡΠ°ΡΠ°ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π·Π° ΠΎΠ²ΠΈΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ.
Π‘ΠΊΠ°Π»ΠΈΡΠ°ΡΠ΅
ΠΠΎΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΈΠ»ΠΈ Π²ΠΎ Π΅Π΄ΠΈΠ½Π΅ΡΠ΅Π½ Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΈΠ»ΠΈ Π²ΠΎ ΡΠΊΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ (Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ-ΡΠΊΠ°Π»Π°Π±ΠΈΠ»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ). ΠΠΎ Π²ΡΠΎΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΡΡΠ²Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ, Π° Π΄Π΅Π»ΠΎΠ²ΠΈΡΠ΅ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΡ ΡΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°Π°Ρ ΠΎΠ΄Π΄Π΅Π»Π½ΠΎ. ΠΠ΅ΡΠ·ΠΈΡΠ°ΡΠ° 1.5 Π²ΠΎΠ²Π΅Π΄ΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΌΠ΅ΡΡΠΎ, Π½ΠΎ ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ Π΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ»ΠΈΠ²ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ.
ΠΠ°ΡΡΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°Π°Ρ Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ ΡΡΠΎ Π΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎ ΡΠΎ S3, Π° Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ ΡΠΊΠ°Π»Π°Π±ΠΈΠ»Π½ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈ: Cassandra, BigTable ΠΈΠ»ΠΈ DynamoDB. ΠΡΡΠ³ΠΈΡΠ΅ Π΄Π΅Π»ΠΎΠ²ΠΈ Π½Π° Loki - ΠΠΈΡΡΡΠΈΠ±ΡΡΠ΅ΡΠΈ (Π·Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅) ΠΈ Querier (Π·Π° ΠΏΡΠ°ΡΠ°ΡΠ°) - ΡΠ΅ Π±Π΅Π· Π΄ΡΠΆΠ°Π²ΡΠ°Π½ΡΡΠ²ΠΎ, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΊΠ°Π»ΠΈΡΠ°Π°Ρ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ.
ΠΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° DevOpsDays Vancouver 2019, Π΅Π΄Π΅Π½ ΠΎΠ΄ ΡΡΠ΅ΡΠ½ΠΈΡΠΈΡΠ΅ ΠΠ°Π»ΡΠΌ Π‘ΡΡΠ°Π½ ΠΎΠ±ΡΠ°Π²ΠΈ Π΄Π΅ΠΊΠ° ΡΠΎ ΠΠΎΠΊΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠΌΠ° ΠΏΠ΅ΡΠ°Π±Π°ΡΡΠΈ Π»ΠΎΠ³ΠΎΠ²ΠΈ ΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠΌΠ°Π» ΠΎΠ΄ 1% ΠΎΠ΄ Π²ΠΊΡΠΏΠ½Π°ΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°:
Π‘ΠΏΠΎΡΠ΅Π΄Π±Π° Π½Π° ΠΠΎΠΊΠΈ ΠΈ ΠΠΠ
ΠΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ
ΠΠ° Π΄Π° ΡΠ° ΡΠ΅ΡΡΠΈΡΠ°ΠΌ Π΄ΠΎΠ±ΠΈΠ΅Π½Π°ΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΡ, Π·Π΅Π΄ΠΎΠ² Π»ΠΎΠ³ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ nginx Π·Π° ΠΊΠΎΡ Π±Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Π³Π°ΡΠΎΠ²ΠΎΠ΄ΠΎΡ ΠΏΠΎΠ³ΠΎΡΠ΅. ΠΠ°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ° ΡΠΎΠ΄ΡΠΆΠ΅ΡΠ΅ 406 Π»ΠΈΠ½ΠΈΠΈ ΡΠΎ Π²ΠΊΡΠΏΠ΅Π½ Π²ΠΎΠ»ΡΠΌΠ΅Π½ ΠΎΠ΄ 624 MB. ΠΠ½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ Π±Π΅Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΡΠΎΠΊ ΠΎΠ΄ Π΅Π΄Π΅Π½ ΡΠ°Ρ, ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 109 Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄Π°.
ΠΡΠΈΠΌΠ΅Ρ Π·Π° Π΄Π²Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΎΠ΄ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ:
ΠΠΎΠ³Π° ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ° ΠΎΠ΄ ELK, ΠΎΠ²Π° Π΄Π°Π΄Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ ΠΎΠ΄ 30,3 MB:
ΠΠΎ ΡΠ»ΡΡΠ°ΡΠΎΡ Π½Π° Loki, ΠΎΠ²Π° ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ°ΡΠ΅ ΡΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 128 KB ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 3,8 MB ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΠΏΠ°ΡΡΠΈΡΠ°. ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΎΠΌΠ΅Π½Π΅ Π΄Π΅ΠΊΠ° Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ Π±Π΅ΡΠ΅ Π²Π΅ΡΡΠ°ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ ΠΈ Π½Π΅ΠΌΠ°ΡΠ΅ Π³ΠΎΠ»Π΅ΠΌΠ° ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ΄Π½ΠΎΡΡΠ°Π²Π΅Π½ gzip Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° Docker JSON ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΄Π°Π΄Π΅ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ° ΠΎΠ΄ 95,4%, Π° Π·Π΅ΠΌΠ°ΡΡΠΈ Π³ΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠ°ΠΊΡΠΎΡ Π΄Π΅ΠΊΠ° ΡΠ°ΠΌΠΎ ΠΈΡΡΠΈΡΡΠ΅Π½ΠΈΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° nginx Π±Π΅ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠ΅Π½ Π΄ΠΎ ΡΠ°ΠΌΠΈΠΎΡ Loki, ΡΠ°Π·Π±ΠΈΡΠ»ΠΈΠ²Π° Π΅ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ° Π΄ΠΎ 4 MB. ΠΠΊΡΠΏΠ½ΠΈΠΎΡ Π±ΡΠΎΡ Π½Π° ΡΠ½ΠΈΠΊΠ°ΡΠ½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π·Π° Π΅ΡΠΈΠΊΠ΅ΡΠΈΡΠ΅ ΠΠΎΠΊΠΈ Π±Π΅ΡΠ΅ 35, ΡΡΠΎ ΡΠ° ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π° ΠΌΠ°Π»Π°ΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΡ. ΠΠ° ΠΠΠ ΠΈ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ Π΅ ΠΈΡΡΠΈΡΡΠ΅Π½. Π’Π°ΠΊΠ°, ΠΠΎΠΊΠΈ Π³ΠΈ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° 96%, Π° ELK Π·Π° 70%.
ΠΠΎΡΡΠΎΡΡΠ²Π°ΡΠΊΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°
ΠΠΊΠΎ Π³ΠΎ ΡΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠ΅ ΡΠ΅Π»ΠΈΠΎΡ ΠΎΡΠ°ΠΊ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ ΠΈ ΠΠΠ, ΡΠΎΠ³Π°Ρ ΠΠΎΠΊΠΈ βΡΠ°Π΄Π΅β Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΠ°ΡΠΈ ΠΏΠΎΠΌΠ°Π»ΠΊΡ. ΠΠ°ΡΠ½ΠΎ Π΅ Π΄Π΅ΠΊΠ° ΡΡΠ»ΡΠ³Π°ΡΠ° Go ΡΡΠΎΡΠΈ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΎΠ΄ Java ΡΡΠ»ΡΠ³Π°ΡΠ°, Π° ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° JVM Heap Elasticsearch ΠΈ Π΄ΠΎΠ΄Π΅Π»Π΅Π½Π°ΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π·Π° Loki Π΅ Π½Π΅ΡΠΎΡΠ½ΠΎ, Π½ΠΎ ΡΠ΅ΠΏΠ°ΠΊ Π²ΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΎΠΌΠ΅Π½Π΅ Π΄Π΅ΠΊΠ° Loki ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°. ΠΠ΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΡΠ΅Π΄Π½ΠΎΡΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΡ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½Π°, Π½ΠΎ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ ΠΏΡΠΈΡΡΡΠ½Π°.
ΠΡΠ·ΠΈΠ½Π°
ΠΠΎΠΊΠΈ ΠΏΠΎΠ±ΡΠ·ΠΎ Π³ΠΈ βΠ³ΠΎΠ»ΡΠ°β Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅. ΠΡΠ·ΠΈΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΠΌΠ½ΠΎΠ³Ρ ΡΠ°ΠΊΡΠΎΡΠΈ - ΠΊΠ°ΠΊΠ²ΠΈ ΡΠ΅ Π»ΠΎΠ³ΠΎΠ²ΠΈ, ΠΊΠΎΠ»ΠΊΡ ΡΠΌΠ΅ ΡΠΎΡΠΈΡΡΠΈΡΠΈΡΠ°Π½ΠΈ Π²ΠΎ Π½ΠΈΠ²Π½ΠΎΡΠΎ ΠΏΠ°ΡΡΠΈΡΠ°ΡΠ΅, ΠΌΡΠ΅ΠΆΠ°, Π΄ΠΈΡΠΊ ΠΈΡΠ½. - Π½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠ²Π½ΠΎ Π΅ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠ° ΠΎΠ΄ ELK (Π²ΠΎ ΠΌΠΎΡΠΎΡ ΡΠ΅ΡΡ - ΠΎΠΊΠΎΠ»Ρ Π΄Π²ΠΎΡΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅). ΠΠ²Π° ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π° ΡΠΎ ΡΠ°ΠΊΡΠΎΡ Π΄Π΅ΠΊΠ° ΠΠΎΠΊΠΈ ΡΡΠ°Π²Π° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΡ ΠΈ, ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ, ΡΡΠΎΡΠΈ ΠΏΠΎΠΌΠ°Π»ΠΊΡ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°ΡΠ΅. Π‘ΠΎ Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅, ΡΠΈΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΡΠΏΡΠΎΡΠΈΠ²Π½Π°: Loki Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΏΠΎΡΡΠ²Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ΄ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π³ΠΈΠ³Π°Π±Π°ΡΡΠΈ, Π΄ΠΎΠ΄Π΅ΠΊΠ° Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π½Π° ELK Π½Π΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅.
ΠΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ ΠΏΠΎ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ
ΠΠΎΠΊΠΈ Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠΈΠΎΡΠ΅Π½ Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ELK Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ. Grep ΡΠΎ ΡΠ΅Π³ΡΠ»Π°ΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ Π΅ ΠΌΠΎΡΠ΅Π½, Π½ΠΎ Π΅ ΠΈΠ½ΡΠ΅ΡΠΈΠΎΡΠ΅Π½ Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° Π·ΡΠ΅Π»Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊΠΎΡ Π½Π° ΠΏΡΠ°ΡΠ°ΡΠ° Π·Π° ΠΎΠΏΡΠ΅Π³, Π°Π³ΡΠ΅Π³Π°ΡΠΈΡΠ° ΡΠ°ΠΌΠΎ ΠΏΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈ, Π½Π΅ΠΌΠΎΠΆΠ½ΠΎΡΡΠ° Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π±Π΅Π· Π΅ΡΠΈΠΊΠ΅ΡΠΈ - ΡΠ΅ΡΠΎ ΡΠΎΠ° Π½Γ¨ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π° Π²ΠΎ Π±Π°ΡΠ°ΡΠ΅ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ Π²ΠΎ ΠΠΎΠΊΠΈ. ΠΠ²Π° Π½Π΅ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π½ΠΈΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Loki, Π½ΠΎ Π³ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΡΠ΅ΠΊΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ ΠΊΠΎΠ³Π° ΠΏΡΠ²ΠΎ ΡΠ΅ Π½Π°ΡΠ΄Π΅ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²ΠΎ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½ΠΈΡΠ΅ Π½Π° Prometheus, Π° ΠΏΠΎΡΠΎΠ° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΎΠ·Π½Π°ΠΊΠΈ Π·Π° Π΄Π° ΠΏΠΎΠ±Π°ΡΠ°ΡΠ΅ ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠΈΠ»ΠΎ Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅.
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ
ΠΠ°ΠΊΠΎ ΠΏΡΠ²ΠΎ, ΡΠ±Π°Π²ΠΎ Π΅ (ΠΈΠ·Π²ΠΈΠ½ΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅Π² Π΄Π° ΠΎΠ΄ΠΎΠ»Π΅Π°ΠΌ). Grafana ΠΈΠΌΠ° ΡΠ±Π°Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ, Π½ΠΎ Kibana Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ±ΠΎΠ³Π°Ρ ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΠ±ΡΠΈΡΠ΅ ΠΈ Π»ΠΎΡΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈ Π½Π° ΠΠΎΠΊΠΈ
ΠΠ΄Π½Π° ΠΎΠ΄ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π΅ ΡΡΠΎ ΠΠΎΠΊΠΈ ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ° ΡΠΎ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ, ΡΠ°ΠΊΠ° ΡΡΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠ° ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΊΡΡΠΈΡΠ°ΡΠ°. ΠΠΎΠ³ΠΎΠ΄Π½ΠΎ Π΅ Π·Π° ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅ ΡΡΡΠΏΡΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΎΠ΄ Kubernetes Pods, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΈΠΌΠ° ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈ Π½Π°ΡΠ»Π΅Π΄Π΅Π½ΠΎ ΠΎΠ΄ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΠΏΡΠΈΠΊΠ°ΡΡΠ²Π° Π΅ΡΠΈΠΊΠ΅ΡΠΈ.
ΠΠ΅Π³Π°ΡΠΈΠ²Π½Π° ΡΡΡΠ°Π½Π° Π΅ ΡΠ»Π°Π±Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°. ΠΠ΅ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Promtail, Π³ΠΈ ΠΎΡΠΊΡΠΈΠ² ΡΠ°ΠΌΠΎ Π²ΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΏΡΠΎΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ, Π·Π° ΡΡΠ΅ΡΠ° ΡΠΎΡ Π΅ ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄. ΠΡΡΠ³ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΡΠ΅ ΡΠ»Π°Π±ΠΈΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΏΠ°ΡΡΠΈΡΠ°ΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Loki Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΠΎΠ²Π΅ΡΠ΅Π»ΠΈΠ½ΠΈΡΠΊΠΈ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ. ΠΡΡΠ³ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ Π΅ ΡΠΎΠ° ΡΡΠΎ Loki Π΅ ΡΠ΅Π»Π°ΡΠΈΠ²Π½ΠΎ ΠΌΠ»Π°Π΄Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° (ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ 1.0 Π±Π΅ΡΠ΅ Π²ΠΎ Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ 2019 Π³ΠΎΠ΄ΠΈΠ½Π°).
ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
Loki Π΅ 100% ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° ΠΊΠΎΡΠ° Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° ΠΌΠ°Π»ΠΈ ΠΈ ΡΡΠ΅Π΄Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΡΠΈ Π²ΠΈ Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡΠ° Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ, ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ, ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ.
ΠΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ Loki Π²ΠΎ Badoo Π·Π°ΡΠΎΠ° ΡΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ELK ΡΡΠ΅ΠΊ ΡΡΠΎ Π½ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° ΠΈ ΠΊΠΎΡ Π΅ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° ΡΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° Π³ΠΎΠ΄ΠΈΠ½ΠΈΡΠ΅. ΠΠ° Π½Π°Ρ ΠΊΠ°ΠΌΠ΅Π½ Π½Π° ΡΠΎΠΏΠ½ΡΠ²Π°ΡΠ΅ Π΅ ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½ΠΈΠ· ΡΡΡΠΏΡΠΈΡΠ΅. Π‘ΠΎ ΡΠ΅ΡΠΈΡΠΈ 100 GB Π΄Π½Π΅Π²Π½ΠΈΡΠΈ Π΄Π½Π΅Π²Π½ΠΎ, Π·Π° Π½Π°Ρ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π½Π°ΡΠ΄Π΅ΠΌΠ΅ ΡΓ¨ ΠΈ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠΎΠ° Π±ΡΠ·ΠΎ. ΠΠ° ΡΡΡΠ°ΡΠ΅ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ Π΄ΡΡΠ³ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° ΠΊΠΎΠΈ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ΠΈ Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ΠΈ Π΅Π΄Π½ΠΈ ΡΠΎ Π΄ΡΡΠ³ΠΈ. ΠΠΎΠΊΠΈ ΠΎΡΠ°ΠΊΠΎΡ ΠΈΠΌΠ° ΠΎΠΏΠΈΠΏΠ»ΠΈΠ²ΠΈ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈ, Π½ΠΎ Π½Π΅ΠΌΠ° Π΄Π° Π½ΠΈ Π΄Π°Π΄Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅, Π° Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎ Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΈ Π½Π°Π΄ΠΌΠΈΠ½Π°Ρ ΡΡΠΎΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠ°.
Π ΠΈΠ°ΠΊΠΎ ΠΏΠΎ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠ΅ΡΠΎ ΡΡΠ°Π½Π° ΡΠ°ΡΠ½ΠΎ Π΄Π΅ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΠΠΎΠΊΠΈ, ΡΠ΅ Π½Π°Π΄Π΅Π²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΎΠ²ΠΎΡ ΠΏΠΎΡΡ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π²ΠΎ ΠΈΠ·Π±ΠΎΡΠΎΡ.
Π‘Π΅ Π½Π°ΠΎΡΠ° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ ΡΠΎ ΠΊΠΎΠ΄ΠΎΡ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΡΡΠ°ΡΠΈΡΠ°ΡΠ°
ΠΠ·Π²ΠΎΡ: www.habr.com