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 под другие языки.