Chapter 10. Practical Alerting from Time-Series Data
"May the queries flow, and the pager stay silent."
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΌΠΎΠ³ΡΡ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΈΠ·ΠΌΠ΅ΡΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ ΠΌΠ΅ΡΡΠΈΠΊΠΈ.
Borgmon ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ°Ρ Π½Π° Prometheus ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°, ΡΠΎΠ΄ΠΈΠ»Π°ΡΡ ΡΡΠ°Π·Ρ Π·Π° Borg-ΠΎΠΌ
Instrumentation of Applicationsβ
Π google Π² ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»Π΅Π³ΠΊΠΎ Π²ΡΡΡΠΎΠΈΡΡ http handler /varz
% curl http://webserver:80/varz
http_requests 37
errors_total 12
http_responses map:code 200:25 404:0 500:12
ΠΠ»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» http, Ρ.ΠΊ. smtp Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ, Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΡΠΎΡΡΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½
Storage in the Time-Series Arenaβ
ΠΠ°Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² in-memory database, ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π΄Π°ΠΌΠΏΠ°ΡΡΡΡ Π½Π° Π΄ΠΈΡΠΊΠΈ (aka redis).
Π’Π°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ time-series Arena:
ΠΡΠΎ ΠΌΠ°ΡΡΠΈΡΠ° ΠΌΠ΅ΡΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ°Π·ΡΠ°ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ, ΡΠΎΡΠΊΠΈ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ - ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ (timestamp, value)
ΠΠ°ΠΆΠ΄Π°Ρ ΡΠ°ΠΊΠ°Ρ time-series, ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ label-s, Π² ΡΠΎΡΠΌΠ°ΡΠ΅ name=value
Π’ΠΎΡΠΊΠΈ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ΅ Π²ΡΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² TSDB Π² ΡΠΎΡΠΌΠ°ΡΠ΅ (timestamp, value)
Labels and Vectorsβ
Π‘Π»ΠΎΠΆΠ½Π°Ρ ΡΠ΅ΠΌΠ°, ΡΠΎΠΌΠ½Π΅Π²Π°ΡΡΡ, ΡΡΠΎ Ρ ΡΡΠΌΠ΅Π» Π΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°ΡΠΊΡΡΡΡ
ΠΠ΅ΠΊΡΠΎΡ: time-series are stored as sequences of numbers and timestamps, which are referred to as vectors. Like vectors in linear algebra, these vectors are slices and cross-sections of the multidimensional matrix of data points in the arena
ΠΠΌΡ time-series-ΠΈΠΈ ΡΡΠΎ labelset, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ label-ΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ°ΡΡ key=value. ΠΠ΄Π½Π° ΠΈΠ· ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ»ΡΡ name, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈ "ΠΎΠ±Π·ΡΠ²Π°Π΅Ρ" time-series-ΠΈΡ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½Ρ, ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π΄ΠΎΡΡΠ°ΡΡ ΡΠ°ΠΉΠΌΡΠ΅ΡΠΈΡ ΠΈΠ· TSDB, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
# Π² ΡΠ»ΡΡΠ°Π΅ Ρ BorgMon - ΠΈΠΌΡ ΡΠ°ΠΉΠΌΡΠ΅ΡΠΈΠΈ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ var
{var=http_requests,job=webserver,service=web,zone=us-west}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° - Π²Π΅ΠΊΡΠΎΡ.
ΠΡΠ»ΠΈ Π² ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π΅ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΠΊΡΠΎΡΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΏΠΎΠ±ΠΎΠ»ΡΡΠ΅:
{var=http_requests,job=webserver,instance=host0:80,service=web,zone=us-west} 10
{var=http_requests,job=webserver,instance=host1:80,service=web,zone=us-west} 9
{var=http_requests,job=webserver,instance=host2:80,service=web,zone=us-west} 11
{var=http_requests,job=webserver,instance=host3:80,service=web,zone=us-west} 0
{var=http_requests,job=webserver,instance=host4:80,service=web,zone=us-west} 10
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ΅Π· ΠΈΠ· time-series arena, Π·Π°ΠΏΡΠΎΡΠΈΠ² Π²Π΅ΠΊΡΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ:
# Π·Π°ΠΏΡΠΎΡ
{var=http_requests,job=webserver,service=web,zone=us-west}[10m]
# ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
{var=http_requests,job=webserver,instance=host0:80, ...} 0 1 2 3 4 5 6 7 8 9 10
{var=http_requests,job=webserver,instance=host1:80, ...} 0 1 2 3 4 4 5 6 7 8 9
{var=http_requests,job=webserver,instance=host2:80, ...} 0 1 2 3 5 6 7 8 9 9 11
{var=http_requests,job=webserver,instance=host3:80, ...} 0 0 0 0 0 0 0 0 0 0 0
{var=http_requests,job=webserver,instance=host4:80, ...} 0 1 2 3 4 5 6 7 8 9 10
The name of a time-series is a labelset, because itβs implemented as a set of labels expressed as key=value pairs. One of these labels is the variable name itself, the key that appears on the varz page.
WIPβ
...
Key Insightsβ
Symlinks
- WIP
note
Empty