/starship

Starship: next-generation Observability platform built with eBPF+WASM

Primary LanguageGoGNU Affero General Public License v3.0AGPL-3.0

Starship Starship Stars

image image

🖖 Starship 🪐 is a next-generation Observability platform built on 🐝 eBPF➕WASM image

🚀 Starship is to modern Observability on Kubernetes platform, as ChatGPT is to consumer knownledge discovery. 🐝 eBPF enables instrumentation-free data collection, and image WASM complements eBPF's inability to perform complex data processing.

Starship is developed by Tricorder Observability, proudly supported by MiraclePlus and the Open Source community.

Bazel build and test Lint Code Base Additional lint

Twitter URL Slack Badge

Get Started

☸️ Helm-charts, install Starship on your Kubernetes cluster with helm.

🤿 Before diving into the code base:

  • Starship is built for Kubernetes platform. Starship provides all things you'll need to get started with Zero-Cost (or Zero-Friction) Observability.
  • Starship provides Service Map, the most valuable information for understanding Cloud Native applications, and numerous other data, analytic, and visualization capabilities to satisfy the full spectrum of your needs in running and managing Cloud Native applications on Kubernetes.
  • The core of starship is the tricorder agent, which runs data collection modules written in your favorite language, and are executed in eBPF+WASM. You can write your own modules in C/C++ (Go, Rust, and more languages are coming).

Tricorder is working on supporting all major frontend languages of writing eBPF programs, including:

Additionally, libbpf-style eBPF binary object files are supported as well.

Components

  • Starship Tricorder (aka. Starship Agent): a data collection agent running as daemonset. Agent executes eBPF+WASM modules and export structured data to storage engine. The code lives in src/agent.
  • Starship API Server: manages Tricorder agents, and Promscale & Grafana backend server; also supports management Web UI and CLI. The code lives in src/api-server.
  • Starship CLI: the command line tool to use Starship on your Kubernetes cluster. The code lives in src/cli.
  • Starship Web UI: a Web UI for using Starship. The code lives in ui.

3rd party dependencies

  • Promscale: A unified metric and trace observability backend for Prometheus & OpenTelemetry. Starship use Promscale to support Prom and OTel.
  • Grafana: Starship use Grafana to visualize Observability data.

Prepherials

  • Kube-state-metrics (KSM): listens to the Kubernetes API server and generates metrics about the state of the objects. Starship use KSM to expose cluster-level metrics.
  • Prometheus: collects metrics from KSM and then remote write to Promscale.
  • OpenTelemetry: for distributed tracing and other awesome Observability features.

Contributing

  • Fork the repo
  • tools/cleanup.sh: Run this script before creating Pull Request
  • Createing Pull Request
  • Wait for review

Building Starship

The development environment is based on Ubuntu. The easiest way to get started with building Starship is to use the dev image:

git clone git@github.com:tricorder-observability/starship.git
cd starship
devops/dev_image/run.sh
# Inside the container
bazel build src/...

devops/dev_image/run.sh is a script that mounts the pwd (which is the root of the cloned Starship repo) to /starship inside the dev image.

Provision development environment on localhost

You can use Ansible to provision development environment on your localhost. First install ansible:

sudo apt-get install ansible-core -y
git clone git@github.com:tricorder-observability/starship.git
cd starship
sudo devops/dev_image/ansible-playbook.sh devops/dev_image/dev.yaml

This installs a list of apt packages, and downloads and installs a list of other tools from online.

Afterwards, you need source the env var file to pick up the PATH environment variable (or put this into your shell's rc file):

source devops/dev_image/env.inc

Afterwards, run bazel build src/... to build all targets in the Starship repo.