Blog JSystems - uwalniamy wiedzę!

Szukaj
Pulpit Grafany z metrykami poziomu usługi: tempo żądań, odsetek błędów, opóźnienie i cel SLO, na który patrzy inżynier SRE
Tak wygląda codzienny widok inżyniera SRE: żywy pulpit (tutaj Grafana) pokazujący, czy usługa działa tak, jak obiecaliśmy użytkownikom. SRE nie pyta „czy serwer żyje", tylko „czy klient dostaje szybką i poprawną odpowiedź". W tym przewodniku pokażemy, skąd taki widok się bierze i jak zamienia się w liczbowy cel niezawodności.

SRE, czyli Site Reliability Engineering (inżynieria niezawodności usług), to jedno z tych pojęć, które brzmią jak nowy tytuł dla starego administratora, a w rzeczywistości oznaczają zupełnie inny sposób myślenia o utrzymaniu oprogramowania. W tym przewodniku wyjaśnimy po kolei, czym SRE naprawdę jest, na czym polega jego słynna matematyka niezawodności (wskaźniki SLI, cele SLO i budżet błędów) i jakich narzędzi używa na co dzień. Wszystkie zrzuty pochodzą z prawdziwego, działającego monitoringu, a nie z prezentacji.

Z tego artykułu dowiesz się:
  • Czym SRE jest, a czym nie jest, i jak ma się do DevOps (słynne „SRE realizuje DevOps")
  • Na czym polega matematyka niezawodności: wskaźniki SLI, cele SLO, umowy SLA i budżet błędów
  • Jak budżet błędów kończy odwieczny spór między programistami a utrzymaniem
  • Czym jest toil (praca jałowa) i dlaczego SRE traktuje go jak wroga numer jeden
  • Jakich narzędzi używa SRE, na prawdziwych zrzutach z Prometheusa, Grafany i Alertmanagera
  • Jak wygląda dyżur (on-call), cykl życia incydentu i postmortem bez obwiniania

Czym właściwie jest SRE (a czym nie jest)

SRE to podejście do utrzymania oprogramowania, w którym niezawodność traktuje się jak problem inżynierski, a nie jak dyżur przy gaszeniu pożarów. Zamiast reagować na awarie ręcznie, inżynier SRE mierzy niezawodność liczbami, ustala dla niej konkretne cele i pisze oprogramowanie, które te cele pomaga utrzymać. Podejście narodziło się w Google około 2003 roku, gdy zespół pod kierunkiem Bena Traynora dostał zadanie utrzymania rosnących lawinowo usług i zamiast zatrudniać armię administratorów, potraktował utrzymanie tak, jak potraktowałby je programista: przez automatyzację, pomiar i jasno zdefiniowane cele.

Warto od razu rozprawić się z trzema nieporozumieniami. SRE nie jest nowym słowem na administratora: klasyczny administrator pilnuje serwerów, a inżynier SRE pilnuje obietnicy złożonej użytkownikowi (że usługa będzie działać z określoną niezawodnością) i większość czasu spędza na pisaniu automatyzacji, a nie na klikaniu w panelach. SRE nie jest wyłącznie zestawem narzędzi: Prometheus i Grafana są tu środkiem, a nie celem. I wreszcie SRE nie jest luksusem tylko dla gigantów: nawet mały zespół zyskuje, gdy zamiast kłócić się „czy wdrażać", zaczyna rozmawiać liczbami o tym, na ile awarii może sobie pozwolić.

Najkrótsza definicja krąży po branży jako zdanie zaczerpnięte z języka programowania: „class SRE implements interface DevOps", czyli SRE jest konkretną realizacją idei DevOps. DevOps mówi, co osiągnąć (zburzyć mur między tworzeniem a utrzymaniem, automatyzować, mierzyć), a SRE dokłada do tego twarde reguły: jak dokładnie mierzyć niezawodność, ile awarii jest dopuszczalnych i co się dzieje, gdy ten limit zostanie przekroczony. Poniżej trzy pokrewne podejścia, które łatwo pomylić.

DevOps
Kultura i praktyki łączące tworzenie i utrzymanie oprogramowania. Mówi „burzcie mur i automatyzujcie", ale nie narzuca, jak mierzyć niezawodność.
SRE
Konkretna realizacja DevOps od strony utrzymania. Dokłada liczby: wskaźniki SLI, cele SLO i budżet błędów, oraz zasadę, że dyżurny ma czas na inżynierię, nie tylko na gaszenie pożarów.
Platform Engineering
Budowanie wewnętrznej platformy i gotowych ścieżek, z których programiści korzystają sami. Odpowiada na pytanie „jak dać zespołom niezawodność w standardzie".
Klasyczny administrator
Utrzymuje serwery i reaguje na awarie, najczęściej ręcznie. SRE bierze z tej roli wiedzę o systemach, ale zamienia ręczną pracę na automatyzację i pomiar.
SRE nie jest osobną galaktyką, tylko sposobem realizacji DevOps od strony niezawodności. Z klasycznego utrzymania bierze znajomość systemów, a od programisty podejście przez automatyzację, pomiar i jasne cele.

To rozróżnienie ma praktyczny skutek. W dojrzałym zespole SRE obowiązuje zasada, że inżynier dyżurny nie może spędzać więcej niż połowy czasu na pracy ręcznej i gaszeniu pożarów. Druga połowa jest zarezerwowana na inżynierię: pisanie automatyzacji, poprawianie systemów i usuwanie źródeł awarii. Gdy praca ręczna zaczyna zjadać ten limit, jest to sygnał alarmowy, a nie powód do zatrudnienia kolejnej osoby do klikania. Do tej pracy ręcznej, nazywanej toil, wrócimy w osobnej sekcji.

SLI, SLO, SLA i budżet błędów: matematyka niezawodności

Serce SRE to zamiana mglistego „usługa ma działać dobrze" na liczby, którymi da się zarządzać. Służą do tego trzy skróty, które łatwo pomylić, choć znaczą coś zupełnie innego. Ułóżmy je w kolejności, w jakiej powstają: najpierw mierzymy, potem stawiamy cel, a na końcu z celu wynika budżet na awarie.

Krok 1, pomiar
SLI, wskaźnik
Liczba mierzona wprost z ruchu: jaki procent zapytań kończy się sukcesem, ile trwa odpowiedź. To surowy fakt o usłudze, na przykład 99,95% udanych zapytań w ostatniej godzinie.
Krok 2, cel
SLO, cel
Obietnica, jaką wartość wskaźnika chcemy utrzymać: „co najmniej 99,9% udanych zapytań w miesiącu". To wewnętrzny cel zespołu, ustawiony trochę ostrzej niż to, co obiecujemy klientowi.
Krok 3, konsekwencja
Budżet błędów
To, co zostaje pod celem: przy SLO 99,9% wolno nam mieć 0,1% nieudanych zapytań, czyli około 43 minut niedostępności miesięcznie. To realny budżet na ryzyko.
Trzy pojęcia w kolejności powstawania. SLI to pomiar, SLO to cel postawiony na tym pomiarze, a budżet błędów to prosta różnica: wszystko, czego brakuje celowi do stu procent, jest naszym dozwolonym marginesem na awarie.

Rozłóżmy to na części. SLI (ang. Service Level Indicator, wskaźnik poziomu usługi) to konkretna liczba mierzona wprost z zachowania systemu. Najczęściej są to dostępność (jaki procent zapytań zakończył się poprawnie) oraz opóźnienie (ang. latency, czyli jak szybko przychodzi odpowiedź). Dobry wskaźnik SLI patrzy oczami użytkownika, a nie serwera: nie interesuje nas, że procesor ma 30% obciążenia, tylko czy klient dostał odpowiedź i czy dostał ją szybko.

SLO (ang. Service Level Objective, cel poziomu usługi) to obietnica postawiona na wskaźniku: „utrzymamy co najmniej 99,9% udanych zapytań w miesiącu". SLA (ang. Service Level Agreement, umowa o poziomie usługi) to z kolei zapis w umowie z klientem, z karami finansowymi za jego złamanie. Kluczowa reguła SRE brzmi: SLO ustawiamy zawsze ostrzej niż SLA. Jeśli klientowi obiecujemy w umowie 99,5%, wewnętrznie celujemy na przykład w 99,9%, żeby mieć zapas, zanim zaczną się kary. Wskaźnik SLI mierzy się najczęściej w PromQL, języku zapytań Prometheusa. Poniżej realny wskaźnik dostępności: udział udanych zapytań (bez kodów błędu serwera 5xx) w całym ruchu.

# SLI dostępności: udział udanych zapytań (bez błędów 5xx) w całym ruchu
sum(rate(http_requests_total{job="sklep-api",code!~"5.."}[30d]))
  /
sum(rate(http_requests_total{job="sklep-api"}[30d]))
# Wynik 0,999 oznacza 99,9% udanych zapytań w ostatnich 30 dniach

Tak zapisany wskaźnik SLI jest zwykłym zapytaniem PromQL, które w każdej chwili możesz uruchomić na żywych danych. Oto realne zapytanie tego typu wykonane na działającym Prometheusie: funkcja rate liczy tempo przyrostu licznika zapytań, a wynik to gotowa liczba, z której robi się wskaźnik niezawodności.

Zapytanie PromQL z funkcją rate liczące tempo zapytań w interfejsie Prometheusa, podstawa wskaźnika SLI
Prawdziwe zapytanie PromQL na działającym Prometheusie. Funkcja rate liczy, ile zapytań na sekundę obsługuje usługa. Zestawiając ruch udany z całym ruchem, dostajemy wskaźnik SLI dostępności, czyli surowy fakt o niezawodności, na którym postawimy cel SLO.

Skoro budżet błędów to „wszystko, czego brakuje celowi do stu procent", warto zobaczyć, jak mało to bywa. Poniższa tabela pokazuje, ile niedostępności miesięcznie mieści się w kolejnych poziomach, popularnie nazywanych „dziewiątkami" (bo 99,9% to trzy dziewiątki, a 99,99% cztery). Widać w niej, dlaczego każda kolejna dziewiątka jest dramatycznie droższa od poprzedniej.

Cel SLO (dostępność)Budżet błędów miesięcznieIle to realnie
99% (dwie dziewiątki)7 godzin 18 minut
99,9% (trzy dziewiątki)43 minuty 12 sekund
99,95%21 minut 36 sekund
99,99% (cztery dziewiątki)4 minuty 19 sekund
99,999% (pięć dziewiątek)26 sekund
Budżet błędów przy różnych celach SLO, przeliczony na dopuszczalną niedostępność w miesiącu (30 dni). Skok z 99,9% na 99,99% skraca dozwolony przestój z 43 minut do niecałych 5, a każda kolejna dziewiątka wymaga zwykle znacznie większych nakładów. Dlatego cel dobiera się do potrzeb usługi, a nie ustawia „najwyżej, jak się da".

Ta tabela to najważniejsza intuicja w całym SRE. Wysoka niezawodność kosztuje, i to nieliniowo. Bank rozliczeń międzynarodowych będzie celował w cztery lub pięć dziewiątek, ale wewnętrzny panel raportowy z nadmiarowym celem 99,99% to zwykle wyrzucanie pieniędzy. Dobór celu SLO jest więc decyzją biznesową: ile niezawodności naprawdę potrzebuje ta konkretna usługa i ile jesteśmy gotowi za nią zapłacić.

Chcesz zbudować monitoring, z którego liczy się realne wskaźniki SLI i cele SLO? Szkolenie Monitoring i Observability: Grafana, Prometheus, Loki, Zabbix ma terminy gwarantowane.

Budżet błędów w praktyce: koniec wojny dev kontra ops

Budżet błędów to nie tylko liczba na wykresie. To narzędzie zarządcze, które rozwiązuje najstarszy konflikt w IT. Programiści chcą wdrażać zmiany często, bo z tego są rozliczani. Utrzymanie chce wdrażać rzadko, bo każda zmiana to ryzyko awarii. Przez lata ten spór rozstrzygało się siłą przekonywania albo hierarchią. SRE rozstrzyga go liczbą.

Mechanizm jest prosty. Jeśli usługa mieści się w budżecie błędów (awarii było mniej, niż wolno), zespół produktowy dostaje zielone światło: wdrażaj śmiało, eksperymentuj, ryzykuj. Jeśli budżet się wyczerpał (awarii było za dużo), wchodzi w życie tak zwana polityka budżetu błędów (ang. error budget policy): nowe funkcje czekają, a cały zespół, łącznie z programistami, przełącza się na poprawę niezawodności, aż budżet znów urośnie. Nikt nikogo nie przekonuje. Decyzję podejmuje wskaźnik.

Budżet dostępny

Awarii było mniej, niż pozwala SLO. Margines na ryzyko nietknięty.

  • Wdrażaj często, nawet kilka razy dziennie
  • Testuj nowe funkcje na produkcji, ostrożnie
  • Ryzykowne zmiany są dozwolone

Budżet wyczerpany

Awarii było za dużo, cel SLO zagrożony. Włącza się polityka budżetu błędów.

  • Zamrożenie nowych funkcji
  • Cały zespół pracuje nad niezawodnością
  • Wdrożenia tylko naprawiające i pilne
Polityka budżetu błędów zamienia spór o tempo wdrożeń w automatyczną regułę. Dopóki jest budżet, zespół produktowy pędzi. Gdy budżet się kończy, priorytetem staje się niezawodność. To ta sama zasada, którą DevOps opisuje jako wspólną odpowiedzialność za produkcję, tylko wyrażona liczbą.

Piękno tego rozwiązania polega na tym, że wyrównuje ono interesy. Programistom zaczyna zależeć na niezawodności, bo to ona daje im swobodę szybkiego wdrażania. Utrzymanie przestaje blokować zmiany „na wszelki wypadek", bo ma obiektywny licznik, który sam powie, kiedy zwolnić. To dokładnie ta sama wspólna odpowiedzialność, o której mówi kultura DevOps, tyle że SRE nadaje jej twardą, mierzalną formę.

Toil: praca jałowa, wróg numer jeden

Skoro inżynier SRE ma poświęcać połowę czasu na inżynierię, to co go od niej odciąga? Odpowiedź brzmi: toil. To angielskie słowo (znojna, jałowa harówka) w SRE ma bardzo precyzyjne znaczenie. Toil to praca, która jest ręczna, powtarzalna, możliwa do zautomatyzowania, pozbawiona trwałej wartości i rosnąca liniowo wraz z wielkością usługi. Ręczny restart usługi po awarii, kopiowanie tych samych poleceń, klikanie w panelu, żeby dodać dziesiąty identyczny serwer, to wszystko toil.

Uwaga na rozróżnienie: toil to nie to samo co „praca, której nie lubię". Analiza incydentu, projektowanie nowego systemu czy pisanie automatyzacji bywają żmudne, ale zostawiają trwałą wartość, więc toilem nie są. Toil to ta praca, po której następnego dnia zaczynasz od zera.

Toil, praca jałowa

Ręczny restart usługi po każdej awarii
Ręczne dokładanie kolejnych identycznych serwerów
Przeklejanie tych samych poleceń z notatek
Rośnie wraz z usługą, nie zostawia nic trwałego. SRE dąży, by nie przekraczał połowy czasu.

Praca inżynierska

Automatyzacja restartu i samonaprawy
Infrastruktura jako kod: serwery z pliku, nie z klikania
Usuwanie źródła awarii, żeby nie wracała
Zostawia trwały efekt: raz napisana automatyzacja pracuje w kółko.
SRE mierzy toil i świadomie go tnie. Każdą powtarzalną, ręczną czynność traktuje jak kandydata do automatyzacji. Dzięki temu zespół obsługuje coraz większy system bez proporcjonalnego rozrostu, a inżynierowie robią rzeczy, które faktycznie zmniejszają liczbę przyszłych pożarów.

Walka z toil to główny powód, dla którego SRE tak mocno opiera się na automatyzacji z rodziny DevOps. Zamiast ręcznie konfigurować dziesiąty serwer, opisuje się go raz w infrastrukturze jako kodzie (Terraform i Ansible), a zamiast ręcznie restartować aplikację, powierza się to systemowi, który sam pilnuje zadanego stanu. Do tego drugiego wrócimy przy Kubernetesie, bo jego samonaprawa to podręcznikowy przykład zamiany toil na automatyzację.

Automatyzacja, która wycina pracę jałową, to Terraform i Ansible w praktyce. Szkolenie Automatyzacja zadań z Ansible ma terminy gwarantowane.

Narzędzia SRE: czym mierzy się i pilnuje niezawodność

SRE nie ma własnego, osobnego zestawu narzędzi. Korzysta z tego samego stosu monitoringu i automatyzacji co DevOps, tylko ustawia go pod konkretny cel: pilnowanie obietnicy złożonej użytkownikowi. Poniższa mapa porządkuje te narzędzia według zadania, a potem przejdziemy przez najważniejsze z nich na prawdziwych zrzutach.

📊
Metryki (SLI)
Prometheus, VictoriaMetrics
📈
Pulpity i SLO
Grafana, Sloth, Pyrra
🔔
Alerty i dyżur
Alertmanager, PagerDuty, Opsgenie
📜
Logi
Loki, stos ELK
🕳️
Ślady zapytań
Jaeger, Tempo, OpenTelemetry
Samonaprawa
Kubernetes, Helm
🏗️
Automatyzacja (mniej toil)
Terraform, Ansible
💥
Inżynieria chaosu
Chaos Mesh, LitmusChaos
📝
Incydenty i postmortem
rejestry incydentów, runbooki
Mapa narzędzi SRE według zadania. Rdzeń to obserwowalność (metryki, logi, ślady) plus alarmowanie i automatyzacja. To w większości ten sam stos, którego używa DevOps, ustawiony pod pytanie „czy dotrzymujemy obietnicy niezawodności".

Prometheus: pomiar wskaźników SLI

Do czego służy: co kilkanaście sekund odpytuje aplikacje i serwery o ich metryki i przechowuje je jako szereg czasowy. To z tych liczb SRE buduje wskaźniki SLI, a więc fundament całej reszty.

Prometheus to baza danych szeregów czasowych, czyli liczb zmieniających się w czasie. Zanim cokolwiek zmierzymy, sprawdzamy, czy Prometheus w ogóle ma z czego zbierać dane, na liście celów (ang. targets). Każdy cel to źródło metryk: aplikacja, serwer albo eksporter (mały program udostępniający metryki systemu).

Prometheus, lista celów (targets), z których zbierane są metryki będące podstawą wskaźników SLI
Prometheus, lista celów. Każdy wiersz to źródło metryk, a status w kolumnie State mówi, czy Prometheus poprawnie się z nim łączy. Jeśli cel jest niedostępny, nie mamy z czego liczyć wskaźnika SLI, więc pierwszy sygnał kłopotów widać już tutaj.

Metryki odpytuje się językiem PromQL. Wskaźnik SLI dostępności pokazaliśmy już wyżej, ale drugim najważniejszym wskaźnikiem jest opóźnienie: jaki procent zapytań mieści się w akceptowalnym czasie odpowiedzi. Poniżej zapytanie, które liczy udział zapytań szybszych niż 300 milisekund, czyli klasyczny wskaźnik SLI opóźnienia.

# SLI opóźnienia: udział zapytań szybszych niż 300 ms (histogram opóźnień)
sum(rate(http_request_duration_seconds_bucket{job="sklep-api",le="0.3"}[5m]))
  /
sum(rate(http_request_duration_seconds_count{job="sklep-api"}[5m]))

Sam Prometheus rysuje też proste wykresy, dzięki którym od razu widać, kiedy wskaźnik zaczął spadać i czy sam wrócił do normy. To pierwszy rzut oka przy każdym podejrzeniu problemu.

Wykres metryki w czasie w interfejsie Prometheusa pokazujący skok i powrót do normy
Metryka narysowana w czasie w interfejsie Prometheusa. Na wykresie od razu widać chwilowy skok i to, czy wartość wróciła do normy. Z surowych liczb takiej dynamiki nie da się odczytać, a to właśnie ona decyduje, czy zjadamy budżet błędów.

Grafana: pulpity SLO i progi niezawodności

Do czego służy: zamienia surowe metryki w czytelne pulpity. Dla SRE kluczowe jest to, że na wykresie można narysować próg (linię celu SLO) i od razu widać, czy usługa jest nad nią, czy pod.

Grafana to narzędzie do wizualizacji danych, któremu poświęciliśmy osobny przewodnik po Grafanie dla początkujących. W kontekście SRE jej najważniejsza funkcja to progi (ang. thresholds): kolorowe strefy na wykresie, które wprost pokazują, kiedy wskaźnik wchodzi w obszar zagrożenia. Ustawiony na wysokości celu SLO próg zamienia zwykły wykres w tablicę wyników niezawodności.

Panel w Grafanie z progami (thresholds), kolorowe strefy oznaczające przekroczenie celu SLO
Panel w Grafanie z ustawionymi progami. Zielona strefa to zachowanie w granicach celu, czerwona to jego naruszenie. Gdy próg ustawi się na wysokości celu SLO, każdy, kto spojrzy na pulpit, od razu wie, czy usługa dotrzymuje obietnicy, bez czytania liczb.

Alertmanager i dyżur: alarmować o objawach, nie o przyczynach

Do czego służy: zamienia przekroczenie progu w realne powiadomienie, które budzi dyżurnego inżyniera. Kieruje alerty na właściwy kanał (e-mail, komunikator, telefon), grupuje je i wycisza szum.

Wykres, na który nikt nie patrzy o trzeciej w nocy, jest bezużyteczny. Dlatego reguły alertów w Prometheusie pilnują wskaźników automatycznie, a gdy warunek jest spełniony przez zadany czas, przekazują alert do Alertmanagera, który wysyła powiadomienie. Reguły definiuje się w pliku, a Prometheus pokazuje ich stan na osobnej stronie.

Reguły alertów i reguły nagrywające w Prometheusie, definicja warunków alarmowania o naruszeniu SLO
Reguły w Prometheusie. To tutaj definiuje się warunki, po których usługa sama zawoła o pomoc. Dla SRE najważniejsze są reguły pilnujące tempa wypalania budżetu błędów, bo to one budzą inżyniera, zanim klient zdąży zauważyć problem.

Kluczowa zasada SRE brzmi: alarmuj o objawach, nie o przyczynach. Zamiast budzić dyżurnego, gdy procesor skoczy do 90% (co samo w sobie może być nieszkodliwe), budzi się go dopiero, gdy cierpi na tym użytkownik, na przykład gdy rośnie odsetek błędów albo opóźnienie. Najlepszym wzorcem alertu jest tak zwane wielookienne tempo wypalania (ang. multi-window burn rate): alarm odzywa się, gdy budżet błędów znika za szybko, i to potwierdzone w dwóch oknach czasowych naraz, żeby uniknąć fałszywych alarmów.

# Alert: budżet błędów wypala się zbyt szybko (objaw, nie przyczyna)
- alert: SzybkieWypalanieBudzetu
  expr: |
    slo:blad5m{job="sklep-api"} > (14.4 * 0.001)
    and
    slo:blad1h{job="sklep-api"} > (14.4 * 0.001)
  for: 2m
  labels:   { severity: page }        # page = wezwij dyżurnego
  annotations:
    summary: "Usługa zjada budżet błędów 14x szybciej niż wolno"

Liczba 14,4 nie jest przypadkowa: to tempo, przy którym w godzinę zniknęłoby 2% miesięcznego budżetu błędów. Taki alert łapie poważne awarie w kilka minut, a jednocześnie nie budzi nikogo z powodu drobnego, przejściowego skoku. Gdy warunek się utrzyma, alert staje się aktywny, co widać w interfejsie:

Aktywny, wyzwolony alert w Prometheusie w stanie firing, oznaczający naruszenie progu niezawodności
Alert w stanie aktywnym (firing). Reguła była spełniona przez zadany czas, więc alert przestał być tylko ostrzeżeniem i został przekazany dalej. To moment, w którym z liczby na wykresie robi się realne zdarzenie wymagające reakcji.

Alertmanager odbiera taki alert i zamienia go w powiadomienie na właściwym kanale. To on decyduje, czy alert pójdzie na e-mail całego zespołu, czy jako pilne wezwanie (ang. page) obudzi dyżurnego telefonem. Poniżej Alertmanager z aktywnym alertem gotowym do wysłania.

Alertmanager z aktywnym alertem gotowym do wysłania powiadomienia do dyżurnego inżyniera SRE
Alertmanager z aktywnym alertem. To ostatni element łańcucha: reguła w Prometheusie wykryła problem, a Alertmanager kieruje powiadomienie tam, gdzie trzeba. W dojrzałym zespole SRE poważny alert (severity page) trafia do systemu dyżurów, który dzwoni do osoby aktualnie na służbie.

Właśnie tak wygląda dyżur (ang. on-call): wyznaczona osoba przez ustalony czas (najczęściej tydzień) jest gotowa zareagować na pilne alerty. SRE traktuje dyżur poważnie: liczba nocnych wezwań jest mierzona, a jeśli rośnie, to sygnał, że system trzeba naprawić u źródła, a nie przyzwyczajać ludzi do niewyspania. Dobry dyżur to taki, na którym telefon milczy, bo automatyzacja i solidne systemy załatwiają sprawę same.

Reguły alertów, Alertmanager i pulpity SLO najlepiej poznać na żywej infrastrukturze. Szkolenie Monitoring i Observability: Grafana, Prometheus, Loki, Zabbix ma terminy gwarantowane.

Logi i ślady: druga i trzecia noga obserwowalności

Do czego służą: metryki mówią „coś jest nie tak", ale nie mówią dlaczego. Logi (zapisy zdarzeń) i ślady (droga jednego zapytania przez system) dostarczają odpowiedzi na pytanie „co konkretnie zawiodło".

Obserwowalność (ang. observability), czyli zdolność zrozumienia, co dzieje się w systemie na podstawie danych, które on o sobie udostępnia, stoi na trzech nogach. Pierwszą są metryki z Prometheusa. Drugą są logi, które centralizuje Loki albo starszy, wciąż popularny stos ELK (Elasticsearch, Logstash, Kibana). Trzecią są ślady zapytań (ang. distributed tracing): zapis drogi pojedynczego żądania przez wszystkie usługi, dzięki któremu widać, na którym etapie zapytanie utknęło. Narzędzia takie jak Jaeger, Tempo czy standard OpenTelemetry odpowiadają właśnie na pytanie „w którym z dziesięciu mikroserwisów zapytanie straciło trzy sekundy".

Dla SRE ta trójka działa jak ścieżka diagnozy podczas awarii. Metryka i alert mówią, że rośnie odsetek błędów. Log pokazuje treść błędu i której usługi dotyczy. Ślad pokazuje, gdzie dokładnie w łańcuchu wywołań pojawiło się opóźnienie albo błąd. Bez tej trójki analiza incydentu jest zgadywaniem, a z nią staje się czytaniem faktów. Jeśli chcesz zobaczyć obserwowalność na konkretnym przykładzie bazy danych, pokazaliśmy ją na monitorowaniu PostgreSQL zarówno przez rozszerzenie pg_stat_monitor, jak i przez Percona Monitoring and Management.

Kubernetes: samonaprawa jako niezawodność wbudowana w platformę

Do czego służy: utrzymuje zadaną liczbę kopii aplikacji i sam zastępuje te, które padły. Dla SRE to automatyzacja niezawodności wprost: część awarii nie wymaga już człowieka, bo platforma naprawia je sama.

Kubernetes to system do orkiestracji kontenerów, w którym nie mówisz „uruchom ten kontener", tylko opisujesz stan docelowy („chcę trzy działające kopie"), a klaster sam do niego dąży i sam go pilnuje. Różnice między samym Dockerem a Kubernetesem rozłożyliśmy w osobnym tekście o tym, czym różni się Kubernetes od Dockera. Z punktu widzenia SRE najważniejsza jest samonaprawa: gdy któraś kopia padnie, Kubernetes natychmiast uruchamia nową, żeby utrzymać zadaną liczbę, bez budzenia kogokolwiek.

