Инженерия надежности объекта

Контролируйте свою систему — Практическое руководство

Убедитесь, что ваша система здорова, как и вы :)

Как разработчики программного обеспечения, мы создаем и добавляем новые функции в наш продукт. По мере того, как мы добавляем новые функции и расширяем возможности нашей системы, крайне важно обеспечить стабильность и надежность нашей системы.

Очевидные вопросы.

Как мы можем гарантировать, что наша система останется здоровой и стабильной?

Как мы можем гарантировать, что производительность нашей системы не ухудшится при добавлении новых функций?

И ответ на все эти вопросы есть.

Внимательно наблюдая за нашей системой… собирая важные показатели, чтобы понять поведение нашей системы.

Базовые концепты

Что такое метрики?

Давайте разберемся на простом примере.

Когда человек чувствует себя плохо, он посещает врача. Врач измерит ему температуру тела, да? Эта температура тела является показателем, определяющим, здоров он или нет.

Точно так же нам нужны метрики для обеспечения работоспособности нашей системы. Примером таких показателей являются системные показатели, такие как использование ЦП или памяти.

В современном мире мы пытаемся сделать нашу систему как можно ближе к человеку. Это позволяет нам рассуждать о нашей системе более естественно.

Симптомы (что не работает) и причины (почему не работает)

Метрики похожи на симптомы. Они просто говорят нам, что не работает, но не говорят нам, почему это не работает.

Давайте разберемся с этой концепцией на простом примере.

Если человек плохо себя чувствует, это не обязательно означает, что у него высокая температура. У него может быть коронавирусная болезнь, а может и нет. Так что это всего лишь симптом. Врач проанализирует его и соответственно диагностирует причину.

Точно так же может быть множество причин, по которым наша система может быть нездоровой.

|===============================|===============================|
| Symptoms (what's not working) | Causes (why it's not working) |
|===============================|===============================|
| REST application is returning | Database went down or system  |
| 500 as a response code.       | went out-of-memory.           |
|-------------------------------|-------------------------------|
| Specific endpoint is slow.    | Query took too long to        |
|                               | respond.                      |
|-------------------------------|-------------------------------|
| Database is rejecting connec- | No free disk space left.      |
| tion.                         |                               |
|-------------------------------|-------------------------------|

Основной рабочий процесс

Как у нас теперь есть понимание основных понятий. Давайте посмотрим на основной рабочий процесс.

Рабочий процесс выглядит следующим образом.

  1. Во-первых, сборщик метрик будет собирать метрики из системы с учетом.
  2. Сборщик метрик будет хранить собранные метрики в базе данных.
  3. Мы можем визуализировать эти собранные показатели с помощью некоторых инструментов.
  4. Поскольку теперь у нас есть метрики в нашей базе данных, мы можем получить их и сообщить нашей команде о любых проблемах.

Технический стек, используемый для мониторинга в этом руководстве

В этом руководстве я буду использовать следующий стек технологий.

Elasticsearch + Beats + Кибана

Elasticsearch — для хранения показателей. Подробности смотрите здесь [1].

Beats — для сбора показателей. Обратите внимание, что я буду использовать только metricbeat и filebeat. Подробности смотрите здесь [2].

Kibana — для визуализации собранных метрик. Подробности смотрите здесь [3].

Наблюдатели — информируют нашу команду о любой проблеме, получая метрики из elasticsearch. Подробности смотрите здесь [4].

Список модулей, поддерживаемых metricbeat и filebeat

И Filebeat, и metricbeat поставляются с набором модулей [5][6], которые позволяют нам собирать информацию для наиболее распространенных вариантов использования. Например, если нам нравится собирать системные метрики, мы можем использовать системный модуль metricbeat [7] следующим образом.

metricbeat.modules:
- module: system
  metricsets:
    - cpu             # CPU usage
    - memory          # Memory usage
  enabled: true
  period: 10s

Точно так же, если мы хотим отслеживать журналы Nginx, мы можем использовать модуль Nginx от filebeat [8]. Я затронул эту тему в своем посте ниже.



Когда использовать filebeat и когда использовать metricbeat?

Filebeat больше занимается анализом журналов и использованием журналов в качестве метрик, например журналов apache2 или Nginx.

You may not be using logs as metrics but just for logging purpose. Filebeat would be helpful for you.

Metricbeat — это больше о метриках.

Практические примеры

  1. Мониторинг выполнения Ansible Playbook
  2. Мониторинг прерванных соединений MySQL с помощью metricbeat
  3. Мониторинг журналов Nginx
  4. Мониторинг производительности Postgres с помощью пользовательских запросов
  5. Мониторинг непрерывного архивирования и восстановления на определенный момент времени
I will keep adding more examples in this guide in the future.

Ваш отзыв важен для меня

Привет, сеть! Пожалуйста, оставьте свой отзыв об этом руководстве в разделе комментариев. Я был бы очень признателен за ваше время и вклад.

Я буду использовать ваш вклад в качестве конструктивного отзыва и соответствующим образом улучшу его.

Большое спасибо. Ждем ваших отзывов :).

Ресурсы

[1] https://www.elastic.co/what-is/elasticsearch

[2] https://www.elastic.co/beats/

[3] https://www.elastic.co/kibana/

[4] https://www.elastic.co/guide/en/kibana/current/watcher-ui.html

[5] https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html

[6] https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html

[7] https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html

[8] https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-nginx.html

Want to connect?
Facebook | LinkedIn | All-in-One