Skip to content

grafana/quickpizza

QuickPizza

QuickPizza screenshot

What is QuickPizza? πŸ•πŸ•πŸ•

QuickPizza is a simple web application, used for demonstrations and workshops, that generates new and exciting pizza combinations!

You can run QuickPizza locally or deploy it to your own infrastructure. For demo purposes, QuickPizza is also publicly available at:

  1. quickpizza.grafana.comβ€” Use this environment to run small-scale performance tests like the ones in the k6 folder.
  2. quickpizza-demo.grafana.fun β€” Install the SRE Demo environment to observe this deployment, or explore it in Grafana Play.

The QuickPizza tests showcase key k6 features, from basic usage to custom modules and extensions.

Requirements

Use k6 to test QuickPizza

All tests live in the k6 folder. Within this folder, you will find the following folders:

To run tests on the foundations folder, you can use the following commands:

cd k6/foundations
k6 run 01.basic.js

If QuickPizza is publicly available , then pass the hostname and port through the BASE_URL environment variable as follows:

k6 run -e BASE_URL=https://quickpizza.grafana.com 01.basic.js
Using k6 extensions If the test uses an extension, you need to build a k6 binary that includes the required extension/s. For detailed instructions, refer to k6 docs:
cd k6/extensions

xk6 build --with xk6-internal=../internal

To run the test that uses the k6/x/internal module, use previously created k6 binary in the k6/extensions folder:

