如何在Ubuntu 20.04上使用Grafana和Prometheus监控MongoDB

引言

开篇部分

对于数据库管理员来说,避免性能或内存问题非常关键。像Prometheus和Grafana这样的工具可以帮助你监控数据库集群的性能。Prometheus是一个开源的监控和警报平台,它收集并存储时间序列数据。Grafana是一个开源的Web应用程序,用于互动式可视化和分析。它允许你从大量数据源中导入数据,查询这些数据,并在可自定义的图表上显示,以便进行简单的分析。你还可以设置警报,这样你可以快速、方便地接收到异常行为的通知。将它们同时使用可以让你收集、监控、分析和可视化来自MongoDB实例的数据。

在本教程中,您将设置一个MongoDB数据库,并使用Prometheus作为数据源来监控它,并通过Grafana进行可视化。为了实现这一目标,您将配置MongoDB导出器作为Prometheus的目标,这样Prometheus就可以收集您的数据库指标,并将其提供给Grafana使用。

先决条件

要跟随这个教程,你将需要:

  • One Ubuntu 20.04 server with a non-root user with sudo privileges and a firewall configured with ufw, which you can do by following the Initial Server Setup Guide for Ubuntu 20.04.
  • MongoDB installed on the Ubuntu 20.04 server, which you can do by following the tutorial, How To Install MongoDB on Ubuntu 20.04.
  • Grafana installed on the Ubuntu 20.04 server, which you can do by following Steps 1 through 4 of the tutorial, How To Install and Secure Grafana on Ubuntu 20.04.

安装Grafana需要以下内容:

  • A fully registered domain name. This tutorial uses your_domain throughout. You can purchase a domain name on Namecheap, get one for free on Freenom, or use the domain registrar of your choice.
  • The following DNS records set up for your server. You can follow the How To Add Domains article for details on how to add them if you are using Silicon Cloud.An A record with your_domain pointing to your server’s public IP address.
    An A record with www.your_domain pointing to your server’s public IP address.
  • Nginx set up by following the How To Install Nginx on Ubuntu 20.04 tutorial, including a server block for your domain.
  • An Nginx server block with Let’s Encrypt configured, which you can set up by following How To Secure Nginx with Let’s Encrypt on Ubuntu 20.04.

第一步 – 安装和配置Prometheus

Prometheus 是一个开源的系统监控和报警工具包,它以时间序列数据的形式收集和存储度量指标。也就是说,度量信息将与记录它的时间戳一同存储。在这个步骤中,您将安装 Prometheus 并配置它以作为一个服务运行。

安装Prometheus

首先,您需要安装Prometheus。首先登录到您的服务器上,并按照以下步骤更新软件包列表。

  1. sudo apt update

 

接下来,您将为Prometheus创建配置和数据目录。要创建名为prometheus的配置目录,请执行以下命令:

  1. sudo mkdir -p /etc/prometheus

 

接下来,创建数据目录。

  1. sudo mkdir -p /var/lib/prometheus

 

在创建目录之后,您将下载压缩的安装文件。Prometheus的安装文件以压缩文件中的预编译二进制文件形式提供。要下载Prometheus,请访问下载页面。

要下载2.31.0版本,请运行以下命令,并根据需要替换版本号。

  1. wget https://github.com/prometheus/prometheus/releases/download/v2.31.0/prometheus-2.31.0.linux-amd64.tar.gz

 

下载后,解压缩 tarball 文件。

  1. tar -xvf prometheus-2.31.0.linux-amd64.tar.gz

 

解压文件后,找到Prometheus文件夹所在位置。

  1. cd prometheus-2.31.0.linux-amd64

 

然后,将prometheus和promtool二进制文件移动到/usr/local/bin/目录中。

  1. sudo mv prometheus promtool /usr/local/bin/

 

接下来,您将把所有与Prometheus相关的文件移到一个位置:/etc/prometheus/。要移动consoles目录中的控制台文件和console_libraries目录中的库文件,请运行以下命令:

  1. sudo mv consoles/ console_libraries/ /etc/prometheus/

 

控制台和控制台库文件用于启动 Prometheus 图形用户界面。这些文件将与配置文件一起保存,以便在启动服务时使用。

最后,将prometheus.yml模板配置文件移动到/etc/prometheus/目录中。

  1. sudo mv prometheus.yml /etc/prometheus/prometheus.yml

 