Sesja kubectl na żywym klastrze Kubernetes: wdrożenie w trzech kopiach i skalowanie do pięciu, samonaprawa aplikacji
Prawdziwa sesja na działającym klastrze Kubernetes. Aplikacja działa w trzech kopiach, a jedno polecenie zmienia ich liczbę na pięć. Gdyby któraś kopia padła, klaster od razu uruchomiłby nową. To jest niezawodność wbudowana w platformę: ręczny restart, klasyczny toil, znika, bo robi to automat.

To dlatego SRE tak chętnie sięga po Kubernetes i podobne platformy. Każda awaria, którą system potrafi naprawić sam, to jedno wezwanie mniej w nocy i jeden kawałek toil mniej. Zamiast pisać instrukcję „gdy usługa padnie, zaloguj się i zrestartuj", opisuje się stan docelowy raz, a egzekwuje go maszyna. Tę samą zasadę, samodzielnego przełączania na zapasowy węzeł po awarii, stosuje się też na poziomie baz danych, na przykład w PostgreSQL o wysokiej dostępności z Patroni (automatyczny failover, czyli natychmiastowe przełączenie na węzeł zapasowy) oraz w replikacji z gorącą rezerwą, gdzie kopia bazy stoi gotowa do przejęcia ruchu.

Samonaprawę i skalowanie na realnym klastrze najlepiej przećwiczyć w praktyce. Szkolenie Kubernetes: orkiestracja kontenerów ma terminy gwarantowane.

