Quickstart за 5 минут

Установите Actaflow collector в Kubernetes-кластер, инструментируйте сервис и убедитесь, что метрики и трейсы видны в dashboard.

1. Предварительные требования

  • Kubernetes 1.24+ (managed или self-hosted)
  • kubectl и helm 3.10+ на рабочей машине
  • Аккаунт в Actaflow (free tier подойдёт, кредитка не нужна)
  • Хотя бы один сервис, написанный на поддерживаемом языке (см. SDK)
Внимание: если ставите в production, ознакомьтесь с SLA и политикой обработки ПДн — от этого зависит регион tenant'а.

2. Создание тенанта

В личном кабинете создайте tenant и получите API-ключ. Ключ имеет формат af_live_<64 hex>. Не коммитьте его в git — используйте Kubernetes Secret или HashiCorp Vault.

# Сохраните ключ в переменную окружения
export ACTAFLOW_API_KEY="af_live_8a3f9c1e7b2d4c6f9e8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4"

# Проверьте, что ключ рабочий
curl https://api.actaflow.tech/v2/auth/check \
  -H "x-actaflow-api-key: $ACTAFLOW_API_KEY"
# → {"tenant":"demo-prod-ru-1a","plan":"free","valid":true}

3. Установка collector'а

Добавьте helm-репозиторий и установите chart:

helm repo add actaflow https://charts.actaflow.tech
helm repo update

kubectl create namespace observability

kubectl create secret generic actaflow-api \
  --from-literal=key=$ACTAFLOW_API_KEY \
  --namespace observability

helm install actaflow-collector actaflow/collector \
  --namespace observability \
  --set cluster.name=$(hostname | cut -d. -f1) \
  --set api.secretName=actaflow-api \
  --set api.secretKey=key \
  --set region=ru-1a

Поднимется DaemonSet — по одному поду на каждую ноду. Проверьте статус:

kubectl --namespace observability get ds actaflow-collector
# NAME                    DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE
# actaflow-collector      7        7        7      7           7

kubectl --namespace observability logs ds/actaflow-collector | tail -5
# {"ts":"2026-01-08T12:42:18.234Z","level":"info","msg":"ingest ok","events":12483,"latency_ms":3.2}
# {"ts":"2026-01-08T12:42:19.001Z","level":"info","msg":"ingest ok","events":13092,"latency_ms":2.8}
# {"ts":"2026-01-08T12:42:19.768Z","level":"info","msg":"ingest ok","events":11745,"latency_ms":3.4}

4. Инструментирование сервиса

Пример для Go-сервиса. Полный список языков и опций — в SDK guide.

package main

import (
    "context"
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/attribute"
    "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
    "go.opentelemetry.io/otel/sdk/resource"
    sdktrace "go.opentelemetry.io/otel/sdk/trace"
    semconv "go.opentelemetry.io/otel/semconv/v1.24.0"
)

func initTracer() (*sdktrace.TracerProvider, error) {
    exporter, err := otlptracegrpc.New(context.Background(),
        otlptracegrpc.WithEndpoint("actaflow-collector.observability:4317"),
        otlptracegrpc.WithInsecure(),
    )
    if err != nil {
        return nil, err
    }
    res, _ := resource.New(context.Background(),
        resource.WithAttributes(
            semconv.ServiceName("payments-api"),
            semconv.ServiceVersion("1.4.2"),
            semconv.DeploymentEnvironment("production"),
        ),
    )
    tp := sdktrace.NewTracerProvider(
        sdktrace.WithBatcher(exporter),
        sdktrace.WithResource(res),
        sdktrace.WithSampler(sdktrace.ParentBased(
            sdktrace.TraceIDRatioBased(0.1),
        )),
    )
    otel.SetTracerProvider(tp)
    return tp, nil
}

func main() {
    tp, _ := initTracer()
    defer tp.Shutdown(context.Background())

    tracer := otel.Tracer("payments-api")
    ctx, span := tracer.Start(context.Background(), "process_payment")
    defer span.End()

    span.SetAttributes(attribute.String("payment.id", "pm_12345"))
    // ... бизнес-логика
}

5. Проверка в UI

Откройте dashboard. В разделе Services должен появиться payments-api в течение 30-60 секунд после первого запроса.

Кликнув по сервису, увидите:

  • Графики RPS, latency (P50/P90/P99), error rate
  • Список endpoints с автоматической группировкой
  • Связанные трейсы с распределением latency по span'ам
  • Зависимости от других сервисов (service map)

6. Первый alert

Создайте SLO-based алерт. Например: «если error rate payments-api > 1% в течение 5 минут, отправить в PagerDuty».

curl -X POST https://api.actaflow.tech/v2/alerts \
  -H "x-actaflow-api-key: $ACTAFLOW_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "name": "payments-api high error rate",
    "expr": "rate(payments_api_errors_total[5m]) / rate(payments_api_requests_total[5m]) > 0.01",
    "for": "5m",
    "labels": { "severity": "page", "team": "payments" },
    "annotations": {
      "summary": "Error rate >1% on payments-api",
      "runbook_url": "https://wiki.internal/runbooks/payments-api"
    },
    "routing": { "pagerduty": "PD-SERVICE-XYZ" }
  }'
Готово! За 5 минут вы получили сбор метрик, трейсы и алертинг. Дальше — полная документация и SDK под другие языки.