prometheus.yml是模板配置文件,在此您可以配置Prometheus的端口以及在启动服务时要使用哪些文件。

要检查安装的Prometheus的版本,请运行以下命令:

  1. prometheus –version

 

你会收到类似于这样的输出:

Output

prometheus, version 2.31.0 (branch: HEAD, revision: b41e0750abf5cc18d8233161560731de05199330) build user: root@0aa1b7fc430d build date: 20220714-15:13:18 go version: go1.18.4 platform: linux/amd64

在这个部分,你安装了Prometheus并验证了它的版本。接下来,你将把它作为一个服务启动。

将Prometheus作为一项服务运行

既然你已经安装了Prometheus,现在你需要将其配置为一个服务来运行。

在创建系统文件以实现此目标之前,您需要创建一个Prometheus组和用户。您需要一个具有对必要目录的所有者访问权限的专用用户。要创建一个prometheus组,请运行以下命令:

  1. sudo groupadd –system prometheus

 

接下来,创建一个 Prometheus 用户并将其分配给刚刚创建的 Prometheus 用户组。

  1. sudo useradd -s /sbin/nologin –system -g prometheus prometheus

 

更改目录的所有权和权限,以便专用用户具有正确的权限。

  1. sudo chown -R prometheus:prometheus /etc/prometheus/ /var/lib/prometheus/
  2. sudo chmod -R 775 /etc/prometheus/ /var/lib/prometheus/

 

接下来,您将创建服务文件以将Prometheus作为一个服务运行。使用nano或您喜欢的文本编辑器,创建一个名为prometheus.service的systemd服务文件。

  1. sudo nano /etc/systemd/system/prometheus.service

 

添加下面的代码行:

/etc/systemd/system/prometheus.service 的中文本地语言翻译为:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Restart=always
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries \
    --web.listen-address=0.0.0.0:9090

[Install]
WantedBy=multi-user.target

使用这个代码,您可以配置Prometheus使用ExecStart块中列出的文件来运行服务。服务文件告诉systemd以prometheus用户运行Prometheus,并使用配置文件/etc/prometheus/prometheus.yml,并将数据存储在/var/lib/prometheus目录中。您还将Prometheus配置为在9090端口上运行。(systemd服务文件的详细信息超出了本教程的范围,但您可以在了解Systemd Units and Unit Files中了解更多信息。)

保存并关闭您的文件。如果使用nano,请按下CTRL+X,然后按Y。

现在,启动Prometheus服务。

  1. sudo systemctl start prometheus

 

设置Prometheus服务在启动时运行。

  1. sudo systemctl enable prometheus

 

您可以使用以下命令检查服务的状态:

  1. sudo systemctl status prometheus

 

输出将确认服务是否处于活动状态。

输出
● prometheus.service - Prometheus
     Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-08-05 18:06:05 UTC; 13s ago
   Main PID: 7177 (prometheus)
      Tasks: 6 (limit: 527)
     Memory: 21.0M
     CGroup: /system.slice/prometheus.service
             └─7177 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/ --web.console.template>

要访问Prometheus,打开浏览器并访问你的服务器IP地址后接端口号9090:http://your_server_ip:9090。

Note

注意:要访问Prometheus的Web控制台,您可能需要在服务器上允许9090端口。要检查当前的UFW规则集,请运行以下命令:sudo ufw status

如果9090端口还没被允许,您可以使用以下命令来添加:sudo ufw allow 9090

您现在可以访问Prometheus网页控制台了。

Screencapture showing the Prometheus web console

在这一步中,您安装了Prometheus并配置了它以作为一个服务运行。接下来,您将使用MongoDB导出器将您的MongoDB数据库绑定到Prometheus。

步骤2 — 配置MongoDB导出器

Prometheus通过抓取目标来收集指标数据。在此步骤中,您将安装并配置MongoDB导出器作为Prometheus的目标,使其可以从您的MongoDB实例中收集数据。

安装MongoDB导出器

在这个部分,您将安装MongoDB导出器。首先,创建一个导出器的目录并进入它:

  1. mkdir mongodb-exporter
  2. cd mongodb-exporter

 