./k6 run 01.basic-internal.js
Using k6 Docker image If you want to use the [k6 Docker image](https://hub.docker.com/r/grafana/k6) to run k6, you need to run the Quickpizza and k6 containers within the same network.

First, create a Docker network. Then, run Quickpizza, assigning a hostname and connecting to the created network.

docker network create quickpizza_network
docker run --network=quickpizza_network --hostname=quickpizza --rm -it -p 3333:3333  ghcr.io/grafana/quickpizza-local:latest

Next, you can use the k6 Docker image to execute the k6 test. Run the k6 Docker container within the same network (quickpizza_network) and pass the BASE_URL environment variable with the value of the Quickpizza container's hostname as follows:

docker run -i --network=quickpizza_network -e BASE_URL=http://quickpizza:3333 grafana/k6 run  - <01.basic.js

Run locally with Docker

To run the app locally with Docker, run the command:

docker run --rm -it -p 3333:3333  ghcr.io/grafana/quickpizza-local:latest

or build image from the repo:

docker run --rm -it -p 3333:3333 $(docker build -q .)

That's it!

Now you can go to localhost:3333 and get some pizza recommendations!

Testing something you can't observe is only half the fun! πŸ”βœ¨ QuickPizza is instrumented using best practices to record logs, emit metrics, traces and allow profiling. Get ready to dive deep into observability! πŸš€

Run and observe locally with Grafana OSS πŸ³πŸ“Š

The docker-compose-local.yaml file is set up to run and orchestrate the QuickPizza, Grafana, Tempo, Loki, Prometheus, Pyroscope, and Grafana Alloy containers.

Grafana Alloy collects traces, metrics, logs and profiling data from the QuickPizza app, forwarding them to the Tempo, Prometheus and Loki. Finally, you can visualize and correlate data stored in these containers with the locally running Grafana instance.

To start the local environment, use the following command:

docker compose -f docker-compose-local.yaml up -d

Like before, QuickPizza is available at localhost:3333. It's time to discover some fancy pizzas!

Then, you can visit the Grafana instance running at localhost:3000 and use Explore or Drilldown apps to access QuickPizza data.

Use Profiles Drilldown

To find the labels applied to the telemetry data, refer to alloy-local.river and docker-compose-local.yaml.

Send k6 Test Results to Prometheus and visualize them in Grafana with prebuilt dashboards

To send k6 results to the Prometheus instance, execute the k6 run command with the value of the output flag set to experimental-prometheus-rw as follows:

k6 run -o experimental-prometheus-rw 01.basic.js

The local Grafana instance includes the k6 Prometheus and k6 Prometheus (Native Histogram) dashboards to help visualize, query, and correlate k6 results with telemetry data.

k6 provisioned dashboards

For detailed instructions about the different options of the k6 Prometheus output, refer to the k6 output guide for Prometheus remote write.

Run locally and observe with Grafana Cloud β˜πŸ“Š

The docker-compose-cloud.yaml file is set up to run the QuickPizza and Grafana Alloy containers.

In this setup, Grafana Alloy collects observability data from the QuickPizza app and forwards it to Grafana Cloud.

You will need the following settings:

  1. The name of the Grafana Cloud Stack where the telemetry data will be stored.
  2. An Access Policy Token that includes the following scopes for the selected Grafana Cloud Stack: stacks:read, metrics:write, logs:write, traces:write, and profiles:write.
  3. The User ID and Endpoint to use for Grafana Cloud Profiles (Pyroscope) for your Grafana Cloud Stack

Then, create an .env file with the following environment variables and the values of the previous settings:

# Your Grafana Cloud Stack Name (Slug)
GRAFANA_CLOUD_STACK=name
# Your Grafana Cloud Access Policy Token
GRAFANA_CLOUD_TOKEN=
# The Endpoint to use to send your Profiling Data too
QUICKPIZZA_PYROSCOPE_ENDPOINT=
# Your Grafana Cloud Profiles Username for your Grafana Cloud Stack
QUICKPIZZA_GRAFANA_CLOUD_USER=
# Your Grafana Cloud Profiles Password for your Grafana Cloud Stack (this is typically your Grafana Cloud Access Policy Token)
QUICKPIZZA_GRAFANA_CLOUD_PASSWORD=${GRAFANA_CLOUD_TOKEN}

Finally, execute the Docker Compose command using the docker-compose-cloud.yaml file, just as in the local setup:

docker compose -f docker-compose-cloud.yaml up -d

QuickPizza is available at localhost:3333. Click the Pizza, Please! button and discover some awesome pizzas!

Now, you can log in to Grafana Cloud and explore QuickPizza's telemetry data on the Prometheus, Tempo, Loki, and Pyroscope instances of your Grafana Cloud Stack. Refer to alloy-cloud.river and docker-compose-cloud.yaml to find the labels applied to the telemetry data.

Enable Profiling (Send profiles to Grafana Cloud Profiles / Pyroscope)

Whenever there is a Pyroscope endpoint provided via the QUICKPIZZA_PYROSCOPE_ENDPOINT environment variable, as well as suitable Authentication Credentials, the QuickPizza app will emit and push profiling data to Grafana Cloud Profiles. You can visualize the profiling data with the Grafana Cloud Profiles data source in Grafana Cloud and the Explore Profiles feature.

To enable Grafana Cloud Profiling, ensure the following Environment Variables are set in the .env file, with values set to match your Grafana Cloud Stack:

  • QUICKPIZZA_PYROSCOPE_ENDPOINT - The Endpoint to use to send your Profiling Data too for your Grafana Cloud Stack.
  • QUICKPIZZA_GRAFANA_CLOUD_USER and QUICKPIZZA_GRAFANA_CLOUD_PASSWORD are the Basic auth credentials to authenticate with the Grafana Cloud instance.

Additional variables are available to configure the Tags/Labels for the Profiles, and support some Grafana Cloud Profiling Integrations;

  • QUICKPIZZA_PYROSCOPE_NAME - the value of the service_name Label in Grafana Cloud Profiles (uses quickpizza by default).
  • QUICKPIZZA_PYROSCOPE_NAMESPACE - the value of the namespace Label in Grafana Cloud Profiles (uses quickpizza by default).
  • QUICKPIZZA_PYROSCOPE_SERVICE_GIT_REF - This allows you to provide the Git Ref for the QuickPizza Source in GitHub, to use with the Go Profiles GitHub Integration in Grafana Cloud.

Enable Frontend Observability (Grafana Faro)

Frontend Observability is available exclusively in Grafana Cloud. To enable Grafana Cloud Frontend Observability for QuickPizza, add the QUICKPIZZA_CONF_FARO_URL variable to the .env file, setting its value to your Faro web URL:

QUICKPIZZA_CONF_FARO_URL=

Restart the docker-compose-cloud.yaml environment.

Frontend Observability

Send k6 test results to Grafana Cloud Prometheus and visualize them with prebuilt Grafana dashboards

Just like in the local setup, we can output k6 result metrics to a Prometheus instance; in this case, it is provided by our Grafana Cloud Stack.

K6_PROMETHEUS_RW_USERNAME=USERNAME \
K6_PROMETHEUS_RW_PASSWORD=API_KEY \
K6_PROMETHEUS_RW_SERVER_URL=REMOTE_WRITE_ENDPOINT \
k6 run -o experimental-prometheus-rw script.js

For detailed instructions, refer to the k6 output guide for Grafana Cloud Prometheus.

About

Pizza, pizza, pizza!

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors 15