Практична спостережуваність у дії: Моніторинг розподілених систем за допомогою Elastic APM

pic

У сучасному швидко змінюваному цифровому середовищі забезпечення надійності, продуктивності та здоров’я розподілених систем є надзвичайно важливим. Сучасні архітектури, такі як мікросервіси, вносять складнощі, що вимагають більше, ніж просто традиційний моніторинг. З'являється спостережуваність (observability) — практика, яка виходить за межі метрик і надає дієві інсайти щодо внутрішнього стану системи.

Цей посібник пропонує всебічне введення в спостережуваність і моніторинг у продукційних системах, з акцентом на практичну реалізацію на прикладі розподіленої Node.js програми за допомогою Elastic APM, Elasticsearch та Kibana.

Що таке спостережуваність та моніторинг?

Спостережуваність (Observability) означає здатність розуміти внутрішній стан системи шляхом аналізу її вихідних даних — журналів, метрик та трас. Вона дозволяє командам:

  • Діагностувати проблеми продуктивності в розподілених системах.
  • Відслідковувати потоки даних, що охоплюють кілька сервісів.
  • Передбачати і запобігати збої системи.

Моніторинг (Monitoring), з іншого боку, передбачає збір і аналіз конкретних метрик або заздалегідь визначених порогів для забезпечення належної роботи системи. Вони разом допомагають командам:

  • Проактивно виявляти та усувати проблеми.
  • Покращувати надійність системи та час безперебійної роботи.
  • Забезпечувати безперервний досвід для користувачів.

Чому спостережуваність важлива в розподілених системах

Сучасні розподілені системи, такі як ті, що базуються на мікросервісах, мають природну складність:

  • Сервіси взаємодіють через мережу.
  • Збої можуть викликати каскадні помилки.
  • Налагодження вимагає роботи з численними компонентами.

Спостережуваність забезпечує:

  1. Трасування з кінця в кінець: Розуміння того, як запити проходять через систему.
  2. Контекстуальні інсайти: Комбінування журналів, метрик і трас для повної картини.
  3. Швидке усунення проблем: Точно виявляти проблеми без здогадок.

Практичний посібник: Спостережуваність в розподіленій системі Node.js

Створимо розподілену систему з двох мікросервісів на Node.js, реалізуємо спостережуваність та візуалізуємо трасування за допомогою Elastic APM, Elasticsearch та Kibana.

1. Передумови

Щоб слідувати цьому посібнику, переконайтесь, що у вас є:

  • Встановлений Node.js.
  • Встановлені Elasticsearch, Kibana та Elastic APM Server.
  • Базові знання REST API.

2. Проєктування розподіленої системи

Ми створимо два сервіси:

  1. Сервіс A: Експонує два API, один з яких викликає API в Сервісі B і обробляє відповідь.
  2. Сервіс B: Експонує два API, що виконують обробку і повертають результати.

3. Налаштування Elastic APM, Elasticsearch та Kibana

  1. Встановіть Elasticsearch, Kibana та APM Server: Дотримуйтесь офіційних інструкцій з установки для:

4. Запуск Elasticsearch, Kibana та APM Server:

# Запуск Elasticsearch   
./bin/elasticsearch   

# Запуск Kibana   
./bin/kibana   

# Запуск APM Server   
./bin/apm-server -e

5. Перевірка налаштувань: Переконайтесь, що Elasticsearch та APM Server працюють.

5.1 Доступ до Elasticsearch за адресою http://localhost:9200

pic

5.2 Доступ до Elastic APM за адресою http://localhost:8200

pic

5.3 Доступ до Kibana за адресою http://localhost:5601

pic

6.

Налаштування Сервісу A з Elastic APM

6.1 Ініціалізація Сервісу A:

mkdir service-a cd service-a npm init -y

6.2 Встановлення залежностей:

npm install express axios elastic-apm-node

6.3 Інтеграція Elastic APM:

6.3.1 Створіть файл index.js:

const apm = require("elastic-apm-node").start({  
 serviceName: "service-a",  
 serverUrl: "http://127.0.0.1:8200",  
 environment: "development",  
});  

const express = require("express");  
const axios = require("axios");  

const app = express();  


app.get("/api-a1", async (req, res) => {  
 const response = await axios.get("http://localhost:4000/api-b1");  
 res.send(`Service A API-1 completed! Response: ${response.data}`);  

});  
app.get("/api-a2", (req, res) => {  
 setTimeout(() => res.send("Service A API-2 completed!"), 1500);  
});  

app.listen(3000, () => console.log("Service A running on port 3000"));

7. Налаштування Сервісу B з Elastic APM

7.1 Ініціалізація Сервісу B:

mkdir service-b cd service-b npm init -y

7.2 Встановлення залежностей:

npm install express elastic-apm-node

7.3 Створіть файл index.js:

const apm = require("elastic-apm-node").start({  
 serviceName: "service-b",  
 serverUrl: "http://127.0.0.1:8200",  
 environment: "development",  
});  

const express = require('express');  

const app = express();  


app.get('/api-b1', (req, res) => {  
 setTimeout(() => res.send('Service B API-1 completed!'), 2000);  
});  

app.get('/api-b2', (req, res) => {  
 setTimeout(() => res.send('Service B API-2 completed!'), 1000);  
});  

app.listen(4000, () => console.log('Service B running on port 4000'));

8. Перегляд трас у Kibana

8.1 Генерація трафіку: Запустіть обидва сервіси та створіть запити за допомогою інструменту, як-от curl або Postman:

curl http://localhost:3000/api-a1  

curl http://localhost:3000/api-a2

8.2 Доступ до APM в Kibana:

  • Перейдіть до розділу APM у Kibana.

pic

  • Перегляньте карту сервісів, щоб побачити, як запити проходять між Сервісом A і Сервісом B.

pic

  • Досліджуйте трасування для детальної інформації про час виконання запитів і потенційні вузькі місця.

pic

Переваги спостережуваності в продукційних системах

  1. Проактивне виявлення проблем: Виявляйте аномалії до того, як вони переростуть у серйозні проблеми.
  2. Покращена співпраця: Спільні інсайти дозволяють командам працювати ефективніше.
  3. Оптимізована продуктивність: Розуміння вузьких місць і оптимізація використання ресурсів.
  4. Покращений досвід користувача: Забезпечте безперервну взаємодію, мінімізуючи час простою та затримки.

Висновок

Спостережуваність — це не просто інструмент; це підхід. Реалізувавши її у своїх розподілених системах і використовуючи Elastic APM, Elasticsearch та Kibana, ви зможете отримати безпрецедентні інсайти, підвищити надійність і забезпечити виняткову продуктивність. Використовуйте цей посібник як відправну точку для створення надійної системи спостережуваності та забезпечення готовності ваших систем до роботи в продукційному середовищі.

Почніть свою подорож зі спостережуваності сьогодні та розкрийте весь потенціал ваших розподілених систем!

🙏🏻 Якщо цей посібник був корисний, будь ласка, поставте лайк, прокоментуйте та поділіться! Давайте з’єднаємося в LinkedIn і обміняємося досвідом у створенні надійних продукційних систем.

Перекладено з: Practical Observability in Action: Monitoring Distributed Systems with Elastic APM

Leave a Reply

Your email address will not be published. Required fields are marked *