Inżynieria chaosu: psuć celowo, żeby nie zaskoczyło przypadkiem

Do czego służy: celowo wprowadza kontrolowane awarie na produkcji (ubija kopie aplikacji, opóźnia sieć), żeby sprawdzić, czy system naprawdę radzi sobie sam, zanim sprawdzi to prawdziwa awaria o niewłaściwej porze.

Inżynieria chaosu (ang. chaos engineering) to praktyka, w której niezawodności nie zakłada się, tylko testuje. Narzędzia takie jak Chaos Mesh czy LitmusChaos wstrzykują kontrolowane awarie: wyłączają losową kopię aplikacji, dodają opóźnienie sieci, symulują zapełnienie dysku. Jeśli system jest naprawdę odporny, użytkownik niczego nie zauważy, bo samonaprawa i nadmiarowość zadziałają. Jeśli nie, dowiadujemy się o tym w bezpiecznych warunkach, w środku dnia, z zespołem przy klawiaturach, a nie o trzeciej w nocy podczas prawdziwego skoku ruchu. To bezpośrednie przedłużenie myślenia SRE: lepiej wywołać awarię samemu i się z niej nauczyć, niż czekać, aż wywoła ją przypadek.

Cykl życia incydentu i postmortem bez obwiniania

Mimo najlepszej automatyzacji awarie się zdarzają. Różnica polega na tym, jak zespół na nie reaguje. SRE ma na to uporządkowany proces, nazywany zarządzaniem incydentami. Nie chodzi w nim o heroiczne gaszenie pożaru przez jedną osobę, tylko o powtarzalną ścieżkę od wykrycia do wyciągnięcia wniosków. Prześledźmy tę drogę.

