Ефективний моніторинг IT-інфраструктури: як застосувати Zabbix, AWS EC2, Python і PagerDuty

Усі статті, обговорення, новини про DevOps — в одному місці. Підписуйтеся на DOU | DevOps!

Бажаю здоров’я, шановне панство. Мене звати Віктор, я працюю Java/DevOps інженером в аутстаф-компанії. Клієнт — американська продуктова компанія. Також з лютого 2022 року я служу капеланом від ГО ХСП, спочатку у Києві, а потім, здійснивши 11 місій на лінію зіткнення.

Це буде моя перша стаття з початку повномасштабного вторгнення не на військову тематику. Тільки мій досвід та міркування. Я не хочу вдавати, що я усе знаю, тому в коментарях ділиться своїм досвідом та думками.

Починав я писати цю статтю в травні на лінії зіткнення, продовжував під час масованих атак ракетами по Києву, а завершую на початку нашого контрнаступу. Якщо вам цікава військова тематика, в мене є багато статей про Бахмут та інші міста, де я служив, чим можу своїм побратимам, як капелан, та допомагав боронити нашу країну як простий воїн. Коли я на фронті, я там завжди добровільно.

Про все, з чим я стикаюся на фронті, включаючи обстріли та бойову роботу, я пишу в свій tg-канал — Gideon_IT. Завітайте. Якщо не сподобається контент — відпишетесь.

Вступ

Сьогодні хочу розповісти про свій досвід роботи с Zabbix, AWS EC2, Python, Grafana та PagerDuty в нашій системі моніторингу. Є ще CloudWatch. Його використовуємо для моніторингу K8S Nodes (CPU Unilization, Memory Usage, etc.).

Цей комплексний набір інструментів для моніторингу та управління нашими ресурсами дозволяє нам виявляти та швидко реагувати на проблеми.

Workflow діаграма

Zabbix та Grafana: інструменти моніторингу

Zabbix, Grafana і Prometheus — це потужні інструменти для моніторингу ІТ-інфраструктур. Проте, вони мають різні функціональності і використовуються для різних цілей.

Zabbix — це всеохопна система моніторингу, яка містить в собі як збір даних, так і їх візуалізацію. Написано на PHP. Працює у св’язці zabbix_agent + zabbix_server. За допомогою Zabbix можна стежити за різними параметрами IT-інфраструктури: від роботи серверів та мереж — до додатків і сервісів.

Він дозволяє налаштувати сповіщення про проблеми та автоматизувати відповіді на них. Величезний мінус Zabbix — це максимальний таймаут в 30 секунд. Якщо твій скрипт раниться довше (а так буває), то доводиться використовувати cron job і потім вже іншим скриптом чекати результат. Це біль. Зручніше було б мати один скрипт, без cron job.

Prometheus — це система моніторингу та оповіщень відкритого коду, яка зосереджена на моніторингу середовищ контейнеризації, таких як Kubernetes. Prometheus особливо добре підходить для моніторингу метрик у реальному часі і використовує мову запитів PromQL для аналізу даних. Його ми використовуємо для тих сервісів, що крутяться в Kubernetes.

Grafana — це інструмент для візуалізації даних, який може інтегруватися з різними базами даних і системами моніторингу, включаючи і Zabbix, і Prometheus. За його допомогою можна створювати красиві інтерактивні дашборди для аналізу даних. Цікавий факт про Grafana: якщо ти хочеш використовувати Alerts, то маєш створювати graph. Інші репрезентації метрик не підтримують Alerts. Це не дуже зручно, я вважаю.

Цікаво й зручно ще раз окремо передивитись та порівняти основні відмінності між цими інструментами:

  1. Zabbix — це універсальний інструмент для моніторингу, який містить в собі як збір, так і візуалізацію даних, а ще — сповіщення про проблеми.
  2. Prometheus в основному зосереджений на моніторингу метрик в реальному часі в середовищах контейнеризації, і використовує спеціальну мову запитів для аналізу даних.
  3. Grafana — це інструмент для візуалізації, який інтегрується з різними системами моніторингу і базами даних, і дозволяє створювати інтерактивні дашборди для аналізу даних.

Центром нашої системи моніторингу є Zabbix. Чому саме Zabbix — спитаєте ви?

Це відкрите рішення, повністю безкоштовне, яке ми використовуємо для відстеження всіх аспектів нашої інфраструктури, включно з legacy, метрики котрих дуже зручно інтегрувати в Zabbix.

Завдяки величезній гнучкості та масштабованості, Zabbix дозволяє нам стежити за різними процесами в режимі реального часу, реагуючи на можливі проблеми або відхилення від норми.

Наприклад, в нас є java-процесор (реально, їх більш як десять), роботу котрого ми відслідковуємо. Додаючи метрики з нього в граф Zabbix, на дашборді дуже просто відслідкувати так звані outages.

Для візуалізації даних на рівні Kubernetes (K8s) ми використовуємо Prometheus + Grafana. Це надає нашій команді можливість швидко ідентифікувати потенційні проблеми та слабкі місця наших сервісів, котрі крутяться в кубері.

Можливо, в майбутньому ми будемо використовувати Zabbix Sever + Prometheus + Grafana, але поки що функціонал Grafana не покриває повністю наші потреби.

Python-скрипти як частина моніторингу

Наші сервера розгорнуті на AWS (Ubuntu, Centos). Один з них — це сервер моніторінгу на Centos, де ми крутимо наші bash та Python-скрипти за допомогою cron jobs. Ці скрипти виконують декілька ключових завдань, таких як запуск процесів (subprocess) з jar-файлом (симулятором роботи нашої панелі) та аргументами командного рядка.

