Команда разработчиков языка программирования Swift представила Swift System Metrics 1.0 — инструмент для сбора системных метрик в серверных Swift-приложениях. Утилита доступна для macOS и Linux.

Визуализация данных Swift System Metrics в Grafana
Визуализация данных Swift System Metrics в Grafana

Swift System Metrics собирает базовые метрики процесса, включая нагрузку на CPU, потребление памяти, количество открытых файловых дескрипторов, установленный лимит файловых дескрипторов и время работы процесса. Авторы проекта отмечают, что этого набора метрик хватает для анализа производительности сервисов и потребления ресурсов.

Инструмент встраивается в экосистему Swift и передаёт собранные данные в Swift Metrics — общий API для работы с метриками. Благодаря этому разработчики могут экспортировать данные в сторонние системы визуализации и мониторинга, например, в Grafana, Prometheus и OpenTelemetry.

Для работы со Swift System Metrics надо сперва добавить зависимость в Package.swift и target:

  • .package(url: "https://github.com/apple/swift-system-metrics", from: "1.0.0");

  • .product(name: "SystemMetrics", package: "swift-system-metrics").

После этого инструмент можно экспортировать и использовать в коде проекта:

import SystemMetrics
import ServiceLifecycle
import Logging
import OTel

@main
struct Application {
  static func main() async throws {
    // Create a logger, or use one of the existing loggers
    let logger = Logger(label: "Application")

    // Setup MetricsSystem, for example using swift-otel
    var otelConfig = OTel.Configuration.default
    otelConfig.serviceName = "Application"
    let otelService = try OTel.bootstrap(configuration: otelConfig)

    // Setup your service
    let service = FooService()

    // Create the monitor
    let systemMetricsMonitor = SystemMetricsMonitor(logger: logger)

    // Create the service
    let serviceGroup = ServiceGroup(
      services: [otelService, service, systemMetricsMonitor],
      gracefulShutdownSignals: [.sigint],
      cancellationSignals: [.sigterm],
      logger: logger
    )

    try await serviceGroup.run()
  }
}

Код Swift System Metrics опубликован на GitHub, а документация — на портале для разработчиков.