Chapter 6. Monitoring Distributed Systems
If a human operator needs to touch your system during normal operations, you have a bug (The definition of normal changes as your systems grow.)
SRE - хотят заниматься инженерной, а не операционной работой.
Definitions
- Monitoring - Сбор, обработка, агреггирование и отображение в реальном времени количественных показателей системы, например количество или тип http запросов, uptime системы.
 - White-box monitoring - наблюдение с помощью показателей доступных внутри системы, например http handler-ы или интерфейсы ЯП.
 - Black-box monitoring - наблюдение и проверка из вне (с точки зрения пользователя)
 - Dashboard - приложение отображающее ключевые метрики сервиса.
 - Alert - сообщения на которые должен отреагировать человек. Делятся на: tickets, email alerts, and pages.
 - Root cause - ошибка в софте или допущенная человеком, после устранение которой можно быть уверенным, что аналогиченое событие не произойдет.
 - Node and machine - взаимозаменяемые термины.
 - Push - любые изменения, производимые в ПО работающего сервиса или его конфигурации.
 
Why Monitor?
- Analyzing long-term trends
 - Comparing over time or experiment groups
 - Alerting
 - Building dashboards
 - Conducting ad hoc retrospective analysis (i.e., debugging)
 
Эффективные системы оповещения должны иметь очень хорошее отношение сигнал / шум
Symptoms Versus Causes
Причинно-следственная связь что и почему  - это то, что должна выявлять хорошо сделанная система мониторинга с максимальным соотношением сигнал / шум
| Symptom | Cause | 
|---|---|
| I’m serving HTTP 500s or 404s | Database servers are refusing connections | 
| My responses are slow | CPUs are overloaded by a bogosort, or an Ethernet cable is crimped under a rack, visible as partial packet loss | 
| Users in Antarctica aren’t receiving animated cat GIFs | Your Content Distribution Network hates scientists and felines, and thus blacklisted some client IPs | 
| Private content is world-readable | A new software push caused ACLs to be forgotten and allowed all requests | 
The Four Golden Signals
latency (время отклика), traffic (величина траффика), errors (уровень ошибок), and saturation (степень загруженности)
- время отклика - время которое требуется для выполнения запроса. Важно различать для успешных и неуспешных запросов.
 - величина траффика - величина нагрузки, которая приходится на вашу систему. Для web-приложений это запросы в секунду (rps). Может быть скорость передачи данных, количество сессий, количество транзакций.
 - уровень ошибок - количество или частота неуспешного выполнения запросов. Явно если код ответа http 5xx и неявно если 200 - но, результат неверен.
 - степень загруженности - показатель того насколько полно загружен сервис. CPU / RAM / IO / capacity и etc.
 
Key Insights
Symlinks
- on call duty - (1)
 
note
Для некоторых метрик нужно следить за хвостом (90, 95, 95 персентилем): суть если среднее время ответа на запрос x, то у 5% пользователей может быть y, который гораздо медленее
При построения правил для alert-ов нужно руководствоваться рядом рациональных вопросов.
Если сообщений слишком много и это аффектит дежрных, можно снизить SLO / отключить часть алертов (кейс Bigtable)
Необходимость грамотной системы мониторинга и оповещения легко обосновать. Такая система в первую очередь обеспечивает оповещение инженера при появлении симптомов, оставляя эвристические выводы о причинах для этапа отладки. Наблюдать за симптомами тем проще, чем выше в иерархии находится система.
Наблюдении за нагрузкой и производительностью подсистем вроде БД зачастую должно производиться на самой подсистеме.
Оповещения, отправляемые по электронной почте, не всегда эффективны и зачастую скрываются за информационным "шумом". Вместо этого для отслеживания всех существующих докритических проблем лучше пользоваться dashboard-ами, там будет видна информация, которая обычно содержится в оповещениях отправляемых по email-у. Dashboard-ы нужны для того, чтобы можно было проанализировать изменения метрики со временем.
В долгосрочной перспективе эффективная организация посменных дежурств и создание успешного продукта потребуют наличия оповещения о симптомах и приближающихся реальных проблемах. Для этого нужно установить реальные / достижимые SLO.