https://github.com/paypal/load-watcher
Load watcher is a cluster-wide aggregator of metrics, developed for Trimaran: Real Load Aware Scheduler in Kubernetes.
https://github.com/paypal/load-watcher
Last synced: about 1 year ago
JSON representation
Load watcher is a cluster-wide aggregator of metrics, developed for Trimaran: Real Load Aware Scheduler in Kubernetes.
- Host: GitHub
- URL: https://github.com/paypal/load-watcher
- Owner: paypal
- License: other
- Created: 2020-11-06T04:16:10.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-12-19T18:55:53.000Z (over 1 year ago)
- Last Synced: 2025-05-24T08:03:13.394Z (about 1 year ago)
- Language: Go
- Homepage:
- Size: 158 KB
- Stars: 74
- Watchers: 10
- Forks: 36
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
# Load Watcher [](https://pkg.go.dev/github.com/paypal/load-watcher)  [](https://github-tools.github.io/github-release-notes/)
The load watcher is responsible for the cluster-wide aggregation of resource usage metrics like CPU, memory, network, and IO stats over time windows from a metrics provider like SignalFx, Prometheus, Kubernetes Metrics Server etc. developed for [Trimaran: Real Load Aware Scheduling](https://github.com/kubernetes-sigs/scheduler-plugins/blob/master/kep/61-Trimaran-real-load-aware-scheduling/README.md) in Kubernetes.
It stores the metrics in its local cache, which can be queried from scheduler plugins.
The following metrics provider clients are currently supported:
1) SignalFx
2) Kubernetes Metrics Server
3) Prometheus
These clients fetch CPU usage currently, support for other resources will be added later as needed.
# Tutorial
This tutorial will guide you to build load watcher Docker image, which can be deployed to work with Trimaran scheduler plugins.
The default `main.go` is configured to watch Kubernetes Metrics Server.
You can change this to any available metrics provider in `pkg/metricsprovider`.
To build a client for new metrics provider, you will need to implement `FetcherClient` interface.
From the root folder, run the following commands to build docker image of load watcher, tag it and push to your docker repository:
```
docker build -t load-watcher: .
docker tag load-watcher: :
docker push
```
Note that load watcher runs on default port 2020. Once deployed, you can use the following API to read watcher metrics:
```
GET /watcher
```
This will return metrics for all nodes. A query parameter to filter by host can be added with `host`.
## Metrics Provider Configuration
- By default Kubernetes Metrics Server client is configured. Set `KUBE_CONFIG` env var to your kubernetes client configuration file path if running out of cluster.
- To use the Prometheus client, please configure environment variables `METRICS_PROVIDER_NAME`, `METRICS_PROVIDER_ADDRESS` and `METRICS_PROVIDER_TOKEN` to `Prometheus`, Prometheus address and auth token. Please do not set `METRICS_PROVIDER_TOKEN` if no authentication
is needed to access the Prometheus APIs. Default value of address set is `http://prometheus-k8s:9090` for Prometheus client.
- To use the SignalFx client, please configure environment variables `METRICS_PROVIDER_NAME`, `METRICS_PROVIDER_ADDRESS` and `METRICS_PROVIDER_TOKEN` to `SignalFx`, SignalFx address and auth token respectively. Default value of address set is `https://api.signalfx.com` for SignalFx client.
## Deploy `load-watcher` as a service
To deploy `load-watcher` as a monitoring service in your Kubernetes cluster, you should replace the values in the `[]` with your own cluster monitoring stack and then you can run the following.
```bash
> kubectl create -f manifests/load-watcher-deployment.yaml
```
## Using `load-watcher` client
- `load-watcher-client.go` shows an example to use `load-watcher` packages as libraries in a client mode. When `load-watcher` is running as a
service exposing an endpoint in a cluster, a client, such as Trimaran plugins, can use its libraries to create a client getting the latest metrics.