🔔
Wykrycie
alert
📲
Wezwanie
dyżur
👨‍💻
Reakcja
diagnoza
🔧
Złagodzenie
usługa wraca
Naprawa
źródło problemu
📝
Postmortem
wnioski
Cykl życia incydentu w SRE. Alert wykrywa problem, system dyżurów wzywa człowieka, ten diagnozuje i najpierw łagodzi (przywraca usługę, choćby tymczasowo), potem usuwa źródło, a na końcu zespół pisze postmortem, czyli analizę bez obwiniania. Czas od wykrycia do złagodzenia to wskaźnik MTTR, jeden z kluczowych mierników dojrzałości.

Zwróć uwagę na kolejność dwóch ostatnich etapów przed wnioskami. Najpierw złagodzenie (ang. mitigation), czyli szybkie przywrócenie działania usługi, choćby prowizoryczne, na przykład przez cofnięcie ostatniego wdrożenia. Dopiero potem naprawa źródła (ang. root cause), spokojnie, bez presji. Podczas awarii celem numer jeden jest, żeby użytkownik znów mógł korzystać z usługi, a nie żeby od razu zrozumieć wszystko do końca. Czas od wykrycia do złagodzenia mierzy się jako MTTR (ang. Mean Time To Recovery, średni czas powrotu do sprawności) i jest to jeden z czterech wskaźników DORA, po których poznaje się dojrzały zespół.

