使用Prometheus和Grafana结合来构建监控平台的方法
首先
虽然Prometheus本身也有简单的可视化工具,但与Grafana的仪表盘相比,其显得逊色不少。因此,建议将Prometheus与Grafana结合使用,作为监视基础设施的方法。本文将介绍如何将Prometheus与Grafana连接,以及Prometheus与其他工具的不同之处。
对于感到在使用Prometheus过程中困难的人来说,
MetricFire的产品Hosted Prometheus可以立即运行带有Grafana仪表板的Prometheus,并实现难以在内部实现的数据长期保留和可扩展性。如果对于自己进行这些设置和维护感到负担沉重的人,请务必预约MetricFire的演示,了解他们能为您做些什么。
普罗米修斯
Prometheus是一款由SoundCloud在2012年开发的开源告警和监控工具。以下是Prometheus的不同组件:
-
- Prometheusサーバー
-
- プッシュゲートウェイ
-
- エクスポーター
- Alertmanager
下图展示了Prometheus的架构。
如果您对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收集的信息。
在这里,您需要将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本身。
连接到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。
让我们来创建一个简单的Grafana仪表盘,并添加一个简单的图表。非常简单。难点在于配置数据源和提供查询。
使用Prometheus作为数据源,可视化Redis容器的内存使用量。在查询的下拉框中选择Prometheus作为数据源,将使用container_memory_usage_bytes {name = “redis”}作为度量标准。
总结
Grafana提供了与Prometheus数据源无缝连接的方式,并通过查询提供出色的可视化。如果您想要检查并尝试Grafana,请联系MetricFire。
此外,如果您开始感受到自己设置或运营公司的复杂性,那么请务必预订MetricFire的演示并直接咨询。我们将随时乐意帮助您满足您公司的监控需求。