Building an Internal Developer Platform for DevOps Engineers

by Ward Van den Broeck

Since the beginning of 2024, I’ve been leading the effort at Gluo to build an Internal Developer Platform (IDP) tailored for our DevOps engineers.

This initiative serves two primary purposes:

  • It offers a safe, realistic DevOps environment where our junior engineers can hone their skills without impacting production systems.
  • It standardizes knowledge and best practices across the company through one-click software templates, increasing development velocity and consistency.

Prologue

Throughout 2024, we laid the foundation: provisioning two cloud environments (Hetzner and Azure), setting up a private network, and deploying a highly available Kubernetes cluster using Rancher Kubernetes Engine and FluxCD.

Following this groundwork, we deployed Backstage, an IDP framework developed by Spotify. We integrated Azure Entra ID as our identity provider and GitLab as our CI/CD platform and service catalog.

After this we spent some time to deploy , a really neat IDP framework developed by Spotify. We used Azure Entra ID as our identity provider and Gitlab as our CI/CD platform and Service Catalog.

By the end of the year, we had created our first set of abstractions—Software Templates—to give engineers golden paths for building Docker images, deploying to Kubernetes, and even integrating an AI DevOps Agent.

Introduction

In this article, I’ll highlight the newest features added to our IDP as part of a collaborative internship program with two students from PXL University of Applied Sciences and Arts.

Observability with Grafana

To help platform users and administrators gain valuable insights into their applications, one of our interns was tasked with integrating Grafana into our Backstage portal.

The project had two main goals:

  1. Provide Grafana as a service, automatically provisioned when users deploy resources.
  2. Create a dashboard that platform admins can use to monitor infrastructure metrics.

Visualize Hetzner Cloud Resources in Backstage

At Gluo, we rely on Hetzner Cloud to efficiently host our Kubernetes infrastructure. However, not all engineers have direct access to Hetzner, which can lead to delays or confusion when troubleshooting issues.

To solve this, our second intern developed a custom Backstage plugin that integrates directly with the Hetzner Cloud API. This plugin consists of three components:

  • A frontend plugin for visualizing Hetzner resources in the portal
  • A backend plugin for secure API communication
  • A catalog plugin that automatically converts Hetzner resources into Backstage entities

Grafana as a Service

We wanted to streamline observability for our engineers, so we automated the provisioning of Grafana dashboards as part of the deployment process.

When a user deploys an application using our Kubernetes Helm App Template, a Grafana dashboard is included by default. The user simply needs to name the deployment and select the environment—no manual setup required.

This is made possible through two scripts in the template repository:

  • One script generates a JSON definition of the dashboard.
  • The other uses this JSON file to create the dashboard in Grafana during the provisioning stage.

Once deployed, the dashboard is immediately accessible via the Grafana tab within Backstage.

The dashboard provides key metrics such as CPU, memory, and disk usage, along with searchable logs to help users identify issues quickly.

This integration has significantly enhanced our platform’s observability capabilities.

The Hetzner Cloud Plugin for Backstage

Since our infrastructure runs on Hetzner, we wanted visibility into the state of our cloud environment directly from Backstage—eliminating the need to switch between tools.

The Hetzner plugin adds a sidebar menu item that links to an overview page showing the current state of your Hetzner tenant, along with a list of resources such as VMs and volumes.

Clicking on any resource opens a detailed view with metadata and related information cards.

In addition, some extra cards will appear with more detailed information related to the resource.

Moreover, if an application is associated with a Hetzner resource, the plugin allows visualization of this relationship through Backstage’s entity graph view.

This plugin significantly enhances our portal, making Backstage the central hub for DevOps operations.

Install the plugin in your own Backstage portal

We’ve publicly released the Hetzner plugin on npm. If you’re looking to integrate your own Hetzner Cloud environment into Backstage, you can benefit from our work.

Link to NPM: https://www.npmjs.com/package/@gluo-nv/backstage-plugin-hetzner

If you encounter any issues or have suggestions for enhancing the plugin, we encourage you to open an issue in the GitHub repository. Your feedback is greatly appreciated. We hope you find the plugin useful!

Link to Github: https://github.com/gluobe/hetzner-backstage-plugin

Wrapping up

This year’s internship has been highly productive, and I’d like to extend my sincere thanks to our two students for their excellent contributions. I look forward to hearing feedback from the Backstage community and hope our colleagues enjoy the new features added to our Internal Developer Platform.

Menu