Prometheus 极速体验

极速体验 Prometheus 是什么,以及可以干什么~

初体验

运行 Prometheus

会 Linux 的同学一般看了需要在 Windows 上进行怎么操作就知道怎么在 Linux 上操作了,
反过来则不行,所以既然是极速体验,那么就将怎么在 Windows 运行好了~

首先到 Prometheus 官方- Download 下载最新版本,
下载后,解压,得到:

  • prometheus.exe —— 主要负责数据采集和存储,提供 PromQL 查询语言的支持。
  • prometheus.yml —— 配置
  • promtool.exe —— 命令行工具

promtool.exe 检查 prometheus.yml 文件是否 OK

1
2
3
prometheus>promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: 0 rule files found

prometheus.yml 中已经有简单的配置,抓数据的时间间隔以及一个被抓取目标(Prometheus 它自身的运行情况)~

所以我们双击 prometheus.exe 运行起来,然后浏览 localhost:9090 则能看到 UI 界面了~

Prometheus 会抓取自身运行时的 metrics(指标),你可以浏览 localhost:9090/metrics 看看抓取的内容

回到 localhost:9090/graph 在 -insert metric at sursor- 下拉框中选择 go_goroutines
然后点击 Execute 按钮,那么在 Console 选项卡中可以看到当前有多少个 Go协程:

Element Value
go_goroutines{instance=”localhost:9090”,job=”prometheus”} 41

点击 Graph 选项卡,可以看到 Go协程 数量的变化情况~

新增一个被抓取的目标(应用运行时)

由于 Prometheus 自身是 Go 语言编写的,所以我们来创建一个 DotNet 的客户端让 Prometheus 抓取,来区分 metrics 的区别

新增一个空的 Web 项目,用 NuGet 添加 prometheus-net.AspNetCore,在 Startup.cs 添加两行代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

using Prometheus;// !!

namespace MyWebApp
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseRouting();

//app.UseHttpMetrics(); // 加上这句可以提供更多被抓取的信息

app.UseEndpoints(endpoints =>
{
// !!
endpoints.MapMetrics();

endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});

});
}
}
}

运行起来,Visual Studio 给我分配的端口是 http://localhost:4763,
浏览 http://localhost:4763/metrics 则能看到 Prometheus 时提供的数据~

编辑 prometheus.yml,在 scrape_configs 处新增一个要被抓取的目标:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'

# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.

static_configs:
- targets: ['localhost:9090']

# 新增一个要被抓取的目标(应用运行时)~
- job_name: 'app-my-web'
static_configs:
- targets: ['localhost:4763']

重启 prometheus.exe

在 localhost:9090 界面中,点击 Status 选择 Targets 或者 Service Discovery 看看
另外,在 localhost:9090/graph 在 -insert metric at sursor- 下拉框中也会出现 dotnet_... 的选项了~

下面的表格现实 MyWebApp 某时刻使用了多少线程:
| Element | Value |
| ————————————————————— | —– |
| process_num_threads{instance=”localhost:4763”,job=”app-my-web”} | 46 |

新增一个被抓取的目标(服务器运行时)

从上面的抓取数据可以看出,
我们的 DotNet 应用只提供了 DotNet 运行时的信息,
我们的 Go 应用也只提供 Go 运行时的信息,
它们都没有服务器的 CPU、内存、磁盘、I/O 等信息~

那是如果一台机器上部署多个应用,都提交服务器信息,有点重复了,
因此我们需要一个专门的来做这个事情,
node_exporter —— 作用是收集服务器系统数据~

依旧到官方下载页面 https://prometheus.io/download

查看页面 node_exporter 处,你会发现,既然没有提供 Windows 版本的 (╯‵□′)╯︵┻━┻
_猜猜其它 xxxx_exporter 的作用~_

所以我们现在需要一台 Linux,在 Linux 上运行 node_exporter
怎么下载,运行什么的就不说了~

怎么的时候,可以看到 address=:9100

浏览 http://192.168.86.99:9100/metrics 可以看到提供要被抓的数据,192.168.86.99 是我的 IP 地址,请替换~

编辑 prometheus.yml,在 scrape_configs 处新增一个要被抓取的目标:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'

# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.

static_configs:
- targets: ['localhost:9090']

# 新增一个要被抓取的目标(应用运行时)~
- job_name: 'app-my-web'
static_configs:
- targets: ['localhost:4763']

# 新增一个要被抓取的目标(服务器运行时)~
- job_name: 'node-ubuntu-99'
static_configs:
- targets: ['192.168.86.99:9100']

重启 prometheus.exe

在 localhost:9090 界面中,点击 Status 选择 Targets 或者 Service Discovery 看看
另外,在 localhost:9090/graph 在 -insert metric at sursor- 下拉框中也会出现 node_... 的选项了~

下面的表格现实服务器某时刻使用了多少内存:
| Element | Value |
| —————————————————————————- | —— |
| node_memory_Active_bytes{instance=”192.168.86.99:9100”,job=”node-ubuntu-99”} | xxxxxx |

初体验小结

初体验的感觉就是各种 low,界面 low,而且既然还要手动修改配置,
作为容器专门为容器时代设计的 Prometheus 很明显,不应该是这样子的~

Grafana

Prometheus 的 UI 界面很 low,如果是下面这样的界面,瞬间就高大上了,有没有~

Grafana

所以赶紧到 Grafana 官方下载页面:https://grafana.com/grafana/download

先试试 Windows 版本的,有 安装版本 和 解压版本
安装版本,安装后,会有一个 Grafana 服务运行着
所以这里选择解压版本的,点击 Download the zip file

下载解压后,运行 grafana\bin\grafana-server.exe

浏览 http://localhost:3000

输入 admin admin

登录成功会提示你修改密码,点 Skip 跳过~

添加数据源

选择 Prometheus

URL 处填上 http://localhost:9090

点击 Save & Test 按钮则会提示 ✔ Data source is working

添加 Prometheus Dashboard

点击,我们创建出来的 Prometheus 数据源,

点击 Dashboards,点击 Prometheus 2.0 Stats 后面的 Import 按钮

然后再点击 Prometheus 2.0 Stats 就可以看到高大上的画面了~

然后这个 Dashboard 是查看 Prometheus 自身的,
我们的应用和服务器,需要添加相应其它 Dashboard

Node Exporter for Prometheus Dashboard

点击 Grafana UI 界面左边菜单的 + ,然后点击 Import

Grafana.com dashboard url or id 的文本框中输入:
https://grafana.com/grafana/dashboards/8919
或者
8919

可以将 Name 的文本框中修改成一个好记的名字~

Select a Prometheus data source 选择 Prometheus

最后点击 Import,也同样可以看到高大上的画面了~

Next

Prometheus 是一个 监控警报系统,我们现在只初体验了监控部分,警报怎么运作呢?

参考资料

https://prometheus.io/docs/introduction/overview

https://github.com/prometheus/client_golang

https://github.com/prometheus-net/prometheus-net

https://grafana.com/docs/grafana/latest

觉得文章对您有帮助,请我喝瓶肥宅快乐水可好 (๑•̀ㅂ•́)و✧
  • 本文作者: 阿彬~
  • 本文链接: https://iweixubin.github.io/posts/prometheus/getting-started/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 免责声明:本媒体部分图片,版权归原作者所有。因条件限制,无法找到来源和作者未进行标注。
         如果侵犯到您的权益,请与我联系删除