使用 Prometheus 和 Grafana 的 Vertica 监控方案¶
本视频提供了一个端到端的监控方案,使用两个 Vertica 开源项目——Vertica Grafana Plugin 和 Vertica Prometheus Exporter。它演示了如何将 Vertica 指标导入 Prometheus,并根据需求使用 Prometheus 或 Grafana 对这些指标进行可视化。观看YouTube视频获取更多详情!
Prometheus 是一套开源系统监控和告警工具包。自 2012 年诞生以来,许多公司和组织已经采用了 Prometheus,该项目拥有非常活跃的开发者和用户社区。Prometheus 将指标以时间序列数据进行收集和存储,即指标信息与记录时的时间戳一起存储,同时附带可选的键值对(称为标签)。
客户希望能够将 Vertica 指标采集到 Prometheus 中,从而可以选择在一个统一的面板环境(如 Grafana)中对这些指标及其余基础设施进行可视化和监控。
Grafana 允许您查询、可视化、告警和理解您的指标,无论它们存储在何处。Grafana 采取独特的方法,通过统一您现有的数据(无论数据在哪里)来提供"单一管理面板"(single-pane-of-glass)。
我们开发了 vertica-prometheus-exporter 作为满足这一需求的解决方案。该 exporter 是一个开源项目。它使用收集器(collector)文件将 Vertica SQL 查询结果映射为 Prometheus 格式,并具备 HTTP 能力,可以作为 Prometheus 的抓取目标。
本文档提供了一个端到端的解决方案,介绍如何使用 vertica-prometheus-exporter 从 Vertica 系统表中抓取指标,让 Prometheus 将 exporter 作为抓取目标,并在 Grafana 仪表板中对 Prometheus 中存储的指标进行可视化。
下图说明了此方案的高层工作流程。vertica-prometheus-exporter 将 Vertica 中的指标拉取到 Prometheus 监控系统中。本指南详细说明了需要在 exporter 和 Prometheus 中进行的配置。您可以根据需要跟踪和可视化的关键指标来进行配置和设置。在我们的测试中,我们使用 Grafana 进行数据可视化,因为它与 Prometheus 有着经过验证的集成能力。也可能有其他工具可以将 Prometheus 作为数据源使用。

