A Kubernetes metrics collector for monitoring cluster state and resources. Provides Prometheus-compatible metrics for various aspects of your Kubernetes infrastructure.
- Modular Collector Architecture: Enable only the collectors you need
- DaemonSet Deployment: Runs on every node for comprehensive monitoring
- Leader Election Support: Cluster-level collectors use leader election to avoid duplicate metrics
- Hot Configuration Reload: Update configuration without pod restarts
- Prometheus Integration: Native Prometheus metrics format with ServiceMonitor support
- VictoriaMetrics Support: VMServiceScrape integration for VictoriaMetrics users
| Collector | Description | Leader Election |
|---|---|---|
domain |
Domain health and certificate monitoring | Yes |
node |
Kubernetes node metrics | Yes |
imagepull |
Container image pull performance tracking | Yes |
zombie |
Zombie process detection | Yes |
cloudbalance |
Cloud provider account balance monitoring | Yes |
lvm |
LVM storage metrics (node-level) | No |
# Add the Helm repository (if available)
helm repo add sealos-state-metrics https://charts.sealos.io
helm repo update
# Install with default configuration (LVM collector enabled)
helm install state-metrics sealos-state-metrics/state-metrics \
--namespace monitoring \
--create-namespace
# Install with custom collectors
helm install state-metrics sealos-state-metrics/state-metrics \
--namespace monitoring \
--create-namespace \
--set enabledCollectors={domain,node,lvm}# Clone the repository
git clone https://github.com/labring/sealos-state-metrics.git
cd sealos-state-metrics
# Install using local Helm chart
helm install sealos-state-metrics ./deploy/charts/sealos-state-metrics \
--namespace monitoring \
--create-namespace \
--set enabledCollectors={lvm}Edit values.yaml or use --set flags:
# Enable collectors
enabledCollectors:
- domain
- node
- lvm
# Leader election (for cluster-level collectors)
leaderElection:
enabled: true
namespace: ""
leaseName: "sealos-state-metrics"
leaseDuration: "15s"
# Metrics namespace (optional prefix for all metrics)
config:
metrics:
namespace: "" # Set to "sealos" for sealos_* prefixed metrics
# Logging
config:
logging:
level: "info"
format: "json"collectors:
domain:
domains:
- example.com
- api.example.com
checkTimeout: "5s"
checkInterval: "5m"
includeCertCheck: true
includeHTTPCheck: true
lvm:
updateInterval: "10s"
cloudbalance:
checkInterval: "5m"
accounts:
- provider: "aliyun"
accessKeyId: "xxx"
accessKeySecret: "yyy"resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 50m
memory: 64MiEnable ServiceMonitor:
serviceMonitor:
enabled: true
namespace: monitoring
interval: 30s
scrapeTimeout: 10sEnable VMServiceScrape:
vmServiceScrape:
enabled: true
namespace: monitoring
interval: 30s
scrapeTimeout: 10sscrape_configs:
- job_name: 'sealos-state-metrics'
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- monitoring
relabel_configs:
- source_labels: [__meta_kubernetes_service_name]
action: keep
regex: sealos-state-metricslvm_vgs_total_capacity{instance="node-1",node="node-1"} 6.72149798912e+11
lvm_vgs_total_free{instance="node-1",node="node-1"} 0
state_metric_collector_duration_seconds{collector="lvm",instance="node-1"} 1.0861e-05
state_metric_collector_success{collector="lvm",instance="node-1"} 1
# Build binary
make build
# Build Docker image
make docker-build
# Run tests
make test
# Run linters
make lint- Create a new package under
pkg/collector/<name>/ - Implement the
Collectorinterface - Register in
pkg/collector/all/all.go - Add configuration to
values.yaml - Update documentation
- DaemonSet Deployment: All collectors run as a DaemonSet across the cluster
- Leader Election: Cluster-level collectors (domain, node, etc.) use leader election to ensure only one instance actively collects metrics
- Node-Level Collectors: Collectors like LVM run on each node independently without leader election
- Identity System: Each pod uses NODE_NAME as its identity for proper metric labeling
- Hot Reload: Configuration changes trigger graceful reloads without downtime
kubectl get pods -n monitoring -l app.kubernetes.io/name=sealos-state-metricskubectl logs -n monitoring -l app.kubernetes.io/name=sealos-state-metrics --tail=100kubectl port-forward -n monitoring svc/sealos-state-metrics 9090:9090
curl http://localhost:9090/metricskubectl get lease -n monitoring sealos-state-metrics -o yamlLicensed under the Apache License, Version 2.0. See LICENSE for details.
- Issues: GitHub Issues
- Community: Sealos Community