Najważniejszym elementem jest jednak ostatni: postmortem bez obwiniania (ang. blameless postmortem). Po każdym poważnym incydencie zespół spisuje, co się stało, dlaczego i co zrobić, żeby się nie powtórzyło. Kluczowe słowo to „bez obwiniania": celem nie jest znalezienie winnego, tylko słabego miejsca w systemie. Założenie SRE brzmi, że jeśli jeden człowiek jednym kliknięciem mógł położyć produkcję, to problemem jest system, który na to pozwolił, a nie ten człowiek. Taka kultura sprawia, że ludzie zgłaszają błędy zamiast je ukrywać, a to jest warunek jakiejkolwiek poprawy.

Częsty błąd: szukanie winnego po awarii daje krótkotrwałą satysfakcję i długotrwałą szkodę. Ludzie zaczynają ukrywać pomyłki, więc te same przyczyny wracają. Postmortem bez obwiniania odwraca ten mechanizm: skoro nikt nie zostanie ukarany za szczerość, wszyscy mówią prawdę i system realnie się poprawia.

Co SRE daje firmie

SRE nie jest sztuką dla sztuki. Jego celem jest niezawodność, która wprost przekłada się na pieniądze: każda minuta niedostępności sklepu to utracona sprzedaż, a każda głośna awaria to nadszarpnięte zaufanie. Jednocześnie SRE nie goni za niezawodnością za wszelką cenę, bo wie, że kolejne dziewiątki kosztują nieproporcjonalnie dużo. Zamiast tego dobiera cel świadomie i pilnuje go liczbami.