适用范围¶
本文档的前提条件是读者熟悉 Linux、Vertica、Prometheus 和 Grafana。
本文档不涉及 Vertica、Prometheus 或 Grafana 的安装。它将展示已安装的 exporter 的目录结构和需要了解的关键文件。同时涵盖栈中各组件的配置和运行,以便在 Prometheus 和 Grafana 中可视化 Vertica 指标。
有关 exporter 的更详细信息,请参阅 vertica-prometheus-exporter GitHub 页面上的 README.md 文件和 documentation 文件夹中的文档。
我们的测试环境¶
- Vertica 12.0.1 安装在包含 VMart 示例数据库的 3 节点 Linux VM 集群上。
- vertica-prometheus-exporter 1.0.2 tarball 安装在 Linux VM 上。
- Prometheus 2.25.0 安装在 Linux VM 上。
- Grafana 9.0.2 安装在 Linux VM 上,并使用 Prometheus 数据源 5.0.0 插件。
本解决方案指南按三个主要部分分类:
- 使用 Vertica Prometheus Exporter
- 设置 Prometheus 并可视化 Vertica 指标
- 使用 Grafana 和 Prometheus 数据源插件可视化 Vertica 指标
阅读指南时,您可以展开和折叠主题以获取更多详细信息。
使用 Vertica Prometheus Exporter¶
vertica-prometheus-exporter 是一个配置驱动的 exporter,它将从 Vertica 数据库收集的指标暴露给 Prometheus 监控系统,以及支持 Prometheus 作为数据源的工具(如 Grafana)。该 exporter 使用 GO 语言编写,并通过 vertica-sql-go 驱动连接到 Vertica 数据库。
该 exporter 的核心概念基于这样的思路:一个合适的 Vertica 查询可以轻松映射到一组标签和一个或多个数值上,从而构成一个有效的 Prometheus 指标。
Vertica Prometheus Exporter 功能特性¶
vertica-prometheus-exporter 的一些关键特性包括:
- 两种分发方式:GitHub 上提供两种分发类型。
- Tarball:体积小巧的 tar 文件,包含二进制文件、文档、许可证、配置和示例文件。
- 完整源代码:支持构建非 Docker 二进制文件或优化的 Docker 容器。
- 当前支持 Linux amd64 部署。
- 详细日志记录,带有按时间和/或大小调整保留期的控制开关。
- 收集器文件可以拥有自己的缓存间隔,以优化连接数和针对 Vertica 的查询频率。
- 最终用户定义自己所需的指标集和缓存策略。
- 开源,用户可以通过 GitHub 社区分享他们的 bug 修复、增强功能和指标收集器文件。
设置 Vertica Prometheus Exporter¶
使用 Tarball 或源代码分发¶
vertica-prometheus-exporter 提供两种分发类型:tarball(预编译的最小占用版本)和源代码(完整的源代码)。以下是两种分发的顶层目录树对比。
Tarball:
[dbadmin@exporter ~]$ ls vertica-prometheus-exporter-v1.0.2.linux-amd64
documentation LICENSE logfile metrics README.md vertica-prometheus-exporter
源代码:
[dbadmin@exporter ~]$ ls vertica-prometheus-exporter-1.0.2
cmd config Dockerfile errors exporter.go go.sum LICENSE metric.go README.md target.go VERSION collector.go CONTRIBUTING.md documentation examples go.mod job.go Makefile query.go sql.go test
exporter 的 metrics 目录中一些值得注意的文件如下:
- vertica-prometheus-exporter.yml —— exporter 配置文件,包含连接、min_interval 缓存、连接字符串、收集器文件和日志的全局设置。
- vertica-example.collector.yml —— 可在仪表盘(gauge)中可视化的指标示例,例如许可证大小、数据库大小、宕机节点数。
- vertica-example1.collector.yml —— 可在图表(graph)中可视化的指标示例,例如每个节点的连接数、网络或 IO 的 RX 和 TX 流量。
配置全局设置 - vertica-prometheus-exporter.yml¶
全局配置文件 vertica-prometheus-exporter.yml 包含两个主要部分。
- 文件顶部是 "global" 部分,包含连接和抓取设置。
在这里您可以限制与 Vertica 的连接数并设置 min_interval 缓存时长。我们将此部分的所有设置保留为默认值。请注意,min_interval 全局设置为 "0"。

- 文件底部包含 "target"、"collector_files" 和 "Log" 部分。
在这里您可以设置连接到 Vertica 的数据源名称(连接字符串),包括您想要的任何参数(例如负载均衡)。此外,您还可以列出要加载的特定收集器文件及其文件名。

