Error budget VictoriaMetrics-ში: recording rules, burn-rate ალერტები და ერთი პატიოსანი პანელი
როგორ ავაწყეთ error budget პირველი დონის სერვისებისთვის უკვე არსებული მეტრიკებიდან: SLO-მიზნები სერვისების მიხედვით, multi-window burn-rate ალერტები, რიგი Grafana-ში — და რატომ არ იყო უარყოფითი ბიუჯეტი გაშვებისთანავე ინციდენტი.
Gambchamp-ში ერთი პროდუქტის პლატფორმის პირველი დონის სერვისებისთვის error budget გვჭირდებოდა — რაღაც, რაც ერთი შეხედვით ჩანს და რაზეც ალერტის დაყენება შეიძლება. შემოგვთავაზეს ჩატში slash-ბრძანება, რომელიც ბიუჯეტს დაბეჭდავდა. ჩვენ Grafana-ს პანელი ავირჩიეთ — მონაცემები უკვე VictoriaMetrics-ში იყო, ახალი ბოტი კი ახალ სერვისს, ახალ ტოკენს და კიდევ ერთ რამეს ნიშნავს, რომელიც ცოცხალი უნდა შეინახო.
SLI და მიზნები
SLI ყველაზე მარტივი და პატიოსანი ავიღეთ: 5xx-ის გარეშე პასუხების წილი. თითოეულ სერვისს თავისი მიზანი აქვს, ჩაწერილი მანამდე, სანამ ერთი წესიც გაჩნდებოდა. წესები ამ პლატფორმისთვის ცალკე ჯგუფში მოვათავსეთ, ამიტომ ალერტების საერთო წესები ხელუხლებელი დარჩა.
სამი recording rule
slo:target_error:ratio{app,cluster}— შეცდომების დასაშვები წილი (1 − SLO) სერვისის მიხედვით, აწყობილიlabel_replace(vector(x), ...)-ით, გაერთიანებულიor-ით;slo:errors:ratio_rate30d— შეცდომების რეალური წილი 30 დღეში, ჩაწერილი როგორც... or 0 * total, რომ შეცდომების გარეშე სერვისმა 0 აჩვენოს და არა ცარიელი სერია;slo:error_budget:remaining_ratio30d = 1 - ratio30d / target— 1 სრულ ბიუჯეტს ნიშნავს, 0 — დახარჯულს, ნულზე ნაკლები — გადახარჯვას.
რადგან მიზანს იგივე {app, cluster} ლეიბლები აქვს, რაც შეცდომების სერიას, ყოველი შედარება სუფთა join-ია ერთი ერთზე.
Burn-rate ალერტები
Multi-window, multi-burn-rate, კლასიკური სქემა SRE workbook-იდან:
- სწრაფი: 14.4× წვა 5 წუთსა და 1 საათში, critical,
for: 2m; - ნელი: 6× წვა 30 წუთსა და 6 საათში, warning,
for: 15m.
მათ გვერდით — მარტივი RED-წესები სიმპტომებზე: p99 ლატენტობა წამზე მეტი, მაგრამ მხოლოდ ტრაფიკის ზღვრით (უმოქმედო სერვისის ერთი ნელი მოთხოვნა ინციდენტი არ არის), „ტრაფიკი არ არის“ ნულოვანი დონის სერვისებისთვის და „მეტრიკა გაქრა“.
პანელი
ერთი რიგი: stat თითოეული სერვისისთვის პლუს ტრენდი, ზღვრები — წითელი 0-ზე ქვემოთ, ნარინჯისფერი 0.2-ზე ქვემოთ, მწვანე ზემოთ. რიგი code-first დაშბორდების გენერატორში წავიდა და არა Grafana-ს UI-ში — UI-ში ცვლილებები შემდეგი დეპლოისას გადაიწერება.
ბიუჯეტი −26 % და ყველაფერი რიგზეა
გაშვებისთანავე ერთმა გადახდის სერვისმა −26 % ბიუჯეტი აჩვენა. შემაშფოთებლად გამოიყურებოდა. ეს ყველაფერი გაშვების დღის ერთმა ნახტომმა მისცა: დეპოზიტის დაახლოებით 2 100 შეცდომა 9,5 საათში, რამდენიმე კვირით ადრე. 30-დღიანი ფანჯარა უბრალოდ მას მოიცავდა. ბიუჯეტი თავისით გამოსწორდებოდა, როგორც კი ის დღე ფანჯრიდან გავიდოდა. Burn-rate ალერტები, რომლებიც მოკლე ფანჯრებს უყურებენ, მთელი ამ დროის განმავლობაში დუმდნენ — და ეს სწორია.
წვრილმანები, რომელთა ცოდნაც სასარგებლოა
- Recording rule, რომელიც სხვა recording rule-ებზეა აგებული, რამდენიმე გამოთვლის ციკლით გვიან ჩნდება: შემავალი სერიები ჯერ უნდა ჩაიწეროს და მოთხოვნისთვის ხელმისაწვდომი გახდეს. ეს ბაგი არ არის.
- vmalert-ს
-remoteWrite.urlსჭირდება, თორემ recording rule-ების შედეგები არსად მიდის. - დაშბორდი
ALERTSსერიას TSDB-დან კითხულობს და არა რომელიმე Alertmanager-იდან, ამიტომ შეტყობინების არხების შემდგომმა გაყოფამ მასზე გავლენა არ მოახდინა.
დასკვნები
- დაიწყეთ უკვე არსებული მეტრიკებით; SLO ახალ სერვისს არ საჭიროებს.
- გააკეთეთ ისე, რომ „შეცდომები არ არის“ შემთხვევამ 0 დააბრუნოს და არა ცარიელი სერია, თორემ ჯაჭვში ქვემოთ ყველა წესი ჩუმად იშლება.
- Burn rate — პეიჯინგისთვის, 30-დღიანი ბიუჯეტი — დაგეგმვისთვის. ისინი სხვადასხვა კითხვას პასუხობენ.
- გაშვებისთანავე 30-დღიანი ფანჯარა გაშვების პერიოდის შეცდომებით არის დამახინჯებული. იცოდეთ, როდის გავლენ ისინი ფანჯრიდან, სანამ პანიკას დაიწყებთ.