Niezawodność, którą widać
Zamiast obietnic „staramy się", firma ma liczbę: dotrzymujemy 99,9% albo nie. Łatwiej nią zarządzać i łatwiej ją poprawiać.
Koniec sporu o tempo
Budżet błędów obiektywnie mówi, kiedy przyspieszyć wdrożenia, a kiedy zwolnić. Znika przeciąganie liny między programistami a utrzymaniem.
Mniej nocnych pożarów
Automatyzacja i samonaprawa łapią awarie, zanim zauważy je klient. Mniej wezwań, spokojniejszy zespół, mniejsza rotacja ludzi.
Skalowanie bez armii ludzi
Cięcie toil sprawia, że ten sam zespół obsługuje coraz większy system. Koszt utrzymania nie rośnie proporcjonalnie do skali.
Cztery konkretne korzyści z SRE. Wspólny mianownik to zamiana intuicji na liczby: niezawodność staje się mierzalnym celem, a nie deklaracją, więc firma może nią świadomie zarządzać zamiast reagować na awarie po fakcie.

Od czego zacząć naukę SRE

SRE nie jest punktem startowym kariery, tylko warstwą, która nadbudowuje się nad solidnymi podstawami. Nie da się sensownie ustawiać celów SLO dla systemu, którego się nie rozumie. Sensowna kolejność wygląda tak:

