Давайте тепер об’єднаємо наші інструменти (Zipkin, ELK, Prometheus, Grafana), щоб створити цілісну систему для спостереження за мікросервісами.
Логування запитів за допомогою ELK
ELK-стек (Elasticsearch, Logstash, Kibana) допомагає централізувати збір логів і зробити їх доступними для аналізу. Кожен мікросервіс відправляє свої логи в Logstash, а той передає логи в базу Elasticsearch. Потім через Kibana ми можемо візуалізувати і аналізувати ці дані.
Приклад налаштування логування в Spring Boot:
# application.yml
logging:
file:
name: logs/microservice.log
level:
root: INFO
logstash:
appender:
enabled: true
destination: localhost:5000 # порт Logstash
На боці Logstash налаштування виглядає так:
input {
tcp {
port => 5000
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "app-logs-%{+YYYY.MM.dd}"
}
}
І ось магія: ми бачимо всі логи зі всіх сервісів в одному місці! Помилки, запити, навіть відчуття сервісу, що в нього "болить голова".
Трасування запитів з Zipkin і Spring Cloud Sleuth
Розподілена трасування робить сервіси балакучими: тепер вони розповідають, хто їх покликав, а кого вони покликали у відповідь. Використовуючи Zipkin і Spring Cloud Sleuth, ви створюєте ланцюжок (trace) з "ключових подій" (spans), які виникають у процесі виконання одного запиту.
Приклад налаштування Sleuth і Zipkin:
spring:
sleuth:
sampler:
probability: 1.0 # 100% запитів будуть трасуватися
zipkin:
base-url: http://localhost:9411 # адреса сервісу Zipkin
Приклад трасування в коді:
@RestController
@RequestMapping("/serviceA")
public class ServiceAController {
private final RestTemplate restTemplate;
@Autowired
public ServiceAController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@GetMapping("/callB")
public String callServiceB() {
String response = restTemplate.getForObject("http://localhost:8081/serviceB/hello", String.class);
return "ServiceA -> " + response;
}
}
Тепер, дивлячись у Zipkin, ви будете бачити щасливий ланцюжок викликів і час виконання кожного з них.
Моніторинг метрик з Prometheus і Grafana
Переходимо до метрик. Вони дозволяють вимірювати стан сервісів (CPU, пам’ять, кількість запитів) або бізнес-показники (кількість успішних покупок, середня тривалість сесії).
Spring Boot Actuator вже публікує метрики, а Prometheus їх збирає. Ось як підключити Actuator для публікації метрик:
management:
endpoints:
web:
exposure:
include: '*'
metrics:
export:
prometheus:
enabled: true
Після цього ми додаємо сервіс в конфігурацію Prometheus:
# prometheus.yml
scrape_configs:
- job_name: 'service-a'
static_configs:
- targets: ['localhost:8080'] # endpoint Actuator
А через Grafana легко зробити дашборд, який перетворить сухі числа на гарні графіки.
Інтеграція всього разом: ELK + Zipkin + Prometheus + Grafana
У вас є логи, трасування, графіки метрик — все є! Як же все це працює в комплексі?
- Запит прийшов: користувач надсилає запит на ваш мікросервіс.
- Логування: кожен сервіс логує свої дії. Логи йдуть в ELK.
- Трасування: Sleuth зв’язує виклики в єдиний trace, який зберігається в Zipkin.
- Моніторинг метрик: Prometheus збирає дані про продуктивність.
- Візуалізація: Grafana показує вам загальну картину: дашборди метрик, пошуки в логах, трасування.
Приклади використання Observability у реальних системах
Великі компанії від Netflix до Uber використовують схожі підходи для спостережуваності. Наприклад:
- Netflix: активно застосовує розподілене трасування для аналізу своєї складної мікросервісної системи.
- Uber: реалізує метрики і трасування для оптимізації логістичних процесів.
- Airbnb: основний акцент на централізованому логуванні та візуалізації.
Ці інструменти роблять їхні системи стійкими, запобігаючи простоям і масштабним збоям.
Рекомендації та кращі практики
- Зосередьтесь на ключових показниках. Наприклад, успішність запитів, латентність, використання ресурсів.
- Автоматизуйте аналіз проблем. Метрики + трасування + логи повинні бути пов’язані. Якщо бачите спад в метриці, йдіть у трасування і знаходьте винуватця.
- Налаштовуйте сповіщення. Додайте алерти в Prometheus, щоб одразу дізнаватися про проблеми.
- Використовуйте профілі. Підключіть різні рівні логування для production і розробки.
Наостанок
Перед вами система, в якій Zipkin, ELK, Prometheus і Grafana працюють як єдине ціле для створення повної спостережуваності. Це не просто зручність — це обов’язковий інструмент для роботи з мікросервісами.
Ви готові справлятися навіть з найзаплутанішими проблемами у ваших системах. Так, тепер жодне раптове коло запитів не зможе вас обдурити. Ви бачите їх наскрізь. Вітаю, у вас тепер рентгенівське бачення для мікросервісів!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