Вони стежать за успішними або невдалими виконаннями, записуючи в файл відповідні значення: одиницю, у випадку успіху, або нуль — у випадку невдачі.

Далі, інший Python-скрипт перевіряє цей файл та повертає результат. Всі ці дані потім передаються Zabbix-агентом наверх в дашборд.

Є скрипти, котрі виконують запити в БД і повертають результат. Наприклад, актуальну кількість офлайн-акаунтів. Для підключення до БД використовуємо mysql_config_editor.

З останнього

Мені треба було написати два скрипти. Один для маніпуляцій з даними в базі, інший для перевірки inbox-повідомлень в Gmail (тут ми використовуємо GSuit. Має прилетіти лист). Але зараз Google забороняє будь-який доступ до пошти, якщо тебе не авторизовано через їхнє API.

Мені потрібно було встановити gcloud на Centos, авторизуватись — і потім за допомогою цих credentials та токену від Google ранити скрипт.

PagerDuty

Для нотифікацій про outages та інші issues ми використовуємо PagerDuty. За допомогою відповідної конфігурації в Zabbix, якщо відбуваються три невдачі протягом останніх 15 хвилин, система автоматично відправляє сповіщення через PagerDuty. Цей сервіс гарантує, що наша команда одразу ж отримає повідомлення про проблему.

У нас є три рівні відповідальності, які забезпечують надійне та ефективне розв’язання будь-яких проблем. Якщо перший рівень не відгукнувся або не зміг вирішити проблему, сповіщення переходить на наступний рівень.

Висновок

Наша система моніторингу є комплексною та гнучкою, здатна адаптуватися до швидко змінюваних умов роботи. Використовуючи Zabbix, AWS EC2, Python, PagerDuty та Grafana, ми забезпечуємо надійність та ефективність нашої інфраструктури. А це все разом дозволяє нам завжди бути впевненими у якості сервісів.

👍ПодобаєтьсяСподобалось5
До обраногоВ обраному3
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

тема гарна, реалізація напевно недорого і для маленького проекту де не передюачається росту ок ;-).

Але підтримувати аж три моніторінгові продукти (мало того самому їх інсталювати і адмінити) — то треба мати багато часу/людей. А ще ж про логи ні слова і про трейси (видізе ELK і який небудь Jeager/Zipkin) разом буде 5 різних рішень).
Якщр вже є клауд (тобто оточення це не 100% он-преміс де потрібно все своє) чому би не скористатись SaaS типу DataDog/NewRelic а на клієнтах/інфраструктурі OpenTelemetry інструментацію яка закриє всі 3 стовби обсервабіліті (метрики/логи/трейси)?

звучить як план!

Є ще CloudWatch. Його використовуємо для моніторингу K8S Nodes (CPU Unilization, Memory Usage, etc.).

А чего не пром + нод експортёр?

Ефективний моніторинг
Zabbix

господи, наче нам війни замало
знову це ... мамонту, яке метрики зберігає в SQL,
а для більш молодіжного вигляду пропонує альтернативу
у вигляді качок NoSQL, який насправді є просто обгорткою над SQL-базою і з якою не весь функціонал навіть працює

капелан

господи, нащо ти то власними руками робиш?

Цікавий факт про Grafana: якщо ти хочеш використовувати Alerts, то маєш створювати graph. Інші репрезентації метрик не підтримують Alerts.

Grafana legacy alerting (dashboard alerts) has been deprecated since Grafana v9.0
grafana.com/...​/grafana/latest/alerting
www.youtube.com/watch?v=qA6RSB4Uxto

Не згадуй Боже імʼя всує ✊

Прочитав про Grafana alerting і не міг спокійно пройти.

Було потрібно зробити alerting через графану для cloudwatch метрик (Aurora,AmazonMQ,DocumentDB,ElastiCache, etc). Так как вся інфра, провіженінг та будь-які об’єкти зберігаються як код то спробував відтворити це тут, особливо враховуючи що графана вміє в file provisioning.

Саммарі (це Grafana 10 якщо шо):
— не вміє робити автоматичний reload якщо оновилась configmap с provisioned alerting об’єктами. Треба або рестартувати под, або робити reload через API, дуже зручно (ніт)
— не вміє видаляти деякі provisioned об’єкти (можливо всі). Якщо створив template для умовного slack а потім захотів це видалити з configmap то воно так не працює, треба не просто видалити цей об’єкт з configmap, треба й ще в configmap прописати відповідні інструкції щоб графана видалила саме цей об’єкт (ну або дропнути pvc, якщо графана раниться як sts)
— немає зручних CRD під будь-яку конфігурацію. Наприклад prom-operator має PrometheusRule. Був запит від community зробити щось схоже на GrafanaAlertRule ще о 2021, але немає цього.
— самі алерти виглядяють дуже не юзер френдлі. Умовний alert для Prom/Alertmanager займає ~ 8-10 рядків yaml. Alert для графани може займати ~120-130.

А ще вони радять робити провіженінг цих об’єктів через терраформ.

це Grafana 10 якщо шо

через два тижня після релізу, чи ще — до?
там management with as code automation заявлений як Public preview якщо шо

а автор, якщо шо, використовує навпаки якусь стару версію графани, та механізм алертінгу — який вже давно deprecated
про це був мій месседж

Так, почав робити ще на 9.х але змінив версію як офіційно вийшла 10.

Так, я зрозумів що було у автора, там скоріш за все взагалі був класичний ClickOps по метриках на дашбордах. Але побачив комент про алертінг та зловив флешбек і вирішив написати про свій досвід.

і вирішив написати про свій досвід

то може краще власну статю?
це я так «на слабо» пробую взяти ;-)

Підписатись на коментарі