1
Fundamenty
Linux, sieci, Git, skrypty
2
Obserwowalność
Prometheus, Grafana
3
Matematyka SLO
SLI, SLO, budżet błędów
4
Automatyzacja
Docker, K8s, Terraform, Ansible
5
Praktyka
dyżury, incydenty, postmortem
Ścieżka nauki SRE. Kolejność ma znaczenie: dopiero na solidnych fundamentach i obserwowalności da się sensownie stawiać cele SLO, a potem automatyzować i ćwiczyć praktykę dyżurów. Skok od razu do matematyki niezawodności bez zrozumienia systemu kończy się liczbami, które nic nie znaczą.
  1. Fundamenty: Linux i terminal, sieci, Git oraz jeden język skryptowy (najczęściej Python lub Bash), bo bez nich każde narzędzie jest ścianą skrótów.
  2. Obserwowalność: Prometheus i Grafana, czyli umiejętność zmierzenia, co system o sobie mówi. To fundament, na którym stoi cała reszta SRE.
  3. Matematyka niezawodności: wskaźniki SLI, cele SLO i budżet błędów. Ćwicz liczenie wskaźników z realnych metryk i ustawianie na nich alertów tempa wypalania.
  4. Automatyzacja i platforma: Docker i Kubernetes oraz infrastruktura jako kod (Terraform, Ansible), bo to one wycinają toil i wbudowują niezawodność w system.
  5. Praktyka operacyjna: dyżury, zarządzanie incydentami i postmortemy bez obwiniania, najlepiej ćwiczone na własnym laboratorium z celowo wywoływanymi awariami.

