Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:SeldonIO Seldon core Hodometer Collect

From Leeroopedia
Knowledge Sources
Domains Observability, Metrics_Collection, Usage_Telemetry
Last Updated 2026-02-13 14:00 GMT

Overview

Concrete tool for collecting usage metrics from Seldon Core 2 scheduler and Kubernetes cluster provided by the Hodometer package.

Description

The SeldonCoreCollector struct implements the Collector interface and gathers usage metrics by concurrently querying the Seldon Core 2 scheduler gRPC API and the Kubernetes API. It collects Kubernetes version information, scheduler version, and counts of active experiments, pipelines, servers (with replica and memory details), and models. Metrics are tiered by MetricsLevel (cluster, resource, feature) so that different levels of detail can be gathered depending on configuration.

The collector establishes a gRPC connection to the scheduler with configurable TLS support and retry logic via exponential backoff. It also creates a Kubernetes clientset from in-cluster config for querying the K8s API server.

Usage

Use this collector when running the Hodometer component to periodically gather anonymous usage telemetry about a Seldon Core 2 deployment. The collector is instantiated once at startup and invoked on each collection cycle by the Punctuator.

Code Reference

Source Location

Signature

type Collector interface {
    Collect(ctx context.Context, level MetricsLevel) *UsageMetrics
}

type SeldonCoreCollector struct {
    schedulerClient  scheduler.SchedulerClient
    k8sClient        kubernetes.Interface
    logger           logrus.FieldLogger
    clusterId        string
    certificateStore *seldontls.CertificateStore
}

func NewSeldonCoreCollector(
    logger logrus.FieldLogger,
    schedulerHost string,
    schedulerPlaintxtPort uint,
    schedulerTlsPort uint,
    clusterId string,
    tlsOptions *seldontls.TLSOptions,
) (*SeldonCoreCollector, error)

func (scc *SeldonCoreCollector) Collect(
    ctx context.Context,
    level MetricsLevel,
) *UsageMetrics

Import

import "github.com/seldonio/seldon-core/hodometer/pkg/hodometer"

I/O Contract

Inputs

Name Type Required Description
logger logrus.FieldLogger Yes Structured logger for operational output
schedulerHost string Yes Hostname of the Seldon Core scheduler gRPC endpoint
schedulerPlaintxtPort uint Yes Plain-text gRPC port for the scheduler
schedulerTlsPort uint Yes TLS gRPC port for the scheduler
clusterId string Yes UUID identifying the cluster (auto-generated if invalid)
tlsOptions *seldontls.TLSOptions Yes TLS configuration (nil cert means plaintext)
ctx context.Context Yes Context for cancellation and timeouts during collection
level MetricsLevel Yes Granularity level for collected metrics (cluster, resource, feature)

Outputs

Name Type Description
*UsageMetrics *hodometer.UsageMetrics Aggregated usage metrics struct containing cluster, resource, and feature metrics
error error Returned by NewSeldonCoreCollector if gRPC connection fails

Usage Examples

Creating and Using a Collector

package main

import (
    "context"
    "github.com/sirupsen/logrus"
    "github.com/seldonio/seldon-core/hodometer/pkg/hodometer"
    seldontls "github.com/seldonio/seldon-core/components/tls/v2/pkg/tls"
)

func main() {
    logger := logrus.New()

    tlsOpts := &seldontls.TLSOptions{} // plaintext mode

    collector, err := hodometer.NewSeldonCoreCollector(
        logger,
        "seldon-scheduler",  // schedulerHost
        9004,                // schedulerPlaintxtPort
        9044,                // schedulerTlsPort
        "",                  // clusterId (auto-generated)
        tlsOpts,
    )
    if err != nil {
        logger.Fatalf("failed to create collector: %v", err)
    }

    ctx := context.Background()
    metrics := collector.Collect(ctx, hodometer.MetricsLevelFeature)

    logger.Infof("Cluster: %s, Models: %d, Pipelines: %d",
        metrics.ClusterId,
        metrics.ResourceMetrics.ModelCount,
        metrics.ResourceMetrics.PipelineCount,
    )
}

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment