მონიტორინგი და ლოგირება
ისწავლეთ Docker-ის კონტეინერების მონიტორინგი და ეფექტური ლოგირების სტრატეგიების დანერგვა
Docker-ის მონიტორინგი და ლოგირება
ეფექტური მონიტორინგი და ლოგირება აუცილებელია საიმედო Docker გარემოს შესანარჩუნებლად. ისინი გვეხმარება პრობლემების მოგვარებაში, წარმადობის ოპტიმიზაციასა და აპლიკაციის ჯანმრთელობის უზრუნველყოფაში. ყოვლისმომცველი მონიტორინგისა და ლოგირების სტრატეგია უზრუნველყოფს კონტეინერის ქცევის ხილვადობას, იძლევა პრობლემების პროაქტიული გამოვლენის საშუალებას და გვეხმარება მომსახურების დონის მიზნების შენარჩუნებაში.
Docker-ის კონტეინერები წარმოადგენენ უნიკალურ მონიტორინგის გამოწვევებს მათი ეფემერული ბუნების, იზოლაციის მახასიათებლებისა და დინამიური გარემოს გამო, რომელშიც ისინი ხშირად მუშაობენ. ეფექტური კონტეინერის დაკვირვებადობის სტრატეგიამ უნდა გაითვალისწინოს ეს მახასიათებლები და ამავდროულად უზრუნველყოს მნიშვნელოვანი ინფორმაცია კონტეინერის მთელი სასიცოცხლო ციკლის განმავლობაში.
კონტეინერის მონიტორინგი
ჩაშენებული მონიტორინგი
Docker-ი უზრუნველყოფს ძირითად მონიტორინგის შესაძლებლობებს, რომლებიც არ საჭიროებს დამატებით ინსტრუმენტებს ან დაყენებას:
ჩაშენებულ მონიტორინგის ინსტრუმენტებს აქვთ კარგი საწყისი წერტილი, მაგრამ აქვთ შეზღუდვები:
- ისტორიული მონაცემების შენახვის გარეშე
- შეზღუდული მეტრიკების დეტალიზაცია
- შეტყობინებების შესაძლებლობების გარეშე
- მინიმალური ვიზუალიზაციის ოფციები
- კონტეინერ-ცენტრული და არა აპლიკაცია-ცენტრული ხედვა
cAdvisor
Google-ის კონტეინერების მრჩეველი (cAdvisor) უზრუნველყოფს უფრო დეტალურ კონტეინერის მეტრიკებს ვებ ინტერფეისით და აჩენს Prometheus-თან თავსებად ენდფოინთებს:
cAdvisor-ი უზრუნველყოფს:
- რესურსების გამოყენების დეტალური სტატისტიკას (CPU, მეხსიერება, ქსელი, ფაილური სისტემა)
- კონტეინერის სასიცოცხლო ციკლის მოვლენებს
- ისტორიულ წარმადობის მონაცემებს (მოკლევადიანი, მეხსიერებაში შენახვა)
- კონტეინერის იერარქიის ვიზუალიზაციას
- Prometheus მეტრიკების ენდფოინთს
/metrics-ზე - აპარატურა-სპეციფიკურ მონიტორინგს (NVML NVIDIA GPU-ებისთვის)
- კონტეინერების ავტომატურ აღმოჩენას
cAdvisor-ის მიერ გამოვლენილი ძირითადი მეტრიკები:
- CPU-ს გამოყენების დაშლა (მომხმარებელი, სისტემა, შეზღუდვა)
- მეხსიერების დეტალები (RSS, ქეში, swap, სამუშაო ნაკრები)
- ქსელის სტატისტიკა (RX/TX ბაიტები, შეცდომები, დაკარგული პაკეტები)
- ფაილური სისტემის გამოყენებისა და I/O სტატისტიკა
- პროცესების სტატისტიკა კონტეინერების შიგნით
ინტერფეისზე წვდომა:
- ვებ ინტერფეისი http://localhost:8080-ზე
- API ენდფოინთები პროგრამული წვდომისთვის:
/api/v1.3/containers- ყველა კონტეინერის სტატისტიკა/api/v1.3/docker/[container_name]- კონკრეტული კონტეინერის სტატისტიკა/metrics- Prometheus-ის ფორმატის მეტრიკები
Prometheus + Grafana
მძლავრი კომბინაცია მეტრიკების შეგროვების, შენახვის, გამოთხოვისა და ვიზუალიზაციისთვის, რომელიც ფართოდ ითვლება ინდუსტრიის სტანდარტად კონტეინერების მონიტორინგისთვის:
prometheus.yml კონფიგურაციის მაგალითი:
ეს დაყენება უზრუნველყოფს:
- Prometheus: დროის სერიების მონაცემთა ბაზა მძლავრი საძიებო ენით (PromQL)
- Node Exporter: ჰოსტის დონის მეტრიკები (CPU, მეხსიერება, დისკი, ქსელი)
- cAdvisor: კონტეინერ-სპეციფიური მეტრიკები
- Grafana: ვიზუალიზაციის დაფები და შეტყობინებები
შეგიძლიათ ჩართოთ Docker daemon-ის მეტრიკები /etc/docker/daemon.json-ში დამატებით:
კონტეინერებისთვის გავრცელებული Prometheus მეტრიკები:
container_cpu_usage_seconds_total- მოხმარებული CPU-ს კუმულაციური დროcontainer_memory_usage_bytes- მიმდინარე მეხსიერების გამოყენება, ქეშის ჩათვლითcontainer_memory_rss- Resident Set Size (ფაქტობრივი მეხსიერების გამოყენება)container_network_receive_bytes_total- მიღებული ქსელის ბაიტებიcontainer_network_transmit_bytes_total- გაგზავნილი ქსელის ბაიტებიcontainer_fs_reads_bytes_total- დისკიდან წაკითხული ბაიტებიcontainer_fs_writes_bytes_total- დისკზე ჩაწერილი ბაიტები
PromQL მოთხოვნების მაგალითები:
ლოგირების სტრატეგიები
Docker-ი გთავაზობთ მრავალ ლოგირების დრაივერს კონტეინერის ლოგების დასამუშავებლად, თითოეული მათგანი შესაფერისია სხვადასხვა გარემოსა და მოთხოვნებისთვის:
- json-file (ნაგულისხმევი)
- ლოგები ინახება JSON ფაილებად ჰოსტზე
- მარტივი გამოსაყენებლად და კონფიგურაციისთვის
- ლოკალური წვდომა ლოგებზე
docker logs-ის საშუალებით - შეზღუდულია ლოკალური დისკის სივრცით
- მოითხოვს ლოგების როტაციის კონფიგურაციას
- syslog
- გადასცემს ლოგებს syslog daemon-ს
- ინტეგრირდება არსებულ syslog ინფრასტრუქტურასთან
- მხარს უჭერს UDP, TCP და TLS ტრანსპორტს
- არ აქვს წვდომა ლოგებზე
docker logs-ის საშუალებით - სტანდარტული ფორმატი, რომელსაც იყენებს მრავალი ლოგის ანალიზატორი
- journald
- გადასცემს ლოგებს systemd journal-ს
- სტრუქტურირებული ლოგირება მეტამონაცემებით
- ინდექსზე დაფუძნებული ძებნის შესაძლებლობები
- კარგი ინტეგრაცია systemd-ზე დაფუძნებულ სისტემებთან
- წვდომა ლოგებზე
journalctl-ის ანdocker logs-ის საშუალებით
- fluentd
- გადასცემს ლოგებს fluentd კოლექტორს
- მაღალკონფიგურირებადი ლოგების დამუშავება
- მხარს უჭერს მრავალ გამომავალ დანიშნულებას
- მოითხოვს fluentd-ის გაშვებას
- არ აქვს წვდომა ლოგებზე
docker logs-ის საშუალებით
- awslogs
- აგზავნის ლოგებს Amazon CloudWatch-ში
- მშობლიური AWS ინტეგრაცია
- ცენტრალიზებული ლოგები AWS deployment-ებისთვის
- რეგიონ-სპეციფიური კონფიგურაცია
- მართვადი შენახვა და წვდომის კონტროლი
- splunk
- აგზავნის ლოგებს პირდაპირ Splunk-ში
- საწარმოო დონის ლოგების მართვა
- მხარს უჭერს Splunk-ის ინდექსირებასა და ძებნას
- მოითხოვს Splunk HTTP Event Collector-ს
- კომერციული გადაწყვეტა გაფართოებული ფუნქციებით
- gelf (Graylog)
- აგზავნის ლოგებს GELF ფორმატში
- მხარს უჭერს შეკუმშვას
- უკეთესი სტრუქტურირებული მონაცემები, ვიდრე syslog
- კარგად მუშაობს Graylog-თან, Logstash-თან
- სწორად ამუშავებს მრავალხაზიან შეტყობინებებს
- loki
- შექმნილია Grafana Loki-სთვის
- ლეიბლებზე დაფუძნებული ინდექსირება (Prometheus-ის მსგავსად)
- მაღალეფექტური შენახვა
- შესანიშნავი ინტეგრაცია Grafana-სთან
- ოპტიმიზირებულია ხარჯების ეფექტურობისთვის
ლოგირების დრაივერების კონფიგურაცია
ლოგირების დრაივერები შეიძლება დაკონფიგურირდეს daemon-ის დონეზე (ყველა კონტეინერისთვის) ან თითოეული კონტეინერისთვის:
ნაგულისხმევი ლოგირების დრაივერის კონფიგურაცია ყველა კონტეინერისთვის /etc/docker/daemon.json-ში:
daemon.json-ის შეცვლის შემდეგ, გადატვირთეთ Docker daemon-ი:
შეგიძლიათ შეამოწმოთ მიმდინარე ლოგირების დრაივერის კონფიგურაცია:
კონტეინერ-სპეციფიკური ლოგირების კონფიგურაციისთვის:
გავრცელებული ლოგირების ოფციები დრაივერებში:
mode- ბლოკირებადი (ნაგულისხმევი) ან არაბლოკირებადიmax-buffer-size- ბუფერის ზომა არაბლოკირებადი რეჟიმისთვისenv- კონკრეტული გარემოს ცვლადების ჩართვა ლოგებშიlabels- კონტეინერის ლეიბლების ჩართვა ლოგებშიtag- ლოგის შეტყობინების თეგის ფორმატის მორგება
კონტეინერის ლოგების ნახვა
ძირითადი ლოგის ბრძანებები
გაითვალისწინეთ, რომ docker logs მუშაობს მხოლოდ json-file, local, ან journald ლოგირების დრაივერების მქონე კონტეინერებთან. სხვა ლოგირების დრაივერებისთვის (როგორიცაა syslog, fluentd და ა.შ.), ლოგებზე წვდომა დაგჭირდებათ მათი შესაბამისი სისტემების საშუალებით.
ლოგების მიღების წარმადობის მოსაზრებები
- დიდი მოცულობის ლოგებისთვის, გამოიყენეთ
--tailგამომავალი მონაცემების შესაზღუდად - მოერიდეთ
docker logs-ის ხშირ გამოძახებას დატვირთულ production სისტემებზე - განიხილეთ
--sinceდროშის გამოყენება დროის დიაპაზონის შესაზღუდად - მაღალი ტრაფიკის მქონე კონტეინერებისთვის, გამოიყენეთ გამოყოფილი ლოგირების გადაწყვეტა
docker logs-ის ნაცვლად docker logsბრძანება კითხულობს მთელ ლოგ ფაილს ფილტრების გამოყენებამდე, რაც შეიძლება რესურს-ინტენსიური იყოს
ლოგების როტაცია
ლოგების როტაცია აუცილებელია დისკის სივრცის გამოფიტვის თავიდან ასაცილებლად. დააკონფიგურირეთ ის Docker daemon-ის პარამეტრებში:
კონტეინერ-სპეციფიკური ლოგების როტაცია შეიძლება დაკონფიგურირდეს runtime-ში:
არსებული deployment-ებისთვის, რომლებსაც არ აქვთ მართული ლოგ ფაილები, შეგიძლიათ გამოიყენოთ გარე ლოგების როტაცია:
შეგიძლიათ ხელით გამოიწვიოთ ლოგების როტაცია კონტეინერის ან Docker daemon-ის გადატვირთვით.
გავრცელებული ლოგების როტაციის პრობლემები:
- Docker daemon-ის გადატვირთვაა საჭირო daemon.json-ის ცვლილებების ძალაში შესასვლელად
- კონტეინერებს, რომლებიც შექმნილია ლოგების როტაციის კონფიგურაციამდე, არ ექნებათ ის გამოყენებული
- ძალიან მაღალი მოცულობის ლოგების მქონე კონტეინერებს შეიძლება კვლავ ჰქონდეთ პრობლემები როტაციის მიუხედავად
copytruncatelogrotate-ში შეიძლება გამოტოვოს ლოგები როტაციის ფანჯრის დროს- ჩადგმული JSON ლოგები შეიძლება რთული იყოს პარსინგისთვის როტაციის შემდეგ
მრავალკონტეინერიანი ლოგების აგრეგაცია
ინსტრუმენტებს, როგორიცაა Fluentd, Logstash, ან Filebeat, შეუძლიათ შეაგროვონ ლოგები მრავალი კონტეინერიდან და გადააგზავნონ ისინი ცენტრალიზებულ ლოგირების სისტემებში:
Fluentd კონფიგურაციის მაგალითი (fluent.conf):
ალტერნატიული ლოგების აგრეგაციის გადაწყვეტილებები:
- Filebeat: მსუბუქი ლოგების გამგზავნი Elastic Stack-იდან
- Logstash: უფრო მძლავრი ლოგების დამუშავების მილსადენი
- Vector: მაღალი წარმადობის დაკვირვებადობის მონაცემთა მილსადენი
ცენტრალიზებული ლოგირება
Production გარემოსთვის, განიხილეთ ეს ცენტრალიზებული ლოგირების გადაწყვეტილებები:
- ELK Stack (Elasticsearch, Logstash, Kibana)
- ღია კოდის გადაწყვეტა მძლავრი ძებნის შესაძლებლობებით
- მაღალმასშტაბირებადი კლასტერინგის მხარდაჭერით
- მდიდარი ვიზუალიზაცია და დაფები Kibana-სთან
- მოქნილი ლოგების დამუშავება Logstash მილსადენებით
- შეიძლება იყოს თვით-ჰოსტირებული ან გამოყენებული როგორც მართვადი სერვისი (Elastic Cloud)
- რესურს-ინტენსიური, მოითხოვს ფრთხილ ზომის განსაზღვრასა და რეგულირებას
- საზოგადოებისა და კომერციული მხარდაჭერის ოფციები ხელმისაწვდომია
- Graylog
- ღია კოდის ლოგების მართვა საწარმოო ფუნქციებით
- MongoDB მეტამონაცემების შესანახად, Elasticsearch ძებნისთვის
- ნაკადზე დაფუძნებული მარშრუტიზაცია და დამუშავება
- ჩაშენებული მომხმარებლის მართვა და როლზე დაფუძნებული წვდომის კონტროლი
- შეტყობინებებისა და რეპორტინგის შესაძლებლობები
- მშობლიური GELF ფორმატის მხარდაჭერა
- ზოგადად უფრო ადვილი დასაყენებელია, ვიდრე სრული ELK სტეკი
- Splunk
- საწარმოო დონის ლოგების ანალიზის პლატფორმა
- მძლავრი ძებნის დამუშავების ენა (SPL)
- გაფართოებული ანალიტიკისა და მანქანური სწავლების შესაძლებლობები
- ყოვლისმომცველი დაფები და ვიზუალიზაცია
- ვრცელი ინტეგრაციის ეკოსისტემა
- კომერციული გადაწყვეტა ლიცენზირების ხარჯებით
- ხელმისაწვდომია როგორც ღრუბლოვანი სერვისი ან თვით-ჰოსტირებული
- AWS CloudWatch Logs
- მშობლიური AWS სერვისი მჭიდრო ინტეგრაციით
- ავტომატური მასშტაბირება ინფრასტრუქტურის მართვის გარეშე
- Log Insights გამოთხოვისა და ანალიზისთვის
- ინტეგრაცია სხვა AWS სერვისებთან
- მეტრიკების ამოღება ლოგებიდან
- გადაიხადე-გამოყენებისამებრ ფასების მოდელი
- საუკეთესოა AWS-ცენტრული გარემოსთვის
- Google Cloud Logging
- მშობლიური GCP ლოგირების სერვისი
- ავტომატური მიღება GKE-დან და სხვა GCP სერვისებიდან
- Log Explorer ძებნისა და ანალიზისთვის
- Error Reporting შეცდომების ავტომატური დაჯგუფებისთვის
- ლოგებზე დაფუძნებული მეტრიკები და შეტყობინებები
- ინტეგრაცია Cloud Monitoring-თან
- იდეალურია GCP-ზე დაფუძნებული სამუშაო დატვირთვებისთვის
- Azure Monitor Logs
- მშობლიური Azure სერვისი (ყოფილი Log Analytics)
- Kusto Query Language (KQL) ლოგების ანალიზისთვის
- ინტეგრირებულია Azure Application Insights-თან
- Workbooks ინტერაქტიული რეპორტინგისთვის
- AI-ზე დაფუძნებული ანალიტიკა
- გაერთიანებულია მეტრიკებთან Azure Monitor-ში
- საუკეთესო არჩევანია Azure-ზე განთავსებული აპლიკაციებისთვის
- Loki (Grafana Loki)
- ლოგების აგრეგაციის სისტემა, რომელიც შექმნილია ხარჯების ეფექტურობისთვის
- ლეიბლებზე დაფუძნებული ინდექსირება Prometheus-ის მსგავსად
- კარგად მუშაობს არსებულ Grafana deployment-ებთან
- ნაკლები რესურსების მოთხოვნები, ვიდრე Elasticsearch
- ჰორიზონტალური მასშტაბირებადობა
- ღია კოდი კომერციული მხარდაჭერის ოფციებით
- ძლიერი ინტეგრაცია Prometheus ეკოსისტემასთან
- Datadog Logs
- SaaS პლატფორმა გაერთიანებული დაკვირვებადობით
- აერთიანებს ლოგებს, მეტრიკებსა და კვალს
- ML-ზე დაფუძნებული ანალიტიკა და ანომალიების გამოვლენა
- რეალურ დროში ლოგების დამუშავება და ფილტრაცია
- ვრცელი ინტეგრაციის კატალოგი
- თეგებზე დაფუძნებული კორელაცია სხვადასხვა მონაცემთა ტიპებს შორის
- კომერციული გადაწყვეტა სააბონენტო ფასებით
ELK სტეკის მაგალითი
Production-ისთვის მზა ELK სტეკის deployment-ი სათანადო კონფიგურაციითა და რესურსების პარამეტრებით:
სტრუქტურირებული ლოგირება
- გამოიყენეთ JSON ან სხვა სტრუქტურირებული ფორმატები
- იძლევა მანქანურად წაკითხვადი ლოგების დამუშავების საშუალებას
- ინარჩუნებს კავშირებს მონაცემთა ველებს შორის
- ამარტივებს პარსინგსა და გამოთხოვას
- ინარჩუნებს მონაცემთა ტიპებსა და იერარქიებს
- ხელს უწყობს ავტომატიზებულ ანალიზს
- ჩართეთ აუცილებელი მეტამონაცემების ველები
timestamp: ISO 8601 ფორმატი დროის სარტყლით (მაგ.,2023-07-01T12:34:56.789Z)level: სიმძიმის დონე (მაგ.,debug,info,warn,error)service: სერვისის ან კომპონენტის სახელიmessage: ადამიანისთვის წაკითხვადი აღწერაtraceId: განაწილებული კვალის იდენტიფიკატორი
- დაამატეთ კორელაციის ID-ები მოთხოვნების თვალყურის დევნებისთვის
- იძლევა მოთხოვნების თვალყურის დევნების საშუალებას მრავალ სერვისში
- ეხმარება განაწილებული სისტემის დებაგინგში
- ამარტივებს რთული სამუშაო პროცესების ანალიზს
- აუცილებელია მიკროსერვისული არქიტექტურებისთვის
- ველების მაგალითი:
requestId,correlationId,traceId,spanId
- ჩართეთ კონტექსტური ინფორმაცია
- მომხმარებლის იდენტიფიკატორები (ანონიმიზირებული საჭიროების შემთხვევაში)
- რესურსის იდენტიფიკატორები (მაგ.,
orderId,productId) - შესრულებული ოპერაცია
- წყაროს ინფორმაცია (მაგ., IP მისამართი, user agent)
- წარმადობის მეტრიკები (მაგ., ხანგრძლივობა, რესურსების გამოყენება)
- სტრუქტურირებული ლოგის ფორმატის მაგალითი:
ლოგების დონეები
- დანერგეთ სათანადო ლოგების დონეები
- DEBUG: დეტალური ინფორმაცია development/დებაგინგისთვის
- INFO: დადასტურება, რომ ყველაფერი მოსალოდნელად მუშაობს
- WARN: რაღაც მოულოდნელი, მაგრამ არა აუცილებლად შეცდომა
- ERROR: რაღაც ვერ მოხერხდა, რაც გამოსაძიებელია
- FATAL/CRITICAL: სისტემა გამოუსადეგარია, საჭიროა დაუყოვნებლივი ყურადღება
- დააკონფიგურირეთ შესაბამისი დონე თითოეული გარემოსთვის
- Development: DEBUG ან INFO მაქსიმალური ხილვადობისთვის
- Testing/QA: INFO ან WARN ხმაურის შესამცირებლად
- Production: WARN ან ERROR წარმადობაზე ზემოქმედების მინიმიზაციისთვის
- გამოიყენეთ გარემოს ცვლადები ლოგების დონეების გასაკონტროლებლად
- მაგალითი:
- უსაფრთხოების მოსაზრებები
- არასდროს დალოგოთ რწმუნებათა სიგელები, ტოკენები, ან API გასაღებები
- მოახდინეთ მგრძნობიარე პერსონალური ინფორმაციის ჰეშირება ან მასკირება
- დაიცავით შესაბამისი რეგულაციები (GDPR, CCPA, HIPAA)
- იყავით ფრთხილად stack trace-ებთან production-ში
- დანერგეთ ლოგის ველების რედაქტირება მგრძნობიარე მონაცემებისთვის
- მაგალითი:
- ჩართეთ ქმედითი ინფორმაცია შეცდომების ლოგებში
- შეცდომის ტიპი და შეტყობინება
- Stack trace (development/testing-ში)
- კონტექსტი, რომელმაც გამოიწვია შეცდომა
- მოთხოვნის პარამეტრები (გასუფთავებული)
- კორელაციის ID-ები კვალის დასადგენად
- შემოთავაზებული გადაწყვეტის ნაბიჯები, სადაც შესაძლებელია
- წარმადობის მოსაზრებები
- ლოგების მოცულობა გავლენას ახდენს სისტემის წარმადობაზე
- გამოიყენეთ ნიმუშების აღება მაღალი მოცულობის debug ლოგებისთვის
- განიხილეთ ასინქრონული ლოგირება წარმადობა-კრიტიკული გზებისთვის
- დანერგეთ circuit breaker-ები ლოგირების წარუმატებლობისთვის
- დააკვირდეთ და შეატყობინეთ ლოგების არანორმალურ მოცულობაზე ::
ჯანმრთელობის შემოწმება და მონიტორინგი
ჯანმრთელობის შემოწმება უზრუნველყოფს კონტეინერის ჯანმრთელობის სტატუსის ავტომატურ მონიტორინგს, რაც Docker-ს საშუალებას აძლევს აღმოაჩინოს და აღადგინოს აპლიკაციის გაუმართაობები.
ჯანმრთელობის შემოწმების პარამეტრები:
interval: დრო შემოწმებებს შორის (ნაგულისხმევი: 30წმ)timeout: მაქსიმალური დრო შემოწმების დასასრულებლად (ნაგულისხმევი: 30წმ)start-period: საწყისი საშეღავათო პერიოდი (ნაგულისხმევი: 0წმ)retries: ზედიზედ წარუმატებლობების რაოდენობა არაჯანსაღად ჩათვლამდე (ნაგულისხმევი: 3)
ჯანმრთელობის შემოწმების საუკეთესო პრაქტიკები:
- შექმენით შემოწმებები, რომლებიც ამოწმებენ ძირითად ფუნქციონალობას და არა მხოლოდ იმას, რომ პროცესი მუშაობს
- შეინარჩუნეთ შემოწმებები მსუბუქი, რათა თავიდან აიცილოთ რესურსების მოხმარება
- ჩართეთ სათანადო тайმაუტები, რათა თავიდან აიცილოთ ჩამოკიდებული შემოწმებები
- დააყენეთ შესაბამისი start period-ები ნელა გაშვებადი აპლიკაციებისთვის
- დანერგეთ health ენდფოინთები, რომლებიც ამოწმებენ დამოკიდებულებებს
- გამოიყენეთ გასვლის კოდები სწორად (0 = ჯანსაღი, 1 = არაჯანსაღი)
- მოერიდეთ რთულ სკრიპტებს, რომლებიც შეიძლება წარუმატებელი იყოს აპლიკაციის ჯანმრთელობასთან დაუკავშირებელი მიზეზების გამო
ჯანმრთელობის შემოწმების მდგომარეობები:
starting: start period-ის დროს, ჯერ არ ითვლება არაჯანსაღადhealthy: შემოწმება გადისunhealthy: შემოწმება ვერ ხერხდება
შეგიძლიათ შეამოწმოთ კონტეინერის ჯანმრთელობის სტატუსი:
მონიტორინგის მეტრიკები
მონიტორინგის ძირითადი მეტრიკები:
- CPU-ს გამოყენება
- საერთო გამოყენების პროცენტი
- მომხმარებლის vs. სისტემის დრო
- CPU-ს შეზღუდვის მოვლენები
- დატვირთვის საშუალო
- კონტექსტის გადართვები და შეწყვეტები
- CPU-ს გამოყენება თითოეულ ბირთვზე/ნაკადზე
- მეხსიერების მოხმარება
- RSS (Resident Set Size) - ფაქტობრივი ფიზიკური მეხსიერება
- ვირტუალური მეხსიერების ზომა
- ქეშისა და ბუფერის გამოყენება
- Heap vs. non-heap (JVM აპლიკაციებისთვის)
- მეხსიერების ლიმიტის გამოყენების პროცენტი
- OOM (მეხსიერების ამოწურვა) kill მოვლენები
- მეხსიერების გვერდის შეცდომები
- დისკის I/O
- წაკითხვის/ჩაწერის ოპერაციები წამში
- წაკითხული/ჩაწერილი ბაიტები წამში
- წაკითხვის/ჩაწერის შეყოვნება
- დისკის რიგის სიგრძე
- დისკის სივრცის გამოყენება (თითოეულ volume-ზე)
- Inode-ების გამოყენება
- ფაილური სისტემის შეცდომები
- ქსელის ტრაფიკი
- მიღებული/გადაცემული ბაიტები წამში
- მიღებული/გადაცემული პაკეტები წამში
- ქსელის შეცდომები და დაკარგული პაკეტები
- კავშირების რაოდენობა (დამყარებული, time-wait და ა.შ.)
- TCP ხელახალი გადაცემები
- DNS გამოთხოვის დრო
- ქსელის შეყოვნება
- კონტეინერის ჯანმრთელობის სტატუსი
- ჯანმრთელობის შემოწმების სტატუსი
- მუშაობის დრო/ასაკი
- გადატვირთვების რაოდენობა და მიზეზები
- Init პროცესის სტატუსი
- კონტეინერის მდგომარეობის ცვლილებები
- წინა გაშვებების გასვლის კოდები
- აპლიკაცია-სპეციფიური მეტრიკები
- მოთხოვნის სიხშირე და გამტარუნარიანობა
- პასუხის დრო (საშუალო, პროცენტილები)
- შეცდომების სიხშირე და ტიპები
- რიგის სიგრძეები და დამუშავების დრო
- ქეშის დარტყმის/გაცდენის კოეფიციენტი
- მონაცემთა ბაზის მოთხოვნების წარმადობა
- ბიზნეს KPI-ები (შეკვეთები, მომხმარებლები, კონვერსიები)
- კონტეინერის სასიცოცხლო ციკლის მეტრიკები
- კონტეინერის გადატვირთვების რაოდენობა
- კონტეინერის შექმნის/განადგურების სიხშირე
- Image-ის pull-ის დრო
- კონტეინერის გაშვების დრო
- Build-ის ხანგრძლივობა
- წარუმატებელი გაშვებები/deployment-ები
- რესურსების ორკესტრაციის მეტრიკები
- გაშვებული კონტეინერების რაოდენობა
- რესურსების განაწილება vs. გამოყენება
- დაგეგმვის წარუმატებლობები
- კვანძის ჯანმრთელობა და სიმძლავრე
- ავტომასშტაბირების მოვლენები
- Deployment-ის წარმატების კოეფიციენტი
- რესურსების განაწილების ბალანსი
Prometheus-ის კონფიგურაცია
prometheus.yml-ის მაგალითი Docker-ის ყოვლისმომცველი მონიტორინგისთვის:
შეტყობინებებისთვის, დაამატეთ AlertManager-ის კონფიგურაცია:
Grafana-ს დაფის დაყენება
ძირითადი დაყენება
- Grafana-ზე წვდომა (ნაგულისხმევი: http://localhost:3000)
- დარწმუნდით, რომ Grafana სერვისი გაშვებულია და პორტი ხელმისაწვდომია
- შეამოწმეთ ნებისმიერი პროქსი ან ქსელის შეზღუდვა
- შესვლა ნაგულისხმევი რწმუნებათა სიგელებით (admin/admin)
- პირველი შესვლისას მოგეთხოვებათ პაროლის შეცვლა
- დააყენეთ ძლიერი პაროლი და შეინახეთ უსაფრთხოდ
- განიხილეთ დამატებითი მომხმარებლების დაყენება შესაბამისი უფლებებით
- Prometheus მონაცემთა წყაროს დამატება
- გადადით Configuration > Data Sources
- დააჭირეთ "Add data source" და აირჩიეთ "Prometheus"
- დააყენეთ URL http://prometheus:9090-ზე (ან შესაბამის მისამართზე)
- დააყენეთ scrape interval Prometheus-ის კონფიგურაციის შესაბამისად
- შეამოწმეთ კავშირი, რათა დარწმუნდეთ, რომ მუშაობს
- გაფართოებული პარამეტრები:
- Docker-ის მონიტორინგის დაფების იმპორტი
- გადადით Dashboards > Import
- შეიყვანეთ დაფის ID ან ატვირთეთ JSON ფაილი
- რეკომენდებული დაფის ID-ები:
- 893: Docker-ისა და სისტემის მონიტორინგი (1 სერვერი)
- 10619: Docker-ის მონიტორინგი Prometheus-ით
- 11467: კონტეინერის მეტრიკების დაფა
- 1860: Node Exporter Full
- დაარეგულირეთ ცვლადები თქვენი გარემოს შესაბამისად
- შეინახეთ დაფა შესაბამისი სახელითა და საქაღალდით
- შეტყობინებების კონფიგურაცია
- გადადით Alerting > Alert Rules
- შექმენით შეტყობინების წესები კრიტიკულ მეტრიკებზე დაყრდნობით
- დააყენეთ შესაბამისი ზღვრები და შეფასების ინტერვალები
- დააკონფიგურირეთ შეტყობინების არხები (email, Slack, PagerDuty და ა.შ.)
- შეამოწმეთ შეტყობინებები სათანადო მიწოდების უზრუნველსაყოფად
- შეტყობინების წესის მაგალითი:
დაფის რეკომენდაციები
- Docker Host-ის მეტრიკების დაფა
- სისტემის დატვირთვა, CPU, მეხსიერება, დისკი და ქსელი
- ჰოსტის მუშაობის დრო და სტაბილურობის მეტრიკები
- Docker daemon-ის მეტრიკები
- გაშვებული კონტეინერების რაოდენობა
- რესურსების გამოყენების ტრენდები
- პანელების მაგალითი:
- CPU-ს გამოყენება კონტეინერის მიხედვით (დაწყობილი გრაფიკი)
- მეხსიერების გამოყენება კონტეინერის მიხედვით (დაწყობილი გრაფიკი)
- კონტეინერის სტატუსების რაოდენობა (stat პანელი)
- სისტემის დატვირთვა (gauge)
- დისკის სივრცის გამოყენება (წრიული დიაგრამა)
- კონტეინერის რესურსების გამოყენების დაფა
- თითოეული კონტეინერის CPU, მეხსიერებისა და I/O მეტრიკები
- კონტეინერის გადატვირთვების რაოდენობა
- ჯანმრთელობის შემოწმების სტატუსი
- ქსელის ტრაფიკი კონტეინერის მიხედვით
- ძირითადი ვიზუალიზაციები:
- კონტეინერის რესურსების გამოყენების heatmap
- დროის სერიების გრაფიკები თითოეული რესურსის ტიპისთვის
- Top N რესურსების მომხმარებლები (ცხრილი)
- კონტეინერის სასიცოცხლო ციკლის მოვლენები (ანოტაციები)
- რესურსების ლიმიტის შედარება ფაქტობრივ გამოყენებასთან
- აპლიკაცია-სპეციფიური მეტრიკების დაფები
- თქვენი აპლიკაციისთვის რელევანტური ბიზნეს KPI-ები
- მოთხოვნის სიხშირე, შეცდომების სიხშირე და შეყოვნება
- მონაცემთა ბაზის კავშირების pool-ის სტატუსი
- ქეშის დარტყმის კოეფიციენტები
- მორგებული ინსტრუმენტაციის მეტრიკები
- მომხმარებლის გამოცდილების მეტრიკები
- მაგალითი: ელექტრონული კომერციის დაფა:
- შეკვეთები წუთში
- კალათის მიტოვების კოეფიციენტი
- გადახდის დამუშავების დრო
- პროდუქტის ძებნის შეყოვნება
- აქტიური მომხმარებლის სესიები
- შეტყობინების ზღვრების ვიზუალიზაცია
- გააერთიანეთ მეტრიკები შეტყობინების ზღვრებთან
- ვიზუალური ინდიკატორები ზღვრებთან მიახლოებისთვის
- შეტყობინებების ისტორია და სიხშირე
- გადაწყვეტის საშუალო დროის თვალყურის დევნა
- შეტყობინებების კორელაცია სისტემის მოვლენებთან
- პანელის მაგალითი: გრაფიკი ფერადი ზღვრების ზოლებით
- ლოგების კორელაციის ხედები
- გაერთიანებული მეტრიკებისა და ლოგების პანელები
- შეცდომების სიხშირის კორელაცია ლოგების მოცულობასთან
- მოვლენების მარკერები დროის სერიების გრაფიკებზე
- ლოგების კონტექსტი ანომალიებისთვის
- მეტრიკებიდან ლოგებზე გადასვლა
- მაგალითი: მოთხოვნის შეყოვნების გრაფიკი შეცდომების ლოგების ჩანაწერებით, როგორც ანოტაციები
შეტყობინების კონფიგურაცია
დააკონფიგურირეთ შეტყობინებები კრიტიკული მდგომარეობებისთვის:
- კონტეინერის გადატვირთვები
- შეატყობინეთ, როდესაც კონტეინერები ძალიან ხშირად გადაიტვირთება
- თვალყური ადევნეთ ავარიულ ციკლებსა და წარუმატებლობის ნიმუშებს
- დააყენეთ ზღვრები სერვისის კრიტიკულობის მიხედვით
- კორელაცია deployment მოვლენებთან
- მოთხოვნის მაგალითი:
increase(kube_pod_container_status_restarts_total[1h]) > 3
- მაღალი რესურსების გამოყენება
- CPU-ს გამოყენება აჭარბებს ზღვრებს (მაგ., >80% 15 წუთის განმავლობაში)
- მეხსიერება უახლოვდება ლიმიტებს (მაგ., >90% ლიმიტის)
- დისკის სივრცე იწურება (მაგ., <10% თავისუფალი)
- ქსელის გაჯერება
- მოთხოვნის მაგალითი:
container_memory_usage_bytes / container_spec_memory_limit_bytes * 100 > 90
- ჯანმრთელობის შემოწმების წარუმატებლობები
- წარუმატებელი ჯანმრთელობის შემოწმებები კრიტიკული სერვისებისთვის
- გაზრდილი ჯანმრთელობის შემოწმების შეყოვნება
- პერიოდული ჯანმრთელობის შემოწმების წარუმატებლობები
- ჯანმრთელობის შემოწმების тайმაუტის სიხშირე
- მოთხოვნის მაგალითი:
rate(container_health_status_changes_total{health_status="unhealthy"}[5m]) > 0
- შეცდომების ლოგების ნიმუშები
- გაზრდილი შეცდომების სიხშირე აპლიკაციის ლოგებში
- კრიტიკული შეცდომების შეტყობინებები ან ნიმუშები
- ავთენტიფიკაციის წარუმატებლობები
- მონაცემთა ბაზის კავშირის პრობლემები
- მოთხოვნის მაგალითი:
rate(log_messages_total{level="error"}[5m]) > 10
- აპლიკაციის არანორმალური ქცევა
- მოთხოვნის შეყოვნების პიკები
- გაზრდილი შეცდომების პასუხები (HTTP 5xx)
- არანორმალური ტრაფიკის ნიმუშები
- ტრანზაქციების მოულოდნელი ვარდნა
- მონაცემთა ბაზის მოთხოვნების წარმადობის დეგრადაცია
- მოთხოვნის მაგალითი:
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) > 2
- ინფრასტრუქტურის პრობლემები
- Docker daemon-ის შეცდომები
- საცავის დრაივერის პრობლემები
- ქსელური კავშირის პრობლემები
- ჰოსტის რესურსების გამოფიტვა
- სისტემის დონის შეცდომები
- მოთხოვნის მაგალითი:
rate(docker_engine_daemon_errors_total[5m]) > 0
დებაგინგი ლოგებით
ლოგების ეფექტური ანალიზი კრიტიკულია კონტეინერის პრობლემების მოსაგვარებლად. აქ მოცემულია პრაქტიკული ტექნიკა კონტეინერის ლოგებიდან ღირებული ინფორმაციის ამოსაღებად:
გაფართოებული დებაგინგის ტექნიკა:
- ლოგების კორელაცია სისტემის მოვლენებთან (deployment-ები, მასშტაბირება და ა.შ.)
- ლოგების შედარება მრავალ კონტეინერზე განაწილებული პრობლემებისთვის
- დროის ნიშნულების გამოყენება მოვლენების თანმიმდევრობის შესაქმნელად
- კონტეინერის გარემოს ცვლადების შემოწმება კონფიგურაციის პრობლემებისთვის
- კონტეინერის გაშვების ლოგების ცალკე ანალიზი runtime ლოგებისგან
- აპლიკაციისა და ინფრასტრუქტურის ლოგების ერთდროულად მონიტორინგი
- regex ნიმუშების გამოყენება სტრუქტურირებული მონაცემების ამოსაღებად არასტრუქტურირებული ლოგებიდან
მონიტორინგის გაფართოებული თემები
განაწილებული კვალი
- დანერგეთ OpenTelemetry ან Jaeger
- თვალყური ადევნეთ მოთხოვნებს, როდესაც ისინი გადიან განაწილებულ სისტემებში
- შექმენით კვალის ID-ები ლოგების კორელაციისთვის სერვისებში
- ინსტრუმენტირება გაუკეთეთ კოდს OpenTelemetry SDK-ით
- განათავსეთ Jaeger ან Zipkin კოლექტორები
- Jaeger deployment-ის მაგალითი:
- მოთხოვნების კვალი მრავალ კონტეინერში
- გაავრცელეთ კვალის კონტექსტი სერვისებს შორის
- დააფიქსირეთ მოთხოვნის გზა მიკროსერვისებში
- ჩაწერეთ მშობელი-შვილის ურთიერთობები span-ებს შორის
- შეინახეთ baggage ელემენტები მოთხოვნის კონტექსტისთვის
- კლიენტის ინსტრუმენტაციის მაგალითი (Node.js):
- სერვისის შეყოვნების გაზომვა
- გამოთვალეთ თითოეულ სერვისში დახარჯული დრო
- დაშალეთ დამუშავების დრო ოპერაციების მიხედვით
- იდენტიფიცირეთ ნელი კომპონენტები ან დამოკიდებულებები
- შეადარეთ შეყოვნება სხვადასხვა გარემოში
- კორელაცია მოახდინეთ შეყოვნებასა და რესურსების გამოყენებას შორის
- span ატრიბუტების მაგალითი შეყოვნების ანალიზისთვის:
- ბოთლის ყელების იდენტიფიცირება
- გააანალიზეთ კრიტიკული გზა მოთხოვნის დამუშავებაში
- იპოვეთ ოპერაციები უმაღლესი შეყოვნების წვლილით
- გამოავლინეთ კონკურენციის წერტილები და რესურსების შეზღუდვები
- რაოდენობრივად შეაფასეთ გარე დამოკიდებულებების გავლენა
- კვალზე დაფუძნებული ცხელი წერტილების ანალიზის ტექნიკა
- ცხელი წერტილების დაფის მაგალითი, რომელიც აჩვენებს სერვისის შეყოვნების დაშლას
- სერვისის დამოკიდებულებების ვიზუალიზაცია
- შექმენით სერვისის დამოკიდებულების გრაფიკები
- გააანალიზეთ ტრაფიკის ნიმუშები სერვისებს შორის
- გამოთვალეთ შეცდომების სიხშირე სერვისების წყვილებს შორის
- იდენტიფიცირეთ ზედმეტი ან არასაჭირო გამოძახებები
- გამოავლინეთ წრიული დამოკიდებულებები
- ვიზუალიზაციის ინსტრუმენტების მაგალითი:
- Jaeger UI სერვისის გრაფიკი
- Grafana სერვისის გრაფიკის პანელი
- Kiali service mesh-ის ვიზუალიზაციისთვის
- მორგებული D3.js ვიზუალიზაცია
მორგებული მეტრიკები
- აპლიკაცია-სპეციფიური მეტრიკების გამოვლენა
- იდენტიფიცირეთ ძირითადი ბიზნეს და ტექნიკური მეტრიკები
- ინსტრუმენტირება გაუკეთეთ აპლიკაციის კოდს მეტრიკებით
- გამოავლინეთ მეტრიკების ენდფოინთები (/metrics)
- შექმენით მნიშვნელოვანი მეტრიკების სახელები და ლეიბლები
- დააბალანსეთ კარდინალობა და სარგებლიანობა
- მორგებული მეტრიკების მაგალითი:
- Prometheus კლიენტის ბიბლიოთეკების დანერგვა
- გამოიყენეთ ოფიციალური კლიენტის ბიბლიოთეკები ენაზე-სპეციფიური ინსტრუმენტაციისთვის
- შექმენით მრიცხველები, საზომები, ჰისტოგრამები და შეჯამებები
- დაარეგისტრირეთ მეტრიკები registry-ში
- დააყენეთ middleware სტანდარტული მეტრიკებისთვის
- დაამატეთ მორგებული ლეიბლები ფილტრაციისა და აგრეგაციისთვის
- იმპლემენტაციის მაგალითი (Python):
- მორგებული დაფების შექმნა
- შექმენით დანიშნულება-სპეციფიური ვიზუალიზაციის პანელები
- გააერთიანეთ ტექნიკური და ბიზნეს მეტრიკები
- შექმენით drill-down შესაძლებლობები
- გამოიყენეთ შესაბამისი ვიზუალიზაციის ტიპები
- დანერგეთ დინამიური ცვლადები ფილტრაციისთვის
- Grafana-ს დაფის JSON სტრუქტურის მაგალითი:
- რელევანტური ზღვრების დაყენება
- განსაზღვრეთ SLI-ები (მომსახურების დონის ინდიკატორები) და SLO-ები (მომსახურების დონის მიზნები)
- შექმენით შეტყობინების ზღვრები ბიზნეს გავლენაზე დაყრდნობით
- დანერგეთ მრავალდონიანი ზღვრები (გაფრთხილება, კრიტიკული)
- გამოიყენეთ ისტორიული მონაცემები საბაზისო ხაზების დასადგენად
- გაითვალისწინეთ ტრაფიკის ნიმუშები და სეზონურობა
- შეტყობინების ზღვრების მაგალითი:
- კორელაცია ბიზნეს მეტრიკებთან
- დააკავშირეთ ტექნიკური მეტრიკები ბიზნეს შედეგებთან
- გაზომეთ კონვერსიის გავლენა წარმადობის პრობლემებზე
- თვალყური ადევნეთ რესურსების გამოყენებასთან დაკავშირებულ ხარჯებს
- შექმენით კომპოზიტური KPI დაფები
- დანერგეთ ბიზნეს გავლენის შეფასება
- კორელაციის მოთხოვნების მაგალითი:
ავტომატიზებული პასუხები
- დანერგეთ ავტომასშტაბირება მეტრიკებზე დაყრდნობით
- დააკონფიგურირეთ ჰორიზონტალური pod-ების ავტომასშტაბირება
- გამოიყენეთ მორგებული მეტრიკები მასშტაბირების გადაწყვეტილებებისთვის
- დააყენეთ შესაბამისი cooldown პერიოდები
- დანერგეთ პროგნოზირებადი მასშტაბირება ცნობილი ნიმუშებისთვის
- შეამოწმეთ მასშტაბირების ქცევა სხვადასხვა პირობებში
- Docker Swarm სერვისის მასშტაბირების მაგალითი:
- დააკონფიგურირეთ ავტომატური აღდგენა წარუმატებელი კონტეინერებისთვის
- დააყენეთ შესაბამისი გადატვირთვის პოლიტიკები
- დანერგეთ ჯანმრთელობის შემოწმებები ზუსტი წარუმატებლობის გამოვლენისთვის
- დააკონფიგურირეთ liveness და readiness probe-ები
- დააფიქსირეთ დიაგნოსტიკური ინფორმაცია გადატვირთვამდე
- დანერგეთ circuit breaker-ები დამოკიდებული სერვისებისთვის
- Docker Compose კონფიგურაციის მაგალითი:
- შექმენით runbook-ები გავრცელებული პრობლემებისთვის
- დაადოკუმენტირეთ სტანდარტული პრობლემების მოგვარების პროცედურები
- ჩართეთ დიაგნოსტიკური ბრძანებები და მოსალოდნელი გამომავალი მონაცემები
- დაუკავშირეთ შეტყობინებები კონკრეტულ runbook-ის სექციებს
- უზრუნველყავით ესკალაციის გზები გადაუჭრელი პრობლემებისთვის
- შეინარჩუნეთ runbook-ების ვერსიების კონტროლი
- runbook-ის სტრუქტურის მაგალითი:
docker stats api-servicecurl http://api-service:8080/actuator/metrics/hikaricp.connections.usagedocker logs api-service | grep "slow query"
- შეიმუშავეთ ავტომატიზებული გამოსწორება
- დანერგეთ სკრიპტირებული პასუხები გავრცელებულ პრობლემებზე
- შექმენით თვით-აღდგენის შესაძლებლობები
- დაამატეთ circuit breaker-ები დეგრადირებული დამოკიდებულებებისთვის
- დანერგეთ კორექტული დეგრადაციის რეჟიმები
- დააბალანსეთ ავტომატიზაცია და ადამიანური ზედამხედველობა
- ავტომატიზებული გამოსწორების სკრიპტის მაგალითი:
- დააყენეთ ესკალაციის პოლიტიკები
- განსაზღვრეთ მკაფიო ესკალაციის ზღვრები
- შექმენით იარუსიანი რეაგირების გუნდები
- დანერგეთ მორიგეობის როტაციის გრაფიკები
- თვალყური ადევნეთ აღიარებისა და გადაწყვეტის საშუალო დროს
- დაადოკუმენტირეთ კომუნიკაციის პროტოკოლები
- ესკალაციის პოლიტიკის მაგალითი:
წარმადობის მონიტორინგი
ყოვლისმომცველი მონიტორინგისთვის:
- გააერთიანეთ ინფრასტრუქტურისა და აპლიკაციის მეტრიკები
- კორელაცია მოახდინეთ კონტეინერის მეტრიკებსა და აპლიკაციის წარმადობას შორის
- იდენტიფიცირეთ რესურსების შეზღუდვები, რომლებიც გავლენას ახდენს აპლიკაციის ქცევაზე
- იხილეთ სისტემისა და აპლიკაციის ჯანმრთელობა ჰოლისტურად
- შექმენით დაფები, რომლებიც აჩვენებს ორივე ფენას ერთად
- დანერგეთ თანმიმდევრული ლეიბლირება მეტრიკების ტიპებში
- დაადგინეთ წარმადობის საბაზისო ხაზები
- დააფიქსირეთ ნორმალური ქცევის ნიმუშები
- დაადოკუმენტირეთ მოსალოდნელი რესურსების გამოყენება
- შექმენით საბაზისო მეტრიკები სხვადასხვა დატვირთვის დონისთვის
- გამოიყენეთ პროცენტილები და არა მხოლოდ საშუალოები
- განაახლეთ საბაზისო ხაზები მნიშვნელოვანი ცვლილებების შემდეგ
- საბაზისო დოკუმენტის მაგალითი:
- თვალყური ადევნეთ ისტორიულ ტრენდებს
- შეინახეთ მეტრიკები შესაბამისი შენახვის პოლიტიკებით
- გააანალიზეთ სეზონური ნიმუშები და ზრდის ტრენდები
- შეადარეთ მიმდინარე წარმადობა ისტორიულ მონაცემებს
- გამოავლინეთ თანდათანობითი დეგრადაცია დროთა განმავლობაში
- კორელაცია მოახდინეთ წარმადობის ცვლილებებსა და აპლიკაციის განახლებებს შორის
- ტრენდის ანალიზის მაგალითი:
- კორელაცია მოახდინეთ ლოგებსა და მეტრიკებს შორის
- დააკავშირეთ შეცდომების პიკები ლოგების მოვლენებთან
- დაამატეთ კვალის ID-ები როგორც ლოგებს, ასევე მეტრიკებს
- გამოიყენეთ საერთო დროის ნიშნულები და იდენტიფიკატორები
- შექმენით დაკავშირებული ვიზუალიზაციები
- დანერგეთ ლოგებიდან მიღებული მეტრიკები
- კორელაციის ტექნიკის მაგალითი:
- გამოიყენეთ Grafana-ს Explore ხედი ლოგებისა და მეტრიკების გვერდიგვერდ საჩვენებლად
- დაამატეთ ლოგების ანოტაციები მეტრიკების გრაფიკებზე
- შექმენით კომპოზიტური დაფები ორივე მონაცემთა ტიპით
- გამოიყენეთ კვალის ID-ები სისტემებს შორის დასაკავშირებლად
- მონიტორინგი როგორც შიდა, ასევე გარე პერსპექტივიდან
- შიდა: რესურსების გამოყენება, კომპონენტების ჯანმრთელობა
- გარე: საბოლოო მომხმარებლის გამოცდილება, გლობალური ხელმისაწვდომობა
- Edge წარმადობა: CDN, DNS, SSL
- მესამე მხარის დამოკიდებულებები
- რეგიონალური ვარიაციები წარმადობაში
- მრავალპერსპექტივიანი მონიტორინგის მაგალითი:
- დანერგეთ სინთეზური შემოწმებები
- რეგულარულად მოახდინეთ მომხმარებლის ურთიერთქმედების სიმულაცია
- შეამოწმეთ კრიტიკული ბიზნეს სამუშაო პროცესები
- მონიტორინგი მრავალი გეოგრაფიული მდებარეობიდან
- დააყენეთ ტრანზაქციული შემოწმებები
- შეატყობინეთ ბიზნესზე მოქმედ წარუმატებლობებზე
- სინთეზური შემოწმების კონფიგურაციის მაგალითი:
საუკეთესო პრაქტიკების ჩამონათვალი
ლოგირების საუკეთესო პრაქტიკები
- ლოგირება STDOUT/STDERR-ში
- დაიცავით კონტეინერის საუკეთესო პრაქტიკები
- ჩართეთ ცენტრალიზებული შეგროვება
- მოერიდეთ ლოგ ფაილების მართვას კონტეინერებში
- მიეცით Docker-ის ლოგირების დრაივერებს ტრანსპორტის დამუშავების საშუალება
- მაგალითი: დააკონფიგურირეთ აპლიკაციები, რომ პირდაპირ დაწერონ stdout/stderr-ში და არა ლოგ ფაილებში
- გამოიყენეთ სტრუქტურირებული ლოგირების ფორმატი
- დანერგეთ JSON-ფორმატირებული ლოგები
- ჩართეთ თანმიმდევრული მეტამონაცემების ველები
- გამოიყენეთ სათანადო მონაცემთა ტიპები JSON-ში
- დაამატეთ კორელაციის ID-ები მოთხოვნების თვალყურის დევნებისთვის
- შეინარჩუნეთ სქემის თანმიმდევრულობა
- სტრუქტურირებული ლოგის მაგალითი:
- დანერგეთ ლოგების როტაცია
- დააკონფიგურირეთ ზომასა და დროზე დაფუძნებული როტაცია
- დააყენეთ შესაბამისი შენახვის პერიოდები
- შეკუმშეთ როტირებული ლოგები
- დააკვირდეთ დისკის გამოყენებას
- მოახდინეთ როტაციის კორექტული დამუშავება
- Docker-ის ლოგირების კონფიგურაციის მაგალითი:
- დააყენეთ შესაბამისი ლოგების დონეები
- გამოიყენეთ DEBUG development გარემოსთვის
- გამოიყენეთ INFO ან WARN production-ისთვის
- დაარეზერვეთ ERROR ქმედითი პრობლემებისთვის
- გახადეთ ლოგების დონეები კონფიგურირებადი runtime-ში
- გამოიყენეთ თანმიმდევრული დონის განსაზღვრებები სერვისებში
- ლოგის დონის კონფიგურაციის მაგალითი:
- დააკონფიგურირეთ ცენტრალიზებული ლოგირება
- მოახდინეთ ლოგების აგრეგაცია ყველა კონტეინერიდან
- დანერგეთ სათანადო ინდექსირება და ძებნა
- დააყენეთ ლოგების პარსინგი და ნორმალიზაცია
- დააკონფიგურირეთ წვდომის კონტროლი ლოგებისთვის
- დაადგინეთ შენახვისა და არქივირების პოლიტიკები
- EFK სტეკის დაყენების მაგალითი:
- Filebeat ან Fluentd ლოგების შესაგროვებლად
- Elasticsearch შენახვისა და ინდექსირებისთვის
- Kibana ვიზუალიზაციისა და ძებნისთვის
- Curator ინდექსის სასიცოცხლო ციკლის მართვისთვის
- მოერიდეთ მგრძნობიარე მონაცემებს ლოგებში
- დანერგეთ მონაცემთა მასკირება PII-სთვის
- არასდროს დალოგოთ რწმუნებათა სიგელები ან საიდუმლოებები
- შეამოკლეთ პოტენციურად დიდი payload-ები
- წაშალეთ მგრძნობიარე ჰედერები
- მოახდინეთ პერსონალური იდენტიფიკატორების ანონიმიზაცია
- მასკირების იმპლემენტაციის მაგალითი:
მონიტორინგის საუკეთესო პრაქტიკები
- მონიტორინგი გაუწიეთ როგორც ჰოსტს, ასევე კონტეინერებს
- თვალყური ადევნეთ ჰოსტის დონის რესურსებს (CPU, მეხსიერება, დისკი, ქსელი)
- დააკვირდეთ კონტეინერ-სპეციფიკურ მეტრიკებს
- კორელაცია მოახდინეთ კონტეინერის წარმადობასა და ჰოსტის შეზღუდვებს შორის
- დააკვირდეთ "ხმაურიანი მეზობლის" პრობლემებს
- თვალყური ადევნეთ Docker daemon-ის ჯანმრთელობას
- მონიტორინგის სტეკის მაგალითი:
- Node Exporter ჰოსტის მეტრიკებისთვის
- cAdvisor კონტეინერის მეტრიკებისთვის
- Docker daemon-ის მეტრიკების ენდფოინთი
- პროცეს-სპეციფიური მეტრიკები აპლიკაციებიდან
- დანერგეთ შეტყობინებები შესაბამისი ზღვრებით
- შექმენით მრავალდონიანი შეტყობინებები (გაფრთხილება/კრიტიკული)
- მოერიდეთ შეტყობინებების დაღლილობას სათანადო ზღვრებით
- ჩართეთ runbook-ის ბმულები შეტყობინებებში
- დააჯგუფეთ დაკავშირებული შეტყობინებები ხმაურის შესამცირებლად
- დანერგეთ შეტყობინებების დედუპლიკაცია
- შეტყობინებების კონფიგურაციის მაგალითი:
- გამოიყენეთ ვიზუალიზაციის დაფები
- შექმენით როლ-სპეციფიური დაფები
- ჩართეთ როგორც მიმოხილვის, ასევე დეტალური ხედები
- გამოიყენეთ შესაბამისი ვიზუალიზაციის ტიპები
- დანერგეთ შაბლონის ცვლადები ფილტრაციისთვის
- დააბალანსეთ ინფორმაციის სიმჭიდროვე და წაკითხვადობა
- დაფის ორგანიზაციის მაგალითი:
- აღმასრულებელი მიმოხილვა: მაღალი დონის ჯანმრთელობა და KPI-ები
- ოპერაციების დაფა: სისტემის ჯანმრთელობა და რესურსების გამოყენება
- დეველოპერის დაფა: აპლიკაციის წარმადობა და შეცდომები
- სერვის-სპეციფიური დაფები: დეტალური მეტრიკები თითოეული სერვისისთვის
- მორიგეობის დაფა: მიმდინარე შეტყობინებები და ბოლო ინციდენტები
- თვალყური ადევნეთ ბიზნეს-რელევანტურ მეტრიკებს
- დააკვირდეთ ძირითად წარმადობის ინდიკატორებს (KPI)
- შექმენით ბიზნეს-ტექნიკური კორელაციის ხედები
- გაზომეთ მომხმარებლის გამოცდილების მეტრიკები
- თვალყური ადევნეთ კონვერსიისა და ჩართულობის მეტრიკებს
- დააკვირდეთ ტრანზაქციის ღირებულებასა და მოცულობას
- ბიზნეს მეტრიკების მაგალითი:
- დანერგეთ ჯანმრთელობის შემოწმებები
- შექმენით მნიშვნელოვანი აპლიკაციის health ენდფოინთები
- შეამოწმეთ დამოკიდებულებები health probe-ებში
- დანერგეთ readiness vs. liveness გამიჯვნა
- გახადეთ health check-ები მსუბუქი
- ჩართეთ ვერსიისა და დამოკიდებულების ინფორმაცია
- ჯანმრთელობის შემოწმების ენდფოინთის მაგალითი:
- დაგეგმეთ მონიტორინგის მასშტაბირებადობა
- დააპროექტეთ კონტეინერების რაოდენობის ზრდისთვის
- დანერგეთ მეტრიკების აგრეგაცია მაღალი კარდინალობის მონაცემებისთვის
- გამოიყენეთ შესაბამისი შენახვის პოლიტიკები
- განიხილეთ რესურსების მოთხოვნები მონიტორინგის ინსტრუმენტებისთვის
- დანერგეთ ფედერაცია ფართომასშტაბიანი deployment-ებისთვის
- მასშტაბირებადობის ტექნიკის მაგალითი:
- Prometheus-ის იერარქიული ფედერაცია
- სერვისების აღმოჩენა დინამიური გარემოსთვის
- მეტრიკების აგრეგაცია და downsampling
- მეტრიკების sharding სერვისის ან namespace-ის მიხედვით
- მორგებული ჩაწერის წესები გავრცელებული მოთხოვნებისთვის