ΠΡΠ°ΡΠΊΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- Visiology Robot (Unlicensed)
Π’ΠΈΠΏ ΡΡΠ°ΡΡΠΈ | Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ |
---|---|
ΠΠΎΠΌΠΏΠ΅ΡΠ΅Π½ΡΠΈΠΈ | ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ |
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠ°Π²Π° | root, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ |
ΠΠ΅ΡΡΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ | 2.20/2.21 |
Π‘ΡΠ°ΡΡΡ | ΠΠΠ’Π |
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ | Π»Π΅Π³ΠΊΠΎ |
ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ | ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ Π² Seq - https://docs.datalust.co/docs/query-syntax ΠΡΠ°ΡΠΊΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ: https://youtu.be/SqDYdSUCHEw |
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ |
ΠΡΠΈ ΡΡΡΠ°ΡΠ΅Π²Π°Π½ΠΈΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² Π½ΡΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΠΆΠΈΠ΅ Π·Π½Π°Π½ΠΈΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° support@visiology.su Ρ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΎ ΠΏΠΎΠΌΠΎΡΠΈ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΏΠΈΡΠ°ΡΡΡ Π½Π° Π΄Π°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ΅ΡΠΏΠ½ΡΡΡ ΠΈΠ· Π»ΠΎΠ³ΠΎΠ² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. Π’Π°ΠΊΠΆΠ΅ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅. Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π²ΡΡΡΠΎΠ΅Π½ ΡΡΠ΅ΠΊ Grafana (ΡΠΌ. ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΡΠ°ΡΡΡ ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°), Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠΎΡΡΠ°Π²Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ΠΈΠΌΠ΅Π΅ΡΡΡ Docker ΠΎΠ±ΡΠ°Π· Seq Π΄Π»Ρ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΡ (Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ ΡΠ±ΡΠ°ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π² Π½Π΅Π³ΠΎ Π»ΠΎΠ³ΠΎΠ² Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΎΡΠΊΠ»ΡΡΠΈΡΡ). ΠΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΊΠ°ΠΊ ΡΠΈΡΠ°ΡΡ Π»ΠΎΠ³ΠΈ, Π½Π° ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² Π»ΠΎΠ³Π°Ρ ΠΈ ΠΏΡ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
1. Π‘ΠΎΠ±ΡΡΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ
ΠΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Ρ Π±ΡΡΡ Π½Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Ρ. Π Π½ΠΈΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π²Ρ
ΠΎΠ΄Π° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ², ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅\ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅\ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ (ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΡΠΎΠ»ΠΈ, Π΄Π°ΡΠ±ΠΎΡΠ΄Ρ ΠΈ Ρ.ΠΏ.), ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΈ Π±ΡΠ»Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° ΡΡΠ° ΡΡΠ°ΡΡΡ.
ΠΠ°ΡΠ½ΡΠΌ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π²Π° ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ: Standard (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) ΠΈ Full. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅, ΠΏΠΈΡΡΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Full. ΠΠ°ΠΊ ΡΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΡΡΡ - ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ . Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΏΠΈΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅.
ΠΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
2. Π‘ΠΈΡΡΠ΅ΠΌΠ° Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Seq. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
ΠΠ°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ - Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ: Seq.
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ Π² ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ. ΠΠΈΠΆΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΡΠ΅ΡΠ°ΡΡ Π½Π°ΡΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎΡΠΈΡΠ°ΡΡ Π²ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ Seq ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ - https://docs.datalust.co/docs/query-syntax. Π’Π°ΠΌ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡ Π΄ΠΎ ΠΌΠ΅Π»ΠΎΡΠ΅ΠΉ.
Π Seq Π΅ΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ²:
- ΠΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ – Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ;
- SQL-like Π·Π°ΠΏΡΠΎΡΡ – Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΈΠ½Π³Π°.
ΠΠ½Π°ΡΠ°Π»Π΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ, ΠΊΠ°ΠΊ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, Π° Π΄Π°Π»Π΅Π΅ Π²ΠΊΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ±Π΅ΠΆΠΈΠΌΡΡ ΠΏΠΎ SQL Π·Π°ΠΏΡΠΎΡΠ°ΠΌ.
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ
Π Seq Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ Π΅ΡΡΡ ΠΈΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ±ΡΡΠΈΠ΅ Π²Ρ ΠΎΠ΄Π° Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ "Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ".
Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠ°ΠΊΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ, Π² ΡΡΡΠΎΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ° ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΡΡΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅:
"Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ"
ΠΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π»ΠΈΡΡ ΡΠ°ΡΡΡ ΠΈΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
"Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄"
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π²ΡΡΠ΅ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Ρ ΡΠΎΠ±ΡΡΠΈΡ "Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ
ΠΎΠ΄ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ" Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ: ActionID, ActionName, Component ΠΈ Ρ.Π΄.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π²Ρ
ΠΎΠ΄Π° Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ admin, Π·Π°ΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
"Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄" and Username = "admin"
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊ ΡΠΈΠ»ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Username, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π²Π΅Π½ admin.
ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
Π Π·Π°ΠΏΡΠΎΡΠ°Ρ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ and, or ΠΈ not. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ Π² Π·Π°ΠΏΡΠΎΡΠ΅ Π²ΡΡΠ΅. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ»Π΅Π³ΠΊΠ° ΡΡΠ»ΠΎΠΆΠ½ΠΈΠΌ Π·Π°ΠΏΡΠΎΡ:
"Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄" and (Username = "admin" or Username = "testAdmin")
ΠΡ ΠΎΡΡΠΈΠ»ΡΡΡΡΠ΅ΠΌ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π²Ρ ΠΎΠ΄Π° Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ admin ΠΈ testAdmin.
ΠΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠ±ΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΡΡΠΏΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
Request = {user: {GivenName: "", FamilyName: "testUser", MiddleName: "", Email: "", UserName: "testUser", IsInfrastructure: false, Roles: ["ΠΡΠ΅ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ"], IsBlocked: false, Password: "*"}, changePass: true}
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π½Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ Request ΠΊΠΎΡΠΎΡΡΡ changePass ΡΠ°Π²Π΅Π½ true. ΠΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π°ΠΌ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠ»Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΡΠΌΠ΅Π½Π° ΠΏΠ°ΡΠΎΠ»Ρ. ΠΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ:
Request.changePass = true
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΡ ΠΎΠΆ Π½Π° JS. ΠΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΊ ΠΊΠ»ΡΡΡ changePass, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Request. ΠΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π½Π°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ ΠΈ ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ.
ΠΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Ρ Π½Π°Ρ ΠΌΠ°ΡΡΠΈΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
Products = ["pen", "pineapple", "apple"]
Π’ΠΎ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π° Π΅ΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π·Π½Π°ΠΊ ?:
Products[0] = "pen" Products[?] = "apple"
Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠ»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ /Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅/. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
/Π£.*Π΄/
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΉΠ΄ΡΠΌ ΡΠΎΠ±ΡΡΠΈΡ "Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄", Ρ.ΠΊ. . - ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ», Π° * - ΡΡΠΎ ΠΊΠ²Π°Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ, ΡΡΠΎ Π»ΡΠ±ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ 0 ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅.
SQL-like Π·Π°ΠΏΡΠΎΡΡ
Π’Π°ΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ·Π½Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Ρ ΠΎΠ΄ΠΎΠ² Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ Π΄Π°ΡΠ±ΠΎΡΠ΄Π°. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΠΏΡΠΎΡΡΠ΅Π½ΡΠΊΠΈΠΉ Π·Π°ΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Ρ ΠΎΠ΄ΠΎΠ² Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ admin:
select count(*) from stream where @Message like 'Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄%' and Username = 'admin'
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
ΠΠ· Π·Π°ΠΏΡΠΎΡΠ° Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ±ΡΡΠΈΡ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°, Π³Π΄Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΊΠ°ΠΊ "Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄ ..." ΠΈ Username ΡΠ°Π²Π΅Π½ admin.
ΠΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ Π·Π°ΠΊΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°Π½ΠΈΠΉ ΠΈΠ· Π»ΠΎΠ³ΠΎΠ². Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ Seq ΠΈ ΡΠΏΠ°ΡΠ³Π°Π»ΠΊΠ° ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ Π΅ΡΡΡ Π² ΡΠ°ΠΏΠΊΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°.
2. Π‘ΠΈΡΡΠ΅ΠΌΠ° Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Grafana. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
ΠΠ°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ°ΠΉΡΠΈ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π² Π²Π΅Π± Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π²ΠΊΠ»Π°Π΄ΠΊΠ° ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ - ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ - Π‘ΠΎΠ±ΡΡΠΈΡ.
Π£ ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ. Π ΡΡΡΠΎΠΊΠ΅ Π²Π²ΠΎΠ΄Π° Π·Π°ΠΏΡΠΎΡΠ° Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ Π² ΡΠΈΠ³ΡΡΠ½ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΡΠΎΠ±ΡΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ ΡΡΠΎΠΈΡ Π·Π°Π±ΡΠ²Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΡΠ°ΡΠ°Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (1Ρ), Π·Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ; ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄.
Π ΠΊΠΎΠ½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΠ»ΠΊΠ° "Show context", Π½Π°ΠΆΠ°Π² Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΡΡ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π² Grafana.
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅
ΠΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π² Grafana ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ. Π§ΡΠΎΠ±Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ: |="ΡΡΡΠΎΠΊΠ°".
Π Π°Π·Π±Π΅ΡΡΠΌ ΡΠ»ΡΡΠ°ΠΉ Ρ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ Π²Ρ
ΠΎΠ΄Π° Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π² ΡΠΎΠ±ΡΡΠΈΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΠΎΠΊΠ° "Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ
ΠΎΠ΄ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ", ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
{stream="stdout"} |="Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄"
ΠΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π²ΠΎΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ:
ΠΠΎΠΉΠ΄ΡΠΌ Π΄Π°Π»ΡΡΠ΅ ΠΈ Π½Π°ΠΉΠ΄ΡΠΌ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π²Ρ ΠΎΠ΄Π° Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ admin:
{stream="stdout"} |="Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄" |="admin"
ΠΡ ΡΠΈΠ»ΡΡΡΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ "Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄" ΠΈ Π΄Π°Π»Π΅Π΅ ΡΠΆΠ΅ ΠΈΡ ΡΠΈΠ»ΡΡΡΡΠ΅ΠΌ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ "admin". Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ Π½Π°Ρ Π½Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Username ΠΊΠ°ΠΊ Π² Seq, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ ΠΌΡ Π±Π΅ΡΡΠΌ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ.
ΠΡΠ»ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ· ΠΏΠΎΠΈΡΠΊΠ°, ΡΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ: !="ΡΡΡΠΎΠΊΠ°" - ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΠ.
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
Π§ΡΠΎΠ±Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Grafana, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ: |~`Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅`. ΠΡΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π²ΠΎΠΉΠ½ΡΡ ΠΊΠ°Π²ΡΡΠ΅ΠΊ: |~"Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅" - ΡΠΎ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ \, Ρ.Π΅. ΠΏΠΈΡΠ°ΡΡ Π½Π΅ \w+, Π° \\w+. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ "", ΡΠΎ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π·Π°ΠΏΠΈΡΡΡ , Π½ΠΎ ΡΠΎΠ²Π½ΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠΊΠ° ΠΌΡ Π½Π΅ Π½Π°ΡΠ½ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΠΈΠ΄Π°: \w, \d, \s ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, Π»ΠΈΠ±ΠΎ ΠΏΠΈΡΠ°ΡΡ Π·Π°ΠΏΡΠΎΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΠΊΠ°Π²ΡΡΠΊΠ°Ρ ``. Π Grafana ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ RE2, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ Π½ΡΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΡΡ - https://github.com/google/re2/wiki/Syntax.
ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π°ΠΉΠ΄ΡΠΌ ΡΠΎΠ±ΡΡΠΈΡ ΡΠΌΠ΅Π½Ρ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ:
{stream="stdout"} |~"Completed operation PUT: /user|changePass: true"
Π Π΄Π°Π½Π½ΠΎΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΠΠ - |. Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΌΡ Π½Π°ΠΉΠ΄ΡΠΌ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ "Completed operation PUT: /user" ΠΈΠ»ΠΈ "changePass: true". ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΠ±ΡΡΠΈΡ Π² Grafana ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ. Π’.Π΅. ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΎ ΡΠΌΠ΅Π½Π΅ ΠΏΠ°ΡΠΎΠ»Ρ Π±ΡΠ΄Π΅Ρ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π·Π°ΠΏΠΈΡΡΡ
ΠΈ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
4. ΠΡΠΈΠΌΠ΅ΡΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΊΠ΅ΠΉΡΠ°Ρ
ΠΠ°ΡΠ½Ρ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΡΡΠΎΠΊΠ°ΠΌ:
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ - Completed operation POST
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ - Completed operation PUT
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ - Completed operation DELETE
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ : /user.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π½ΠΈΠΆΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Full Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ: Identity server, Dashboard service, Dashboard viewer.
Π‘ΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ Seq
ΠΡ ΠΎΠ΄ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ
"Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ
ΠΎΠ΄"
ΠΠ°ΠΏΡΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Username = "ΠΈΠΌΡΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ", Π΄Π°Π±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π·Π°Ρ
ΠΎΠ΄ΠΈΠ» ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
/Completed operation POST: \/\buser\b/
ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ·Π½Π°ΡΡ, ΠΊΡΠΎ ΡΠΎΠ·Π΄Π°Π» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ testAdmin, ΠΏΠΈΡΠ΅ΠΌ ΡΠ°ΠΊ:
/Completed operation POST: \/\buser\b/ and Request.UserName = "testAdmin"
ΠΠ°Π»Π΅Π΅ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
ΡΠΎΠ±ΡΡΠΈΡ ΡΠΌΠΎΡΡΠΈΠΌ UserFullName.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
RequestPath = "/api/user" && Request.changePass = true && Request.user.UserName = "testUser"
Π’Π°ΠΊ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ, ΠΊΡΠΎ ΡΠΌΠ΅Π½ΠΈΠ» ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ testUser.
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
/Completed operation DELETE: \/\buser\b/ && Request.UserName = "testUser2"
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΠΈ
"Completed operation POST: /role"
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ»ΠΈ
"Completed operation DELETE: /role"
Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° Π½Π° ΠΏΠ°ΠΏΠΊΠΈ
"Completed operation PUT: /highLevelFolders"
Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° Π½Π° Π΄Π°ΡΠ±ΠΎΡΠ΄Ρ
"Completed operation PUT: /dashboard"
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ "ΠΠ±ΡΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ"
"Completed operation PUT: /generalSettings"
ΠΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠ² Π΄Π°ΡΠ±ΠΎΡΠ΄Π°
select count(*) from stream where @Message like 'Done Handling GetDashboardAggregateRoot%' and Response.Result.Name = 'TEST'
ΠΠΌΡ Π΄Π°ΡΠ±ΠΎΡΠ΄Π° Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ "TEST". ΠΡΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠΈΡΠ°ΡΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΡ, ΠΊΠ°ΠΊ Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΡΠ°ΠΊ ΠΈ Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠ°. Π’Π°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π·Π° ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΡΠ΅Π²ΡΡ Π΄Π°ΡΠ±ΠΎΡΠ΄Π°, ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ: UserFullName not like '%Preview Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ'.
Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ²
select distinct(Response.Result.Name) from stream where @Message like 'Done Handling GetDashboardAggregateRoot%'
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ², Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠΈΡ distinct Π·Π°ΠΊΠ»ΡΡΠΈΡΡ Π² count().
Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ² Ρ Python Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ
select distinct(Response.Result.Name) from stream where @Message like 'Done Handling GetDashboardAggregateRoot%' and Response.Result.Sheets[?].Widgets[?].DataSettings.DatasourceType = 'Python'
Π‘ΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ Grafana (Loki)
ΠΡ ΠΎΠ΄ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ
{stream="stdout"} |~"Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ Π²Ρ
ΠΎΠ΄"
Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Seq, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ - |~"Username: ..ΠΈΠΌΡΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ".
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
{stream="stdout"} !="Completed operation POST: /users" |~"Completed operation POST|UserFullName" |~"/user|ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ"
ΠΠΎΡΠ»Π΅ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ "Show context" Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΡ Π²ΡΡΠ΅ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ΅.
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
"Completed operation DELETE: /user"
ΠΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ.
5. ΠΠΈΠ΄Π΅ΠΎ - Π‘ΠΈΡΡΠ΅ΠΌΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Visiology