使用Prometheus和Grafana结合来构建监控平台的方法

image.png

首先

虽然Prometheus本身也有简单的可视化工具,但与Grafana的仪表盘相比,其显得逊色不少。因此,建议将Prometheus与Grafana结合使用,作为监视基础设施的方法。本文将介绍如何将Prometheus与Grafana连接,以及Prometheus与其他工具的不同之处。

对于感到在使用Prometheus过程中困难的人来说,
MetricFire的产品Hosted Prometheus可以立即运行带有Grafana仪表板的Prometheus,并实现难以在内部实现的数据长期保留和可扩展性。如果对于自己进行这些设置和维护感到负担沉重的人,请务必预约MetricFire的演示,了解他们能为您做些什么。

普罗米修斯

Prometheus是一款由SoundCloud在2012年开发的开源告警和监控工具。以下是Prometheus的不同组件:

    • Prometheusサーバー

 

    • プッシュゲートウェイ

 

    • エクスポーター

 

    Alertmanager

下图展示了Prometheus的架构。

image.png

如果您对Prometheus的更详细介绍感兴趣,可以参考以下描述Prometheus架构和配置方法的文章。

    • Prometheusを基礎から解説

 

    【徹底解説】Prometheusエクスポーター

Grafana 是一款数据可视化工具。

Grafana是一种非常通用的数据可视化工具。它可以从各种数据源读取数据,并使用各种可视化选项,如图表、仪表盘、世界地图、热力图等来绘制数据。请务必参考《从基础开始解释Grafana – 尝试实际引入》这篇文章。

安装

在这一部分中,我们通过使用Prometheus来处理数据,将cAdvisor和Redis的信息可视化,并在Grafana中进行可视化。首先,我们使用docker来设置Grafana和Prometheus的测试环境。我们需要使用DockerHub上提供的Grafana和Prometheus的官方Docker镜像,并使用cAdvisor和Redis的Docker镜像。cAdvisor是Google的工具,它收集与正在运行的容器相关的度量,并以包含Prometheus格式在内的各种格式公开这些度量。我们配置cAdvisor以收集来自Redis容器的度量,并在Grafana中进行可视化。

version: '3.2'
services:
 prometheus:
   image: prom/prometheus
   ports:
     - "9090:9090"
   volumes:
     - ./prometheus.yml:/etc/prometheus/prometheus.yml

 grafana:
   image: grafana/grafana
   ports:
   - "3000:3000"

 cadvisor:
   image: google/cadvisor:latest
   container_name: cadvisor
   ports:
   - 8080:8080
   volumes:
   - /:/rootfs:ro
   - /var/run:/var/run:rw
   - /sys:/sys:ro
   - /var/lib/docker/:/var/lib/docker:ro
   depends_on:
   - redis

 redis:
   image: redis:latest
   container_name: redis
   ports:
   - 6379:6379

此外,我们还将创建一个默认的prometheus.yml文件,与docker-compose.yml一起使用。此配置文件包含与Prometheus相关的所有配置。以下配置是Prometheus附带的默认配置。

# my global config
global:
 scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
 evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
 # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
 alertmanagers:
 - static_configs:
   - targets:
     # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
 # - "first_rules.yml"
 # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
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']

当访问 http://localhost:8080/docker/redis 时,您可以查看Redis容器的指标。

以下的截图展示了cAdvisor可以从Redis收集的信息。

image.png

在这里,您需要将cAdvisor的这些指标传送到Prometheus。要实现此目标,您需要将prometheus.yml进行如下更改。

global:
 scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
 evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
 # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
 alertmanagers:
 - static_configs:
   - targets:
     # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
 # - "first_rules.yml"
 # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
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: 'cadvisor'
   static_configs:
   - targets: ['cadvisor:8080']
     labels:
       alias: 'cadvisor'

请注意添加了一个名为cAdvisor的新任务。 Prometheus现在会定期从cAdvisor中获取指标。要反映Prometheus配置文件的更改,需要使用“docker-compose restart prometheus”重新启动。

在Prometheus Web UI的http://localhost:9090/targets页面上应该能够看到两个任务。下面的截图显示了两个任务,一个是针对cAdvisor,另一个是针对Prometheus本身。

image.png

连接到Grafana

由于现在可以将容器度量数据提供给Prometheus,因此现在是使用Grafana进行可视化的时候了。请按照以下步骤,访问http://localhost:3000,并使用admin/admin进行登录,然后添加Prometheus的数据源。

如果使用Docker,请注意本文所述的URL为http://prometheus:9090。这是因为Grafana连接到Prometheus时是从后端(显示为Access: Server)而不是浏览器前端进行连接。对于Grafana容器,Prometheus的位置是http://prometheus:9090,并不是预期的http://127.0.0.1:9090。

image.png

让我们来创建一个简单的Grafana仪表盘,并添加一个简单的图表。非常简单。难点在于配置数据源和提供查询。

使用Prometheus作为数据源,可视化Redis容器的内存使用量。在查询的下拉框中选择Prometheus作为数据源,将使用container_memory_usage_bytes {name = “redis”}作为度量标准。

image.png

总结

Grafana提供了与Prometheus数据源无缝连接的方式,并通过查询提供出色的可视化。如果您想要检查并尝试Grafana,请联系MetricFire。
此外,如果您开始感受到自己设置或运营公司的复杂性,那么请务必预订MetricFire的演示并直接咨询。我们将随时乐意帮助您满足您公司的监控需求。

广告
将在 10 秒后关闭
bannerAds