Najlepiej uczyć się na własnym laboratorium. Pełny klaster Kubernetes uruchomisz lokalnie w minutę, a stos Prometheus i Grafana postawisz w kilka poleceń, po czym możesz sam wywoływać awarie i patrzeć, jak reaguje monitoring. Ponieważ SRE wyrasta wprost z DevOps, jego droga nauki mocno się z nią pokrywa. Kompletną, rozpisaną na fazy ścieżkę wraz z realnymi widełkami zarobków opisaliśmy w osobnym przewodniku o tym, jak zostać inżynierem DevOps od zera.

Podsumowanie

SRE to nie nowa nazwa dla administratora ani zestaw modnych narzędzi, tylko sposób myślenia, w którym niezawodność jest problemem inżynierskim, mierzonym liczbami i pilnowanym przez automatyzację. Jego rdzeń to prosta, ale potężna matematyka: SLI mierzy, co dzieje się z usługą, SLO stawia na tym cel, a budżet błędów zamienia różnicę między nimi w narzędzie zarządcze, które kończy odwieczny spór o tempo wdrożeń. Wokół tego rdzenia SRE tnie toil, buduje obserwowalność z metryk, logów i śladów, alarmuje o objawach, a nie przyczynach, i po każdej awarii pisze postmortem bez obwiniania. Narzędzia, których używa, Prometheus, Grafana, Alertmanager, Loki czy Kubernetes, to w większości ten sam stos co w DevOps, ustawiony pod jedno pytanie: czy dotrzymujemy obietnicy złożonej użytkownikowi. To właśnie jest SRE i do tego on służy.

Baner szkolenia Monitoring i Observability JSystems: Grafana, Prometheus, Loki i Zabbix z terminami gwarantowanymi
Monitoring i Observability: Grafana, Prometheus, Loki, Zabbix Naucz się mierzyć wskaźniki SLI, stawiać cele SLO i budować alerty na realnej infrastrukturze - dokładnie ten stos, na którym opiera się codzienna praca SRE. Zajęcia prowadzi praktyk. Terminy gwarantowane. Szkolenie Monitoring i Observability: Grafana, Prometheus, Loki, Zabbix -->
Baner szkolenia DevOps JSystems z praktykami SRE i terminami gwarantowanymi
DevOps i SRE, kompleksowe szkolenie z praktykiem Warsztaty z Dockera, Kubernetes, Ansible, Terraform, CI/CD oraz monitoringu i niezawodności na realnej infrastrukturze. Ćwiczysz dokładnie ten stos, na którym opiera się SRE: Prometheus, Grafana, alerty i automatyzacja. Terminy gwarantowane. Przyjdź na szkolenie DevOps -->

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...