
Explore deploying and harnessing the Grafana stack for observability, including Prometheus, Loki, Alloy, and Tempo, with hands-on metrics for the Shoe Hub using mock data.
Explore the shift from monolithic to microservices architectures, why CI/CD accelerates deployment, and how increased inter-service communication, security, and monitoring drive observability.
Monitor and visualize runtime telemetry to assess service status, functionality, and performance using http checks, thresholds, and MTD/MTTR.
Explore monitoring methods for microservices, focusing on read, use, and golden signals across UI, service, and infrastructure layers, including latency, traffic, errors, and saturation and core web vitals.
Observability integrates monitoring to provide a holistic view of modern distributed systems, telling you why, where, and when issues occur and enabling anticipation of unknown unknowns.
Choose push or scrape to collect metrics for a time-series database. Push uses an agent like Statsd to forward metrics to Graphite, while scrape lets Prometheus read metrics from services.
Explore the four telemetry data types—metrics, events, logs, and traces—and learn how each supports observability in microservices, from event timestamps to tracing cross-service requests.
Install Prometheus on macOS with homebrew, run it as a background service, and configure YAML to use http or https, noting the default admin/password and UI at http localhost 1990.
install Prometheus on Ubuntu by downloading a package from prometheus.io, selecting architecture; create prometheus user, extract, move binary to /usr/local/bin, start the service, and access UI on port 9090.
Learn how Prometheus collects metrics by using exporters to pull data from systems with or without source code, and how Pushgateway enables apps to push metrics when scraping isn't possible.
Learn how Prometheus collects metrics with node exporter from Unix-based kernels, including CPU, memory, disk, and network IO, and how to set up node exporter on Ubuntu.
Set up node exporter on an application server, restrict port 9100 to the Prometheus server via security groups, and verify metrics from the exposed node exporter endpoint.
Configure Prometheus to scrape the application server with a node exporter job in prometheus.yml, ensure correct yaml indentation, restart Prometheus, and verify the targets are up.
Learn to run node exporter as a persistent service on Ubuntu by creating a systemd service, adjusting file locations, permissions, and enabling startup to keep listening after reboots.
Learn how Prometheus stores metrics as time series identified by a metric name and labeled key-value pairs, using the format { key=value } with an auth api example to query.
Explore Prometheus data types, including floats and strings, instant vectors and range vectors, and learn to query metrics with labels and time ranges in Promql.
Explore Prometheus arithmetic operators—plus, minus, star, slash, modulo, and power—and how they apply to scalar values and instance vectors to create new results.
Explore Prometheus operators, including equal, not equal, greater, less, greater or equal, and less or equal, and how scalars and instance vectors compare to yield true (1) or false (0).
Explore set binary operators in Prometheus, including and, or, and unless, applied to instant vectors; learn how common items match by metric name, label, and value, and how union behaves.
Explore Prometheus aggregation operators such as sum, min, max, avg, count, top k, bottom k, stddev, and group, and learn the syntax using braces with by or without a label.
Explore time offsets in Prometheus, using offset to view past time series, switching instant vectors to graphs, and applying aggregations like average by code after the metric.
Discover Prometheus functions like absent, absent over time, abs, ceil, floor, and clamp variants to shape time series for Grafana dashboards, trimming and validating instant and range vectors.
Explore Prometheus functions log2, log10, and ln on instant vectors, then sort and sort_desc, and use time and time_stamp to timestamp items with examples using clamp and offset one hour.
Install a WMI exporter for Windows and expose metrics to Prometheus. Configure Prometheus to scrape on port 9182, duplicate the Prometheus job, and verify the WMI exporter target status.
Let's compare the pros and cons of installing Grafana locally versus using the cloud-based Grafana.
You will learn how to install and configure Grafana on Ubuntu LTS 18.04 ( and above ). The step by step instructions of setting up Grafana is attached to this lecture as well.
Install Grafana on Amazon Linux and Red Hat by downloading the latest rpm package and installing with yum, then enable, start, and access on port 3000 with admin/admin.
Windows is the most popular operating system for servers and personal computers. Therefore it is essential to know that how Grafana can be installed and configured on a Windows instance.
If you are a proud Mac user, you can install Grafana directly on your Mac computer and use it to learn more about it. In this lecture you will learn that how you can install and configure Grafana using Homebrew.
Update grafana.ini by creating custom.ini to set the instance name and logs path, remove the semicolon, choose a database (sqlite, mysql, or postgres), and restart grafana to apply changes.
In this course, I have provided a single docker-compose file that can launch the entire Grafana Stack (including Loki, Alloy and Tempo) as well as Prometheus in a few seconds. The stack will include the mock data generators for Shoe Hub company and OpenTelemetry as well.
Dashboards in Grafana are designed for different purposes, such as monitoring browser applications or infrastructure. Each dashboard type is used by a different role or team in the organisation, who may have different KPIs to watch.
In this lecture I will explain the most common dashboard layouts and structure for each dashboard type.
The Shoe Hub is an imaginary company we will use throughout the course to explain how you can visualise business and technical metrics.
Connect Grafana to Prometheus by adding a Prometheus data source, configuring the URL, authentication, custom headers, and TLS client cert, then verify the green check.
Learn to create and manage Grafana dashboards from Prometheus data by logging in, organizing dashboards into folders and rows, and configuring titles, tags, time zones, and permissions.
Graph panel is suitable for creating charts and histograms. In this lecture you will learn how to use Graph panel and display the metrics from Graphite on it.
Learn to build and customize advanced time-series panels in Grafana, including aliasing legends, composing multiple Prometheus queries with the rate function, and totaling sales across boots, high heels, and loafers.
In this lecture you will visualise the data of different payment methods in the US so that we can have a good understanding how the customers prefer to pay.
Using the Data Transformations feature of Grafana, you can mix and match existing panel rows to create new rows, look up data or convert data types.
The Time Series panel is suitable for showing the data trend over time. However, ,we can compare different related values in percentage form using Pie Charts. For example, we can show the percentage of infrastructure failures are related to disk, what percentage is related to network and what percentage is related to power outage.
Sometimes, we want to compare a metric's current value(s) to the values(s) of the same metric but in the past. For example, you could display the current Shoe sales compared to last month's sales or make a week-on-week revenue comparison. Such graphs can be used to understand of the state of a metric easilywhether a metric's state is increasing or decreasing. For example we can see if the network errors have gone down since last week, or if our marketing efforts have paid off and our sales has gone up since last month. In this lecture we will learn that how we can do this using Grafana and Prometheus.
Sometimes it is essential for us to know if the values of data points are above or below a given threshold. For example, if the network errors go above a certain number, or if the orders received per hour are unusually low. We achieve this by Thresholds in Grafana.
Variables, a key feature of Grafana, allow us to create dynamic dashboards and panels with less work and effort than when we hard-code everything.
Explore building dynamic dashboards by adding variables in dashboard settings, using a query variable to filter payments by country and method, and configuring time series visualizations, legends, and repeated panels.
In Grafana, if we show two or more lines on a Graph panel, and the values of these lines are vastly different, then one or some of those lines may become so compressed that we may see their data points as zeros. For example of we show the response time of an IoT device that responds slowly, and the response time of an API that responds very quickly, on the same Graph panel, the response time of the API may be seem as a straight line with value of zero.
In this lecture we will learn that how we can overcome this problem.
Explore gauge and bar gauge panels in Grafana: configure thresholds, colors, and value modes (last point vs mean), adjust legend, orientation, and styles (horizontal, retro LCD) for clear visual monitoring.
Alerts are defined based on thresholds or mathematical formulations in Grafana. Over time, the alerting system in Grafana has evolved, improved and become somewhat complex. In this lecture you will learn about the concepts and terminalogies of the Grafana Alerting System, and you will learn how this ecosystem works.
Alerts in Grafana are based on queries written in a data source-specific language, such as PromQL for Prometheus. The results of these queries are checked periodically, and if they violate a rule, such as a threshold, that we define, alerts are raised.
In this lecture you will learnt that how you define an alerting rule.
It is not practical to constantly watch the dashboards to see if alerts are raised. Instead, we deliver notifications in various formats, such as emails or Slack messages, to inform relevant people of the alert.
In this lecture you will learn that how you create contact points as well as notification policies to filter the notifications and direct them to the right people.
Slack is a popular collaboration tool that many teams use to chat, exchange team data and receive notifications. Grafana can send alert messages to Slack, too. In this lecture, you will learn how to send Slack notifications for a firing alert.
Sometimes, we do not want to send out notifications temporarily. For example, you may not want to send out notifications at midnight. In such cases we can use Grafana's ability to silence the alerts based on a define time period.
Annotations are a way to describe the rich events. In this lecture you will see that how you can use annotations to describe and understand your Grafana panels better.
Discover Grafana Loki, an open source log aggregation system that integrates with Grafana to store and query logs alongside metrics, using an agent to collect and ship logs.
Explore cloud and on-prem deployment options for Grafana Loki, including SaaS alternatives and self-managed setups. Learn to install Loki with Docker or locally and use Promtail to ship logs.
install loki on one ubuntu server and promtail on a separate web server; configure promtail to point to loki using the private ip and enable grafana connectivity via systemd service.
Ingest ten log entries into Loki via Promtail by writing to a /var/log file with timestamps and a component label, and verify in Grafana using Loki and file name filters.
Create static labels in the log ingestion configuration to extend Loki with keys like team and environment, then use Grafana Explorer and log fmt to filter by these labels.
Extract dynamic labels from unstructured logs using a pipeline with log fmt and labels, updating static config and table map, then filter by file name to query by component.
Learn to visualize Loki logs in Grafana by converting log lists to time series with rate and range functions, comparing database and backend errors on dashboards.
Learn to install Grafana, Loki, and Promtail with Docker Compose, expose Loki on 3100 and Grafana on 3000, and configure a Docker network and log volumes for ingestion.
With the advent of cloud-native applications and the microservices architecture, commercial observability platforms gained attention and became famous. However, they can be costly, and once integrated with them, it may be pretty challenging to break away from them and adopt a different vendor's observability platform.
OpenTelemetry, or OTel, is an open-source initiative incubated by the Cloud Native Computing Foundation (CNCF) that aims to enable developers and DevOps engineers to generate, export, and collect telemetry data without being locked into a specific vendor.
Learn about the architecture of a scalable observability system based on Opentelemetry.
Learn about configuring Prometheus to receive Opentelemetry metrics.
Grafana Alloy is Grafana's Opentelemetry Collector. It can receive OTel metrics from various sources and deliver them to a variety of backend databases after processing them.
In this lecture, we will install Grafana Alloy locally on a Mac computer. Installation instructions for installing Grafana Alloy on Windows and Linux are provided at the end of this section.
Grafana Alloy plays a pivotal role in receiving, processing, and forwarding Opentelemetry signals to downstream systems, such as Prometheus. In this lecture, you will learn how to create receivers, processors, and exporters to achieve this goal.
In this lecture, we will analyse a microservice that produces a counter and exports it to Grafana Alloy via OTLP.
Learn how to ship logs to Loki with Alloy by configuring the Alloy file for file sources, syslog, and other sources, or using OpenTelemetry receivers and exporters.
Install grafana alloy on Ubuntu using a GitHub script, run with sudo sh install, then configure by editing config.dot alloy in the alloy folder to enable telemetry.
Tracing in distributed systems, particularly within a microservices architecture, is crucial for understanding and optimizing system performance and reliability. Tracing becomes complex yet essential as modern applications are built using microservices, where various components communicate over networks.
Tracing involves tracking a request's journey across multiple microservices, providing insights into each service's performance, dependencies, and bottlenecks. Distributed tracing tools like Jaeger and Zipkin enable developers to visualize this journey, often represented as a trace or a series of interconnected spans.
In microservices, where each service is responsible for a specific function, tracing helps identify latency issues, failures, and inefficiencies that may occur at any point in the system. By correlating traces across services, developers can pinpoint the root cause of problems and optimize performance.
Moreover, tracing facilitates debugging and monitoring in production environments, aiding in troubleshooting and ensuring system reliability. It also supports distributed system testing, allowing developers to simulate various scenarios and analyze system behaviour under different conditions.
In this lecture you will learn all aspects of Telemetry and its relevance to Grafana.
Grafana Tempo is part of Grafana Stack from Grafna Labs! It is used to visualise Traces produced by OpenTelemetry, i.e., from a Microservice. Grafana Tempo can show the traces and spans. It can also be used with Prometheus to let you go from a trace to a metric and vice versa. In this lecture, you will be introduced to Grafana Tempo and some of the ways youit signals, i.e., Zipkin and New Relic as well as some ways to visualise them.
Since most DevOps engineers use Mac , at this point we learn that how Grafana Tempo can be deployed on a Mac computer for learning and practicing. If you use Windows or Docker, you can find the installation guides at the end of the current section.
In this lecture you will learn an easy method for installing Grafana Tempo on Ubuntu.
Although Grafana Tempo comes with a built-in Opentelemetry Collector, the recommended architecture by Grafana Labs is to use Grafana Alloy between the source of the Opentelemetry traces (i.e., your microservices) and Grafana Tempo. Grafana Alloy can receive the Opentelemetry traces and forward them to Grafana Tempo. Using Grafana Alloy as the middleware will reduce the vendor-lock in.
In this lecture, we have a microservice called Order Service, which is written in dotnet (C#) and Python. The code sends metrics and traces to Grafana Alloy, and Grafana Alloy forwards the traces to Grafana Tempo.
In this lecture, you will learn about trace context propagation, which propagates trace and span information from a client service to a server service. You will see this concept in two microservices codes.
Then you will learn how to create a Service Graph in Grafana Tempo, to better understand the flow of the request and the relationship of the services.
Grafana Tempo supports a query language called TraceQL. Using TraceQL you can find traces and spans across a complex distributed system easily.
In this lecture you will practice writing TraceQL queries to get hands-on experience.
When setting up Grafana Tempo to be used in production capacity, Tempo must use a cloud storage such as Amazon Web Services (AWS) S3. In this lecture you will learn the procedure of configuring Tempo for using AWS S3.
Grafana murmur extends Prometheus with high availability, long-term storage, fast queries, and multi-tenancy, while staying fully Prometheus compatible and enabling cloud-backed storage via remote write.
Install Grafana Mimir in monolithic mode on a local mac or linux, using binary or docker, and configure file system storage and Prometheus integration.
Enable multi-tenancy in Grafana and wire two Prometheus instances to Mimir using the x scope org id header to serve the IT and sales tenants through separate data sources.
Learn to configure Grafana to use AWS S3 for common and block storage, including creating IAM policies, users or roles, buckets, and updating config with keys and region.
Discover how to deploy Grafana Mimir in microservices mode, scale distributors and injectors independently, and compare virtual machines with load balancers versus Kubernetes deployment.
Install Minikube on macOS with Docker, enable ingress and dashboard addons, and use Helm to deploy Grafana on Kubernetes for local exploration.
Deploy grafana mimir to minikube or kubernetes with helm, using a custom values file to configure microservice replicas and prometheus remote_write.
Learn why grafana alert management outscales prometheus for billions of metrics and multi-tenant alerts, and how to configure ruler and alertmanager with mimir, storage, and tenant-specific files.
Configure grafana, mimir ruler, and alertmanager using provided yaml templates, define rules with promql thresholds, and set up alert routing and storage for file system or S3, including tenant-specific configs.
Learn how to configure alert manager with the Mimir tool by downloading the Mimir binary, running the memory tool, loading tenant one rules YAML, and validating alerts in Slack.
Master observability with the Grafana Stack, including Grafana Loki for logs, Grafana Tempo for distributed tracing, Grafana Alloy as an Open Telemetry (OTel) collector, and Grafana Mimir for large-scale enterprise metrics storage, by by enrolling in this top rated course, which has been the best selling Grafana course on Udemy for seven consecutive years!
This course provides a comprehensive, hands-on path to building modern observability systems. It starts with metrics using Prometheus and progresses to logs, traces, alerting, and custom dashboards in Grafana.
We begin with the core concepts of observability, telemetry data, and methods for metric collection. Then, you'll dive into Prometheus — learning how to install, configure, and use it like a pro.
Next, you'll deploy Grafana across Windows, macOS, Linux (including Ubuntu and Amazon Linux), and Docker. Once your stack runs, we cover Grafana dashboard design for real-world use cases: APIs, infrastructure, and microservices.
In the logging section, you'll work with Grafana Loki to ingest and visualise logs, including dynamic label extraction from unstructured logs.
Then we go deeper: you'll learn the fundamentals of OpenTelemetry and set up Grafana Alloy to receive, process, and export OTel metrics and traces. You'll instrument microservices (in Python and C#) and export signals to Grafana Tempo, where you'll trace distributed calls and analyze service graphs with TraceQL.
Now also included is Grafana Mimir, a highly scalable time-series database for storing metrics at scale. You'll learn what Mimir is, how it works, and how to deploy it locally in monolithic mode and microservices mode into Kubernetes.
To make it practical, the course is based on a fictional online retailer, ShoeHub, with mock data, dashboards, alerts, and services that simulate real-world observability use cases.
No setup headaches — you'll also get instant access to a browser-based playground powered by Killer Coda, so you can start experimenting without installing anything.
Included in the course:
Docker Compose files for Prometheus, Grafana, Loki, Alloy, Tempo, Mimir, ShoHub metrics, and Example Microservices Tracing.
Sample dashboards and panel configurations.
Log generator script in Python.
Set up guides for multiple platforms.
Binary executable files for ShoeHub and the example microservices (if you don't want to use Docker).
Optional cloud lab environment (Killer Coda) for instant hands-on practice.
I will respond promptly via the Udemy Q&A system if you encounter any issues or have questions.
Happy learning — and welcome to the world of observability!