Skip to main content

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:

img

Π­Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, которая с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ разрастаСтся ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ - это Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (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

img

Имя 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