可以从Github上下载MongoDB导出程序。该导出程序以二进制文件的形式打包在一个存档文件中,但你可以配置它作为一个服务运行。使用以下命令下载二进制文件:

  1. wget https://github.com/percona/mongodb_exporter/releases/download/v0.7.1/mongodb_exporter-0.7.1.linux-amd64.tar.gz

 

接下来,将下载的压缩文件解压到当前文件夹内。

  1. tar xvzf mongodb_exporter-0.7.1.linux-amd64.tar.gz

 

最后,将mongodb_exporter二进制文件移动到usr/local/bin/。

  1. sudo mv mongodb_exporter /usr/local/bin/

 

在这个部分,您安装了MongoDB导出器。接下来,您将启用MongoDB身份验证并创建一个用于监视的用户。

启用MongoDB身份验证

在这一部分中,您将为MongoDB导出器设置MongoDB身份验证,并创建一个用户来监控集群的指标。

从mongo连接到您的MongoDB实例开始。

  1. mongo

 

你将为你的出口商创建一个带有集群监视角色的管理员账户。切换到 admin 数据库。

  1. use admin

 

切换到管理员数据库后,创建一个具有clusterMonitor角色的用户。

  1. db.createUser({user: test,pwd: testing,roles: [{ role: “clusterMonitor”, db: “admin” },{ role: “read”, db: “local” }]})

 

你将会收到以下的输出结果:

Successfully added user: {
        "user" : "test",
        "roles" : [
                {
                        "role" : "clusterMonitor",
                        "db" : "admin"
                },
                {
                        "role" : "read",
                        "db" : "local"
                }
        ]
}

创建用户后,退出MongoDB shell。

  1. exit

 

接下来,使用适当的身份验证凭据设置您的MongoDB URI环境变量。

export MONGODB_URI=mongodb://test:testing@localhost:27017

将MONGODB_URI设置为之前设置的身份验证凭据所使用的MongoDB实例(测试用户和测试密码)。27017是MongoDB实例的默认端口。当您设置环境变量时,它优先于存储在配置文件中的配置文件。

要检查MongoDB URI环境变量是否设置正确,请运行以下命令:

  1. env | grep mongodb

 

你将会收到以下的输出结果:

MONGODB_URI=mongodb://mongodb_exporter:password@localhost:27017

在这一部分中,您创建了一个具有集群监视角色的MongoDB用户,该角色有助于监视集群指标。接下来,您将配置MongoDB导出器作为一个服务来运行。

为MongoDB导出器创建一个服务

在本节中,您将为MongoDB导出程序创建一个系统文件,并将其运行为一个服务。

导航到 /lib/systemd/system 并使用nano或您喜欢的文本编辑器为出口器创建一个新的服务文件。

  1. cd /lib/systemd/system/
  2. sudo nano mongodb_exporter.service

 

将以下配置粘贴到您的服务文件中:

/lib/systemd/system/mongodb_exporter.service 的汉语译文:
mongodb导出器服务。
[Unit]
Description=MongoDB Exporter
User=prometheus