data_source_name
对于此方案,我们将修改数据源名称以适配我们的特定环境。数据源名称格式与其使用的 vertica-sql-go 驱动相同:vertica://(user):(password)@(host):(port)/(database)?(queryArgs)。
collectors: [example, example1]
collectors 键列出了 exporter 附带的两个示例收集器文件。我们将使用默认值。
[dbadmin@exporter vertica-prometheus-exporter-v1.0.2.linux-amd64]$ head -5 metrics/vertica-example.collector.yml
collector_name: example
[dbadmin@exporter vertica-prometheus-exporter-v1.0.2.linux-amd64]$ head -5 metrics/vertica-example1.collector.yml
collector_name: example1
注意:此列表中的名称必须与收集器文件中
collector_name键值匹配。
collector_files 键使用全局文件规范。我们将使用默认值。
注意:
collectors键中列出的两个收集器必须存在于 metrics 目录中,并且与collector_files键指定的名称(或本例中的通配符命名)匹配。
[dbadmin@exporter vertica-prometheus-exporter-v1.0.2.linux-amd64]$ ls metrics/*collector.yml
metrics/vertica-example1.collector.yml metrics/vertica-example.collector.yml
配置指标收集 - vertica-example.collector.yml 和 vertica-example1.collector.yml¶
以下是我们随 exporter 分发的两个示例收集器文件中指标定义的一些摘要。
- 在 vertica-example.collector.yml 中,可以看到
min_interval设置为全局默认值 "0s"。这意味着不对值进行缓存,因此 Prometheus 每次抓取都会从 Vertica 获取全新的指标集合。您还可以看到每个指标都有自己的 SQL 查询,这意味着每次刷新时,每个指标都会建立一次连接并执行一次查询。

- 在 vertica-example1.collector.yml 中,可以看到
min_interval设置为 "90s"。这意味着对值进行缓存,Prometheus 每次抓取时会将缓存时长与 min_interval 进行比较,只有当缓存时长超过 min_interval 时,才会从 Vertica 执行新的指标收集。详见下面的说明。

同样在 vertica-example1.collector.yml 中,可以看到每个指标使用一个 query_ref,指向包含所需列的单个查询。在该文件中,实际上有 6 个指标都引用同一个查询,因此 Prometheus 抓取触发从 Vertica 进行新指标收集时,将只建立 1 次连接和执行 1 次查询,而不是 6 次。

说明: example 的 min_interval 与全局值相同,但 example1 中的 min_interval 不同,它会覆盖全局设置。90s 意味着对于此收集器中的所有指标,结果将在内存中缓存 90 秒。在 90 秒内的任何请求将获取缓存中的数据。90 秒之后的任何请求将强制 exporter 启动新的缓存并从 Vertica 抓取新值。
启动 Exporter¶
启动 exporter 的方式是向其传递配置文件。在以下启动输出中,可以看到它启动了,输出一些版本和构建信息,加载收集器文件,显示 example1 使用了 min_interval 缓存设置,并开始监听端口 9968。

注意: 您可以使用
nohup启动 exporter,以便在断开终端会话后它在后台继续运行。
直接访问 Exporter¶
启动 exporter 后,您可以使用 CURL 直接访问它以确认其工作正常。您将获取到指标的 HELP、TYPE 和带标签的结果。

请注意,在 exporter 输出中显示它正在收集全新的指标,因为这是第一次收集,启动时尚无缓存。

现在,如果您运行 curl 命令,等待 15 或 20 秒,然后再次运行。在 exporter 输出中,会显示对于 example1(min_interval 设置为 90s)正在使用缓存的指标,而对于 example(min_interval 设置为 0)正在收集全新的指标。

设置 Prometheus 并可视化 Vertica 指标¶
本节说明如何设置抓取目标并配置 Prometheus 来抓取指标,然后使用 Prometheus 提供的表格和图表进行可视化。
配置 Prometheus - Prometheus.yml¶
Prometheus 有一个配置文件 Prometheus.yml。在该文件中,有一个 "scrape_config" 部分。这是您设置希望 Prometheus 抓取的目标的地方。一个目标通常包含一个 job 名称和一个 static_config。
在本例中,我们将 job 名称设置为 "verticaexporter",并将 scrape_config 的目标设置为监听在端口 9968 的 exporter。

注意: Prometheus 有一个全局的
scrape_interval设置。它控制抓取列表目标的频率。默认值是每分钟一次,您可以根据指标需求进行调整。如果您有多个目标且需要不同的抓取间隔,也可以在scrape_config中为每个目标单独指定。
启动 Prometheus¶
启动 Prometheus 的方式是向其传递配置文件。它会输出一些版本信息,读取配置文件,启动其内部数据库,并开始监听端口 9090。


注意: 您可以使用
nohup启动 Prometheus,以便在断开终端会话后它在后台继续运行。
配置 Prometheus Targets¶
Prometheus 有一个用于管理和监控服务器的 Web 界面。
其中一个可用视图是 Status > Targets。
它列出了从配置文件加载的目标及其当前状态。我们可以看到 verticaexporter(我们在配置文件中设置的 job 名称)的状态为 up。

配置 Prometheus Metrics¶
如果点击 verticaexporter 的超链接,将显示指标页面。
注意: 这与我们直接使用 CURL 访问 exporter 时看到的页面相同。您可以使用 CURL 方法进行调试,直到结果符合预期,然后将其添加为 Prometheus 的抓取目标,从而对结果有信心。

使用 Prometheus 表格和图表可视化 Vertica 指标¶
Prometheus 具有一些基本的表格和图表功能。您可以使用它们来查看 Vertica 指标的简单可视化。
-
在 Prometheus Web 界面中选择 Graph 菜单。 这将打开一个仪表板界面。您有 Table 或 Menu 标签页可供选择。
-
选择 Table。
-
在 Expression 字段的最右侧有一个"眼睛"图标。点击它以打开 Metric Explorer。
您可以看到 exporter 正在抓取并格式化为 Prometheus 格式的 Vertica 指标列表。

-
在此示例中,我们选择了
vertica_query_requests_transactions_count_per_node指标。 -
点击 Execute。
结果将显示在 Prometheus Table 面板中。

- 您可以点击 Graph 标签页切换到相同数据的图表,添加面板并选择其他指标,以此类推。
如果您只需要简单、无修饰的指标面板,Prometheus 可能就足够了。如果您希望更灵活地控制可视化效果,则可以使用像 Grafana 这样带有 Prometheus 数据源插件的工具。
使用 Grafana 和 Prometheus 数据源插件可视化 Vertica 指标¶
本节说明如何安装 Grafana Prometheus 数据源插件、配置数据源、以及在 Grafana 中构建 Vertica 指标的仪表板并进行可视化。
设置 Grafana Prometheus 数据源插件¶
- 在 Grafana 的 Data Sources 配置中,找到并安装 Prometheus 插件。

- 配置一个 Prometheus 数据源。

注意: Prometheus 数据源配置界面还有其他一些选项。由于本练习中这些是感兴趣的字段,我们展示的是截断后的截图。
可视化 Vertica 指标¶
配置 Prometheus 数据源后,您可以对 Vertica 已捕获的指标进行可视化。
- 我们创建了一个新的仪表板(dashboard)、一个新的面板(panel),选择了 Prometheus 数据源,并下拉可用指标列表。

- 在图表中,我们选择了与 Prometheus Web 界面中相同的指标——
vertica_query_requests_transactions_count_per_node。

- 这里我们将面板类型从 Graph 切换为 Table。请注意,表格底部有一个下拉菜单,用于选择要查看的节点。

- 这里我们将面板类型切换为 Gauge。请注意,每个节点在单个面板中拥有自己的仪表盘。

Prometheus 仅支持数值。
假设您正在使用 exporter 跟踪事务计数,但希望查看事务信息本身。Vertica Grafana 数据源插件支持文本值。因此,在此界面中,我们向仪表板添加了一个使用 Vertica Grafana 数据源的面板,用于显示最近的事务。
这展示了二者如何相互补充。同时,它也说明了统一仪表板的使用方式。您可以在 Grafana 中构建一个仪表板,其中包含来自多个不同数据源的面板。

方案总结¶
在本解决方案文档中,我们演示了 exporter 所运行的基本技术栈。我们说明了从 exporter 一直到在 Grafana 中可视化 Vertica 指标这一栈构建过程的基本步骤。该方案使用户能够将 Vertica 数据检索到广泛使用的 Prometheus 格式中,然后用于在公共仪表板中可视化指标。在该路径的每一步,我们都展示了可视化方面的可能性。
您的技术栈可能仅仅是 exporter 加上在 cron 作业中执行 CURL 命令。也可能止步于 Prometheus,使用简单的表格和图表,或者使用完整的栈(Grafana 或类似工具)来构建更复杂的仪表板。它足够灵活,可以根据您的需求进行配置。如您所见,您可能需要组合使用多种工具来获取所需的指标。
参考资料¶
- vertica-prometheus-exporter (GitHub)
- Prometheus - Monitoring system & Time Series Database
- Grafana: The Open Observability platform | Grafana Labs
- Prometheus | Grafana documentation