← Назад к вопросам

Что такое 4 Golden Signals в мониторинге?

2.0 Middle🔥 131 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

4 Golden Signals в мониторинге

4 Golden Signals — это четыре ключевые метрики для мониторинга состояния и производительности приложений, определённые Google в книге "Site Reliability Engineering" (SRE). Эти сигналы позволяют быстро понять здоровье системы.

1. Latency (Задержка)

Latency — время, необходимое для выполнения запроса. Это самая важная метрика для пользовательского опыта. Нужно отслеживать как успешные запросы, так и ошибки (ошибки часто быстрее, но это плохой знак).

@Service
public class UserService {
    private static final Timer latencyTimer = Timer.builder("user.service.latency")
        .description("Latency of user service calls")
        .publishPercentiles(0.5, 0.95, 0.99)
        .register(meterRegistry);
    
    public User getUser(Long id) {
        long startTime = System.currentTimeMillis();
        try {
            return repository.findById(id).orElseThrow();
        } finally {
            long duration = System.currentTimeMillis() - startTime;
            latencyTimer.record(duration, TimeUnit.MILLISECONDS);
        }
    }
}

Идеально отслеживать перцентили (p50, p95, p99), а не только среднее значение. Например, если p99 latency = 2 сек, это значит, что 1% пользователей ждёт 2+ сеунд.

2. Traffic (Трафик)

Traffic — объём запросов к приложению. Измеряется в запросах в секунду (RPS — Requests Per Second) или количестве обработанных данных (Bytes/sec для сетевых сервисов).

@RestController
@RequestMapping("/api/v1/users")
public class UserController {
    private final MeterRegistry meterRegistry;
    
    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
        meterRegistry.counter("api.requests.total", 
            "endpoint", "/users/{id}", 
            "method", "GET").increment();
        
        User user = userService.getUser(id);
        return ResponseEntity.ok(new UserDto(user));
    }
}

Эта метрика важна для:

  • Обнаружения необычных паттернов трафика
  • Планирования ёмкости (capacity planning)
  • Корреляции с другими метриками (например, увеличение трафика → увеличение latency)

3. Errors (Ошибки)

Errors — доля запросов, завершившихся ошибкой (5xx, 4xx, таймауты, исключения). Обычно выражается в процентах от всех запросов или абсолютном количестве ошибок в секунду.

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(NotFoundException.class)
    public ResponseEntity<ErrorResponse> handleNotFound(
            NotFoundException ex, 
            HttpServletRequest request) {
        
        meterRegistry.counter("api.errors.total",
            "status", "404",
            "endpoint", request.getRequestURI()).increment();
        
        return ResponseEntity
            .status(HttpStatus.NOT_FOUND)
            .body(new ErrorResponse(ex.getMessage()));
    }
    
    @ExceptionHandler(RuntimeException.class)
    public ResponseEntity<ErrorResponse> handleServerError(
            RuntimeException ex,
            HttpServletRequest request) {
        
        meterRegistry.counter("api.errors.total",
            "status", "500",
            "endpoint", request.getRequestURI()).increment();
        
        return ResponseEntity
            .status(HttpStatus.INTERNAL_SERVER_ERROR)
            .body(new ErrorResponse("Internal server error"));
    }
}

Важно различать:

  • Явные ошибки — 5xx HTTP статусы
  • Молчаливые ошибки — неправильные результаты, которые выглядят как успех
  • Таймауты — часто признак проблемы с зависимостями

4. Saturation (Насыщение)

Saturation — показатель того, насколько полно используются ресурсы системы. Это может быть:

  • CPU utilization — используется ли процессор на полную?
  • Memory usage — сколько RAM занято?
  • Disk I/O — диск работает на пределе?
  • Database connections — все ли соединения в пуле используются?
  • Queue length — очередь задач растёт?
@Configuration
public class MetricsConfiguration {
    @Bean
    public MeterBinder jvmMetrics() {
        return (registry) -> {
            // CPU метрики
            Gauge.builder("jvm.cpu.usage", 
                () -> ManagementFactory.getOperatingSystemMXBean().getProcessCpuLoad())
                .register(registry);
            
            // Memory метрики
            MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
            Gauge.builder("jvm.memory.used",
                () -> memoryBean.getHeapMemoryUsage().getUsed())
                .register(registry);
            
            Gauge.builder("jvm.memory.max",
                () -> memoryBean.getHeapMemoryUsage().getMax())
                .register(registry);
        };
    }
}

Важная деталь: насыщение часто показывает, когда система приближается к своему пределу. Если saturation = 100%, это означает, что система уже не может обрабатывать больше запросов — latency резко возрастёт.

Практическое применение

В реальной системе мониторят все 4 сигнала вместе:

// Пример: диаграмма для визуализации в Grafana
// - Latency (p95, p99): выше, чем обычно? → проблема с обработкой
// - Traffic: выше, чем обычно? → ddos или легитимный всплеск?
// - Errors: выше 0.1%? → что сломалось?
// - Saturation: CPU > 80%, Memory > 85%? → нужны ресурсы

Инструменты

Prometheus + Grafana — стандартный стек для сбора и визуализации этих метрик:

  • Prometheus собирает метрики через /actuator/prometheus в Spring Boot
  • Grafana строит красивые дашборды
  • AlertManager отправляет алерты при нарушении порогов
# prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: java-app
    static_configs:
      - targets: [localhost:8080]
    metrics_path: /actuator/prometheus

Понимание 4 Golden Signals — это основа для построения надёжных и наблюдаемых систем. Они помогают быстро найти коренную причину проблемы и предотвратить неполадки до того, как они затронут пользователей.

Что такое 4 Golden Signals в мониторинге? | PrepBro