36-წუთიანი სამუშაო სესია იმაზე, როგორ იცოდეთ, რას აკეთებს თქვენი პროგრამა ახლა — სამი საყრდენი (მეტრიკები, ლოგები, ტრეისები), ოქროს სიგნალები, განაწილებული ტრეისინგი, გაფრთხილებები SLO-ზე და ინსტრუმენტები, რომლებიც ამ ყველაფერს ერთად კრავს.
როგორც კი კოდი ლეპტოპს დატოვებს და რეალურ მომხმარებლებთან ამუშავდება, ის შავ ყუთად იქცევა. მოთხოვნა ნელია — მაგრამ სად? ჩექაუთი ვარდება — მაგრამ რატომ და ვისთან? დაკვირვებადობა ის გზაა, რომლითაც ამ შავ ყუთს შეკითხვებს დაუსვამთ — სასურველია მანამ, სანამ გატეხილობის შესახებ კლიენტი გეტყვით.
მონიტორინგი ფარავს იმ შეკითხვებს, რომლებიც ჩაწერეთ; დაკვირვებადობა კი საშუალებას გაძლევთ დასვათ ისეთები, რომლებიც არ ჩაგიწერიათ.
დაკვირვებადობის თითქმის ყველა ინსტრუმენტი ტელემეტრიის სამ სახეობას ეყრდნობა. ამ სესიის დანარჩენი ნაწილი თითო საყრდენს ეთმობა.
იაფი, აგრეგირებული გაზომვები — მოთხოვნები წამში, შეცდომების სიხშირე, შეყოვნება. შესანიშნავია დაშბორდებისა და გაფრთხილებებისთვის; ისინი გეუბნებიან, რომ რაღაც შეიცვალა.
ცალკეული მომხდარი ამბების დროის ნიშნულიანი ჩანაწერები. მდიდარი დეტალი, რომელსაც ფაქტის შემდეგ ეკითხებით; ისინი გეუბნებიან, რა მოხდა კონკრეტულ შემთხვევაში.
ერთი მოთხოვნის სრული გზა, სანამ ის სერვისებს შორის გადადის. ისინი გეუბნებიან, სად წავიდა დრო და რომელი გადასვლა ჩავარდა.
ჰგავს საავადმყოფოს ისტორიას — მეტრიკები სასიცოცხლო ჩვენებების მონიტორებია, ლოგები ექთნის ჩანაწერები, ტრეისი კი ერთი პაციენტის გაყოლა ყველა განყოფილებაში.
მეტრიკა მონიტორინგის სამუშაო ცხენია: ერთი რიცხვი, რომელსაც ისევ და ისევ ზომავთ და დროით მწკრივად ინახავთ. რადგან თითოეული წერტილი პაწაწინაა და წინასწარ აგრეგირებული, მილიონობით მათგანის შენახვა და კვირეების ისტორიის დახატვა ჯიბეს არ დაგიცლით.
service ან region). წარმოიდგინეთ, როგორ ემატება ერთეულები http_requests_total-ს, ან როგორ იზომება memory_used_bytes ყოველ 15 წამში.მიმდინარე ჯამი — მომსახურებული მოთხოვნები, დანახული შეცდომები. თქვენ მისი ცვლილების ტემპს ხატავთ.
მომენტის მნიშვნელობა — ტემპერატურა, რიგის სიღრმე, ახლა გამოყენებული მეხსიერება.
ითვლის მნიშვნელობებს დიაპაზონების მიხედვით — ეს არის პროცენტილური შეყოვნების, მაგალითად p95-ისა და p99-ის, საფუძველი.
გასაღები/მნიშვნელობის ლეიბლი (route, status), რომლითაც ფილტრავთ და აჯგუფებთ. ლეიბლების მნიშვნელობები დაბალკარდინალური შეინახეთ.
Google-ის SRE პრაქტიკიდან: თუ მომხმარებელზე ორიენტირებულ სერვისზე მხოლოდ ოთხ რამეს დააკვირდებით, სწორედ ამათ დააკვირდით. ისინი თითქმის ყველა მომხმარებლისთვის ხილულ პრობლემას იჭერენ.
რამდენ ხანს გრძელდება მოთხოვნები. თვალი ადევნეთ პროცენტილებს (p95/p99), და არა საშუალოს — და გამიჯნეთ ნელი წარმატებები ნელი შეცდომებისგან.
რამდენი მოთხოვნაა — მოთხოვნები წამში, ტრანზაქციები წუთში. ის აძლევს კონტექსტს ყველა დანარჩენ სიგნალს.
ჩავარდნილი მოთხოვნების სიხშირე — ცხადი (HTTP 500) და ფარული (არასწორი პასუხი, 200 გატეხილი შიგთავსით).
რამდენად სავსეა სისტემა — CPU, მეხსიერება, რიგის სიღრმე. ეს ის სიგნალია, რომელიც გაფრთხილებთ მანამ, სანამ დანარჩენები აფეთქდება.
საშუალო მშვიდად გამოიყურება; p95 კი სიმართლეს გეუბნებათ. ყოველთვის დახატეთ კუდი.
რჩევა მოთხოვნების მომსახურე სერვისებისთვის RED — Rate, Errors, Duration — იგივე ოქროს სიგნალებია სხვა სიტყვებით; რესურსებისთვის კი USE — Utilization, Saturation, Errors.
როცა მეტრიკა გეუბნებათ, რომ შეცდომებმა იმატა, ლოგები თითოეულის ამბავს გიყვებიან: რომელი მომხმარებელი, რომელი შემავალი მონაცემი, რომელმა ხაზმა გადმოაგდო შეცდომა. ლოგი ერთი მომხდარი ამბის დროის ნიშნულიანი ჩანაწერია — და ყველაზე დიდი გაუმჯობესება, რაც შეგიძლიათ შეიტანოთ, არის მისი სტრუქტურირებულ მონაცემად და არა პროზად ჩაწერა.
user_id-ით, დააჯგუფოთ status-ით და დახატოთ რაოდენობები — იმის ნაცვლად, რომ ფრაზას grep-ით ეძებოთ და იმედი გქონდეთ.თითოეული სერვისი თავის ხაზებს ერთ, ძებნად საცავში აგზავნის — ასე მთელ სისტემას ერთბაშად ეკითხებით.
error ახლავე მოქმედებისთვის, warn საეჭვოსთვის, info ეტაპებისთვის, debug სრული ნაკადისთვის.მიკროსერვისულ სისტემაში ერთმა დაწკაპუნებამ შეიძლება ათეულ სერვისს შეეხოს. მეტრიკა ამბობს "ჩექაუთი ნელია"; ლოგები კი ამ ათეულ მანქანაზეა მიმოფანტული. ტრეისი მათ ერთ ქრონოლოგიად აწყობს, რომ ზუსტად დაინახოთ, რომელმა გადასვლამ შეჭამა დრო ან გადმოაგდო შეცდომა.
trace_id-ს.span_id-ს) შემდეგ სერვისს მოთხოვნის ჰედერით გადასცემს — ეს არის კონტექსტის გავრცელება.trace_id აქვს.ჩანჩქერზე ერთი შეხედვითაც აშკარაა ნელი და ჩავარდნილი payment სპანი.
// OpenTelemetry: wrap work in a span await tracer.startActiveSpan("charge_card", async (span) => { span.setAttribute("amount", order.total) try { await gateway.charge(order) // header carries trace_id } catch (e) { span.recordException(e) // span turns red ✕ throw e } finally { span.end() } })
traceparent ჰედერი id-ს ქვემოთ ატარებს, ასე რომ ყველა სერვისის სპანი ერთსა და იმავე ტრეისში ხვდება.
ჰგავს ამანათის თრექინგის ნომერს — ერთი id მიჰყვება ამანათს ყველა განყოფილებაში, ასე რომ ზუსტად ხედავთ, სად გაიჭედა.
ტელემეტრია მხოლოდ მაშინაა სასარგებლო, როცა სწორი გაფრთხილება სწორ ადამიანთან სწორ დროს მიდის. ხაფანგი ისაა, რომ ყველაფერზე აყენებთ გაფრთხილებას — გამოძახებების კედელს, რომელსაც არავინ კითხულობს. გამოსავალი კი ისაა, რომ გააფრთხილოთ იმაზე, რასაც მომხმარებელი ნამდვილად გრძნობს, და "საკმარისად კარგი" SLO-თი განსაზღვროთ.
100% − SLO — იმდენი ჩავარდნა, რამდენიც გეშვებათ, სანამ ფუნქციონალის გამოშვებას შეაჩერებთ და საიმედოობას გამოასწორებთ.ბიუჯეტი საიმედოობას დასახარჯ რესურსად წარმოგვიდგენს — წვის ტემპი კი გეუბნებათ, რამდენად მალე ამოიწურება იგი.
სიმძიმე წყვეტს არხს: გადაუდებელზე გამოძახება, გაფრთხილებაზე ჩატი, დანარჩენზე თიქეთი.
ამას იშვიათად აშენებთ ნულიდან. ბაზარი იყოფა ტელემეტრიის შეგროვების ვენდორისგან დამოუკიდებელ გზად, თითო საყრდენისთვის საუკეთესო ინსტრუმენტებად და ერთიან, ყოვლისმომცველ პლატფორმებად. ქვემოთ თითოეული ჩანართი ასახელებს წამყვან რეალურ ვარიანტებს ერთსტრიქონიანი დადებითი და უარყოფითი მხარით.
აი, როგორ მიმდინარეობს რეალური გამართვის სესია — თითოეული საყრდენი ესტაფეტას შემდეგს გადასცემს.
/checkout-ზეა, მხოლოდ EU რეგიონში, და დეპლოის შემდეგვე დაიწყო.payment-ის სპანი წითელი და ნელია. ახლა უკვე იცით, სად.trace_id-დან გადადით მის ლოგებზე: payment_timeout გეითვეის ახალ ენდპოინტთან. გააკეთეთ როლბექი. მორჩა."თუ კითხვაზე პასუხის გასაცემად კოდი უნდა გამოუშვათ, ეს სისტემა დაკვირვებადი არ ყოფილა."
— სამუშაო განსაზღვრება
ხუთი სწრაფი კითხვა საყრდენებზე, ოქროს სიგნალებზე, ტრეისინგსა და SLO-ებზე — მყისიერი პასუხი, ავტორიზაციის გარეშე.
ნავიგაცია ← → ღილაკებით ან სქროლით · უკან ბიბლიოთეკაში