[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/mongodb_exporter

[Install]
WantedBy=multi-user.target

这个服务文件告诉systemd在prometheus用户下将MongoDB导出器作为一个服务运行。ExecStart将从usr/local/bin/运行mongodb_exporter二进制文件。了解更多关于systemd服务文件的信息,请查看理解Systemd Units and Unit Files。

保存并关闭您的文件。

接下来,重新启动你的系统守护进程以重新加载单元文件。

  1. sudo systemctl daemon-reload

 

现在,开始您的服务吧。

  1. sudo systemctl start mongodb_exporter.service

 

要检查MongoDB导出服务的状态,请运行以下命令:

  1. sudo systemctl status mongodb_exporter.service

 

输出结果将会确认该服务是正常运行的。

输出
● mongodb_exporter.service - MongoDB Exporter
     Loaded: loaded (/lib/systemd/system/mongodb_exporter.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-08-05 18:18:38 UTC; 1 weeks 3 days ago
   Main PID: 7352 (mongodb_exporte)
      Tasks: 5 (limit: 527)
     Memory: 14.2M
     CGroup: /system.slice/mongodb_exporter.service
             └─7352 /usr/local/bin/mongodb_exporter

为了确保一切按预期工作,请导航至项目根目录并在9216端口上运行curl命令,该端口是导出程序运行的位置。

  1. cd ~
  2. sudo curl http://localhost:9216/metrics

 

输出会很长,并且会包含类似于这样的行。

Output

# HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile=”0″} 0 go_gc_duration_seconds{quantile=”0.25″} 0 go_gc_duration_seconds{quantile=”0.5″} 0 go_gc_duration_seconds{quantile=”0.75″} 0 go_gc_duration_seconds{quantile=”1″} 0 go_gc_duration_seconds_sum 0 go_gc_duration_seconds_count 0 # HELP go_goroutines Number of goroutines that currently exist. # TYPE go_goroutines gauge go_goroutines 11 # HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. # TYPE go_memstats_alloc_bytes gauge go_memstats_alloc_bytes 1.253696e+06 # HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. # TYPE go_memstats_alloc_bytes_total counter go_memstats_alloc_bytes_total 1.253696e+06 # HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. # TYPE go_memstats_buck_hash_sys_bytes gauge go_memstats_buck_hash_sys_bytes 3054 # HELP go_memstats_frees_total Total number of frees. # TYPE go_memstats_frees_total counter go_memstats_frees_total 2866 # HELP go_memstats_gc_sys_byte . . . # HELP mongodb_asserts_total The asserts document reports the number of asserts on the database. While assert errors are typically uncommon, if there are non-zero values for the asserts, you should check the log file for the mongod process for more information. In many cases these errors are trivial, but are worth investigating. # TYPE mongodb_asserts_total counter mongodb_asserts_total{type=”msg”} 0 mongodb_asserts_total{type=”regular”} 0 mongodb_asserts_total{type=”rollovers”} 0 mongodb_asserts_total{type=”user”} 19 mongodb_asserts_total{type=”warning”} 0 # HELP mongodb_connections The connections sub document data regarding the current status of incoming connections and availability of the database server. Use these values to assess the current load and capacity requirements of the server # TYPE mongodb_connections gauge mongodb_connections{state=”available”} 51198 mongodb_connections{state=”current”} 2 # HELP mongodb_connections_metrics_created_total totalCreated provides a count of all incoming connections created to the server. This number includes connections that have since closed # TYPE mongodb_connections_metrics_created_total counter mongodb_connections_metrics_created_total 6 # HELP mongodb_exporter_build_info A metric with a constant ‘1’ value labeled by version, revision, branch, and goversion from which mongodb_exporter was built. # TYPE mongodb_exporter_build_info gauge mongodb_exporter_build_info{branch=”v0.7.1″,goversion=”go1.11.10″,revision=”3002738d50f689c8204f70f6cceb8150b98fa869″,version=”0.7.1″} 1 # HELP mongodb_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from MongoDB. # TYPE mongodb_exporter_last_scrape_duration_seconds gauge mongodb_exporter_last_scrape_duration_seconds 0.003641888 # HELP mongodb_exporter_last_scrape_error Whether the last scrape of metrics from MongoDB resulted in an error (1 for error, 0 for success). # TYPE mongodb_exporter_last_scrape_error gauge mongodb_exporter_last_scrape_error 0 . . . …

输出结果证实了MongoDB导出器正在收集指标,例如MongoDB版本、指标文档和连接详细信息。

在这一部分,您将MongoDB导出器配置为服务,并从MongoDB收集指标。接下来,您将将导出器配置为Prometheus的目标。

将MongoDB导出器配置为Prometheus目标

在这个部分中,您将将MongoDB导出程序配置为Prometheus的目标。导航到保存您的Prometheus配置文件的目录中。

  1. cd /etc/prometheus/

 

使用Nano或你最喜欢的文本编辑器,打开文件进行编辑:

  1. sudo nano prometheus.yml

 

将MongoDB导出程序作为目标添加到您的文件中,只需将突出显示的行复制粘贴进去。

/etc/prometheus/prometheus.yml 可以被释义为「/etc/prometheus/prometheus配置文件」。
# 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"
    static_configs:
            - targets: ["localhost:9090", "localhost:9216"]

MongoDB exporter的默认端口是9216。

保存并关闭您的文件。

在添加目标之后,重新启动Prometheus。

  1. sudo systemctl restart prometheus

 

请转到http://localhost:9090/targets以验证Prometheus是否正在抓取您新添加的导出器。

Note

注意:如果您正在使用远程服务器,请通过在浏览器中导航到http://your_server_ip:9090/targets来查看目标。您也可以使用端口转发在本地查看目标。要做到这一点,请在本地计算机上打开新的终端并输入以下命令:
ssh -L 9090:localhost:9090 your_non_root_user@your_server_ip

在连接到服务器后,请在本地计算机的Web浏览器中导航到http://localhost:9090/targets。

你将能够访问一个Prometheus目标列表。

Screencapture showing the list of Prometheus targets

9090端点是Prometheus在进行自我抓取。9216端点是MongoDB导出器,可以确认您的配置正常工作。

在这一步中,您安装了MongoDB导出器,并将其配置为Prometheus的目标,以收集度量数据。接下来,您将在Grafana Web控制台中创建一个MongoDB仪表板,用于查看和分析这些度量数据。

第三步 – 在Grafana中构建MongoDB仪表盘

在这一步中,您将构建一个仪表盘,用于在Grafana中可视化您的MongoDB数据。为了实现这一目标,在Grafana中添加Prometheus作为数据源,并从Percona导入一个MongoDB仪表盘。Percona为MongoDB提供了多个仪表盘,您可以在Percona产品文档中找到。在本教程中,您将在Grafana实例中导入MongoDB概述仪表盘。首先,您将设置Prometheus作为Grafana的数据源。

作为先决条件的一部分,您已经安装并保护了Grafana。在您的域名:3000上导航到您的Grafana实例,并使用您在先决条件中创建的凭据登录。

在左面板中,点击配置的齿轮图标,然后选择数据源。

Screencapture showing adding a Data Source under the Configuration tab in Grafana

点击添加数据源

Screencapture showing the button for adding a data source in Grafana

然后选择普罗米修斯。 pǔ luó mǐ xiū sī.)

Screencapture showing selecting Prometheus as a data source in Grafana

在接下来的屏幕上,您将配置Prometheus数据源的设置。

Screencapture showing the configuration settings for the Prometheus data source in Grafana

在网址栏中,提供您的Prometheus实例的网址:

http://your_server_ip:9090/

点击屏幕底部的“保存并测试”按钮。现在,Prometheus已作为Grafana的数据源添加进去。

接下来,您将为Grafana导入MongoDB概览仪表板。您可以通过上传JSON文件或导入仪表板ID来导入仪表板,仪表板ID可以在Grafana产品文档中的仪表板部分找到。在这里,您将使用仪表板ID来导入仪表板。

在左侧菜单中,点击创建的加号图标并选择导入。然后,你应该进入到导入页面。

Screencapture showing the option to add Prometheus as a data source in Grafana

在这里,您可以上传仪表板的JSON文件或粘贴Grafana仪表板ID:

Screencapture showing the options for uploading a JSON file or adding a Dashboard ID

请添加 Grafana 仪表盘 ID,在 MongoDB 概览仪表盘的 Grafana 页面上可以找到该 ID。

https://grafana.com/grafana/dashboards/7353

有许多仪表板可用。您可以通过访问Grafana的仪表板页面找到更多选项。

在添加仪表板ID后,点击“加载”。

现在将打开一个选项页面,您可以为仪表板提供名称,选择仪表板所在的文件夹,并选择数据源。您可以将仪表板和文件夹名称保留为默认设置。对于数据源,请选择Prometheus。一旦填写完选项,点击导入按钮。

将创建仪表板。

Screencapture showing the MongoDB Overview Dashboard in Grafana

您的仪表板将显示MongoDB数据库的实时更新,包括命令操作、连接、游标、文档操作和排队操作。(欲了解更多详细信息,请查阅Percona提供的MongoDB概览仪表板文档。)

结论

在本文中,你将创建一个Grafana仪表板,用于监控MongoDB数据库的Prometheus指标,从而可以通过GUI仪表板监控数据库。首先,你安装了Prometheus并配置了MongoDB导出器。然后,你将Prometheus作为数据源添加到Grafana中,从而可以监控和可视化来自MongoDB实例的数据。

现在你已经有了一个完全操作的MongoDB监控流水线,你可以深入挖掘一下。为了开始,尝试在Grafana中探索额外的仪表板。

要了解更多有关MongoDB的内容,请查看我们的《如何使用MongoDB管理数据》教程系列。

想要快速建立一个完全可用的数据库环境,请考虑查看Silicon Cloud的MongoDB托管数据库服务。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds