opentelemetry-dotnet/docs/metrics/getting-started-prometheus-.../README.md

173 lines
5.9 KiB
Markdown

# Getting Started with Prometheus and Grafana
- [Export metrics from the application](#export-metrics-from-the-application)
- [Check results in the browser](#check-results-in-the-browser)
- [Collect metrics using Prometheus](#collect-metrics-using-prometheus)
- [Configuration](#configuration)
- [Start Prometheus](#start-prometheus)
- [View results in Prometheus](#view-results-in-prometheus)
- [Explore metrics using Grafana](#explore-metrics-using-grafana)
## Export metrics from the application
It is highly recommended to go over the [getting-started](../getting-started/README.md)
doc before following along this document.
Create a new console application and run it:
```sh
dotnet new console --output getting-started-prometheus
cd getting-started-prometheus
dotnet run
```
Add a reference to [Prometheus
Exporter](../../../src/OpenTelemetry.Exporter.Prometheus/README.md):
```shell
dotnet add package OpenTelemetry.Exporter.Prometheus --version 1.2.0-rc2
```
Now, we are going to make some small tweaks to the example in the
getting-started metrics `Program.cs` to make the metrics available via
OpenTelemetry Prometheus Exporter.
First, copy and paste everything from getting-started
metrics [example](../getting-started/Program.cs) to the Program.cs file of the
new console application (getting-started-prometheus) we've created.
And replace the below line:
```csharp
.AddConsoleExporter()
```
with
```csharp
.AddPrometheusExporter(options => { options.StartHttpListener = true; })
```
With `AddPrometheusExporter()`, OpenTelemetry `PrometheusExporter` will export
data via the endpoint defined by
[PrometheusExporterOptions.HttpListenerPrefixes](../../../src/OpenTelemetry.Exporter.Prometheus/README.md#httplistenerprefixes),
which is `http://localhost:9464/` by default.
Also, for our learning purpose, use a while-loop to keep increasing the counter
value until any key is pressed.
```csharp
Console.WriteLine("Press any key to exit");
while (!Console.KeyAvailable)
{
Thread.Sleep(1000);
MyFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
MyFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
MyFruitCounter.Add(1, new("name", "lemon"), new("color", "yellow"));
...
...
...
}
```
After the above modifications, now our `Program.cs` should look like [this](./Program.cs).
### Check results in the browser
Start the application and keep it running. Now we should be able to see the
metrics at [http://localhost:9464/metrics](http://localhost:9464/metrics) from a
web browser:
![Browser UI](https://user-images.githubusercontent.com/17327289/151633547-736c6d91-62d2-4e66-a53f-2e16c44bfabc.png)
Now, we understand how we can configure `PrometheusExporter` to export metrics.
Next, we are going to learn about how to use Prometheus to collect the metrics.
## Collect metrics using Prometheus
Follow the [first steps](https://prometheus.io/docs/introduction/first_steps/)
to download the [latest release](https://prometheus.io/download/) of Prometheus.
### Configuration
After finished downloading, extract it to a local location that's easy to
access. We will find the default Prometheus configuration YAML file in the
folder, named `prometheus.yml`.
Let's create a new file in the same location as where `prometheus.yml` locates,
and named the new file as `otel.yml` for this exercise. Then, copy and paste the
entire content below into the `otel.yml` file we have created just now.
```yaml
global:
scrape_interval: 10s
evaluation_interval: 10s
scrape_configs:
- job_name: "otel"
static_configs:
- targets: ["localhost:9464"]
```
### Start Prometheus
Follow the instructions from
[starting-prometheus](https://prometheus.io/docs/introduction/first_steps/#starting-prometheus)
to start the Prometheus server and verify it has been started successfully.
Please note that we will need pass in `otel.yml` file as the argument:
```console
./prometheus --config.file=otel.yml
```
### View results in Prometheus
To use the graphical interface for viewing our metrics with Prometheus, navigate
to [http://localhost:9090/graph](http://localhost:9090/graph), and type
`MyFruitCounter` in the expression bar of the UI; finally, click the execute
button.
We should be able to see the following chart from the browser:
![Prometheus UI](https://user-images.githubusercontent.com/17327289/151636225-6e4ce4c7-09f3-4996-8ca5-d404a88d9195.png)
From the legend, we can see that the `instance` name and the `job` name are the
values we have set in `otel.yml`.
Congratulations!
Now we know how to configure Prometheus server and deploy OpenTelemetry
`PrometheusExporter` to export our metrics. Next, we are going to explore a tool
called Grafana, which has powerful visualizations for the metrics.
### Explore metrics using Grafana
[Install Grafana](https://grafana.com/docs/grafana/latest/installation/).
Start the standalone Grafana server (`grafana-server.exe` or
`./bin/grafana-server`, depending on the operating system). Then, use the
browser to navigate to [http://localhost:3000/](http://localhost:3000/).
Follow the instructions in the Grafana getting started
[doc](https://grafana.com/docs/grafana/latest/getting-started/getting-started/#step-2-log-in)
to log in.
After successfully logging in, click on the explore option on the left panel of
the website - we should be able to write some queries to explore our metrics
now!
Feel free to find some handy PromQL
[here](https://promlabs.com/promql-cheat-sheet/).
In the below example, the query targets to find out what is the per-second rate
of increase of myFruitCounter over the past 5 minutes:
![Grafana
UI](https://user-images.githubusercontent.com/17327289/151636769-138ecb4f-b44f-477b-88eb-247fc4340252.png)
## Learn more
- [What is Prometheus?](https://prometheus.io/docs/introduction/overview/)
- [Grafana support for
Prometheus](https://prometheus.io/docs/visualization/grafana/#creating-a-prometheus-graph)