Как контролировать MongoDB с помощью Grafana и Prometheus в Ubuntu 20.04
Автор выбрал программу Write for DOnations.
Введение
Администраторам баз данных крайне важно избегать проблем с производительностью или памятью. Такие инструменты, как данные временных рядов. Grafana — это веб-приложение с открытым исходным кодом для интерактивной визуализации и анализа. Он позволяет вам получать данные из огромного количества источников данных, запрашивать эти данные и отображать их на настраиваемых диаграммах для удобного анализа. Также можно настроить оповещения, чтобы вы могли быстро и легко получать уведомления о неожиданном поведении. Их совместное использование позволяет собирать, отслеживать, анализировать и визуализировать данные из вашего экземпляра MongoDB.
В этом руководстве вы настроите базу данных MongoDB и будете отслеживать ее с помощью Grafana, используя Prometheus в качестве источника данных. Для этого вы настроите экспортер MongoDB в качестве цели Prometheus, чтобы Prometheus мог очищать метрики вашей базы данных и делать их доступными для Grafana.
Предпосылки
Чтобы следовать этому руководству, вам понадобятся:
- Один сервер Ubuntu 20.04 с пользователем без полномочий root с привилегиями
sudo
и брандмауэром, настроенным с помощьюufw
, что можно сделать, следуя Руководству по начальной настройке сервера для Ubuntu. 20.04. - MongoDB установлен на сервере Ubuntu 20.04, что можно сделать, следуя руководству Как установить MongoDB на Ubuntu 20.04.
- Grafana установлена на сервере Ubuntu 20.04, что можно сделать, выполнив шаги с 1 по 4 руководства Как установить и защитить Grafana в Ubuntu 20.04.
Для установки Grafana вам потребуется следующее:
- Полностью зарегистрированное доменное имя. В этом руководстве везде используется
ваш_домен
. Вы можете приобрести доменное имя на Freenom или воспользоваться услугами регистратора доменов по вашему выбору. - Для вашего сервера настроены следующие записи DNS. Вы можете прочитать статью «Как добавить домены», чтобы узнать, как их добавить, если вы используете DigitalOcean.
- Запись A с
your_domain
, указывающая на общедоступный IP-адрес вашего сервера. - Запись A с
www.your_domain
, указывающая на общедоступный IP-адрес вашего сервера.
Шаг 1 — Установка и настройка Prometheus
Prometheus — это набор инструментов для системного мониторинга и оповещения с открытым исходным кодом, который собирает и сохраняет метрики в виде данных временных рядов. То есть информация о показателях сохраняется с отметкой времени, когда она была записана. На этом шаге вы установите Prometheus и настроите его для работы в качестве службы.
Установка Прометея
Во-первых, вам нужно будет установить Prometheus. Начните с входа на сервер и обновления списков пакетов следующим образом:
- sudo apt update
Далее вы создадите каталоги конфигурации и данных для Prometheus. Чтобы создать каталог конфигурации с именем
prometheus
, выполните следующую команду:- sudo mkdir -p /etc/prometheus
Затем создайте каталоги данных:
- sudo mkdir -p /var/lib/prometheus
После создания каталогов вы загрузите сжатый установочный файл. Установочные файлы Prometheus поставляются в виде предварительно скомпилированных двоичных файлов в сжатых файлах. Чтобы загрузить Prometheus, посетите страницу загрузки.
Чтобы загрузить версию
2.31.0
, выполните следующую команду, при необходимости заменив номер версии:- wget https://github.com/prometheus/prometheus/releases/download/v2.31.0/prometheus-2.31.0.linux-amd64.tar.gz
После загрузки извлеките файл tarball:
- tar -xvf prometheus-2.31.0.linux-amd64.tar.gz
После извлечения файла перейдите в папку Prometheus:
- cd prometheus-2.31.0.linux-amd64
Затем переместите двоичные файлы
prometheus
иpromtool
в каталог/usr/local/bin/
:- sudo mv prometheus promtool /usr/local/bin/
Далее вы переместите все файлы, связанные с Prometheus, в одно место:
/etc/prometheus/
. Чтобы переместить файлы консоли в каталогconsoles
и файлы библиотек в каталогconsole_libraries
, выполните следующую команду:- sudo mv consoles/ console_libraries/ /etc/prometheus/
Файлы консоли и библиотеки консоли используются для запуска графического интерфейса Prometheus. Эти файлы будут храниться вместе с файлами конфигурации, чтобы их можно было использовать при запуске службы.
Наконец, переместите файл конфигурации шаблона
prometheus.yml
в каталог/etc/prometheus/
:- sudo mv prometheus.yml /etc/prometheus/prometheus.yml
prometheus.yml
— это файл конфигурации шаблона, в котором вы будете настраивать порт для Prometheus и какие файлы использовать при запуске службы.Чтобы проверить установленную версию Prometheus, выполните команду:
- prometheus --version
Вы получите примерно такой вывод:
Outputprometheus, 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
, выполните следующую команду:- sudo groupadd --system prometheus
Затем создайте пользователя
prometheus
и назначьте его только что созданной группеprometheus
:- sudo useradd -s /sbin/nologin --system -g prometheus prometheus
Измените владельца каталога и разрешения следующим образом, чтобы выделенный пользователь имел правильные разрешения:
- sudo chown -R prometheus:prometheus /etc/prometheus/ /var/lib/prometheus/
- sudo chmod -R 775 /etc/prometheus/ /var/lib/prometheus/
Далее вы создадите файл службы для запуска Prometheus в качестве службы. Используя
nano
или ваш любимый текстовый редактор, создайте служебный файлsystemd
с именемprometheus.service
:- sudo nano /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.)Сохраните и закройте файл. Если вы используете
nano
, нажмитеCTRL+X
, а затемY
.Теперь запустите службу Prometheus:
- sudo systemctl start prometheus
Включите службу Prometheus для запуска при запуске:
- sudo systemctl enable prometheus
Вы можете проверить статус службы с помощью следующей команды:
- 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
.Примечание. Для доступа к веб-консоли Prometheus вам может потребоваться разрешить порт
9090
на вашем сервере. Чтобы проверить текущий набор правил UFW, выполните следующую команду:- sudo ufw status
Если порт
9090
еще не разрешен, вы можете добавить его с помощью следующей команды:- sudo ufw allow 9090
Теперь вы можете получить доступ к веб-консоли Prometheus:
На этом шаге вы установили Prometheus и настроили его для работы в качестве службы. Далее вы привяжете свою базу данных MongoDB к Prometheus с помощью экспортера MongoDB.
Шаг 2 — Настройка экспортера MongoDB
Prometheus работает, очищая цели для сбора метрик. На этом шаге вы установите средство экспорта MongoDB и настроите его как цель Prometheus, чтобы Prometheus мог собирать данные из вашего экземпляра MongoDB.
Установка экспортера MongoDB
В этом разделе вы установите экспортер MongoDB. Сначала создайте каталог для экспортера и перейдите к нему:
- mkdir mongodb-exporter
- cd mongodb-exporter
Экспортер MongoDB можно загрузить с Github. Экспортер поставляется в виде бинарного файла в архиве, но вы настроите его как сервис. Загрузите бинарный файл с помощью следующей команды:
- wget https://github.com/percona/mongodb_exporter/releases/download/v0.7.1/mongodb_exporter-0.7.1.linux-amd64.tar.gz
Затем извлеките загруженный архив в текущую папку:
- tar xvzf mongodb_exporter-0.7.1.linux-amd64.tar.gz
Наконец, переместите двоичный файл
mongodb_exporter
вusr/local/bin/
:- sudo mv mongodb_exporter /usr/local/bin/
В этом разделе вы установили экспортер MongoDB. Далее вы включите аутентификацию MongoDB и создадите пользователя для мониторинга.
Включение аутентификации MongoDB
В этом разделе вы настроите аутентификацию MongoDB для экспортера MongoDB и создадите пользователя для мониторинга показателей кластера.
Начните с подключения к экземпляру MongoDB с помощью
mongo
:- mongo
Вы создадите учетную запись администратора для экспортера с ролью монитора кластера. Переключитесь на базу данных
admin
:- use admin
После переключения на базу данных
admin
создайте пользователя с рольюclusterMonitor
:- 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:
- exit
Затем установите переменную среды MongoDB URI с соответствующими учетными данными для аутентификации:
export MONGODB_URI=mongodb://test:testing@localhost:27017
Вы устанавливаете
MONGODB_URI
, чтобы указать экземплярmongodb
, который использует учетные данные аутентификации, которые вы установили ранее (пользовательtest
итестовый
пароль).27017
— порт по умолчанию для экземпляраmongodb
. Когда вы устанавливаете переменную среды, она имеет приоритет над профилем, хранящимся в файле конфигурации.Чтобы проверить правильность установки переменной среды MongoDO URI, выполните следующую команду:
- env | grep mongodb
Вы получите следующий вывод:
MONGODB_URI=mongodb://mongodb_exporter:password@localhost:27017
В этом разделе вы создали пользователя MongoDB с ролью
clusterMonitor
, которая помогает отслеживать показатели кластера. Далее вы настроите экспортер MongoDB для работы в качестве службы.Создание службы для экспортера MongoDB
В этом разделе вы создадите системный файл для экспортера MongoDB и запустите его как службу.
Перейдите в
/lib/systemd/system
и создайте новый служебный файл для экспортера с помощьюnano
или вашего любимого текстового редактора:- cd /lib/systemd/system/
- sudo nano mongodb_exporter.service
Вставьте следующую конфигурацию в файл службы:
[Unit] Description=MongoDB Exporter User=prometheus [Service] Type=simple Restart=always ExecStart=/usr/local/bin/mongodb_exporter [Install] WantedBy=multi-user.target
Этот служебный файл указывает
systemd
запустить экспортер MongoDB как службу под пользователемprometheus
.ExecStart
запустит двоичный файлmongodb_exporter
изusr/local/bin/
. Дополнительные сведения о служебных файлахsystemd
см. в разделе Общие сведения о модулях и файлах модулей Systemd.Сохраните и закройте файл.
Затем перезапустите системный демон, чтобы перезагрузить файлы модулей:
- sudo systemctl daemon-reload
Теперь запустите службу:
- sudo systemctl start mongodb_exporter.service
Чтобы проверить состояние службы экспорта MongoDB, выполните следующую команду:
- 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
Чтобы убедиться, что все работает должным образом, перейдите в корень проекта и запустите команду curl на порту
9216
, где работает экспортер:- cd ~
- 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
,metrics-document
и сведения о соединениях.В этом разделе вы настроите экспортер MongoDB как службу и соберете метрики из MongoDB. Далее вы настроите экспортер как цель для Prometheus.
Настройка экспортера MongoDB в качестве цели Prometheus
В этом разделе вы настроите экспортер MongoDB в качестве цели Prometheus. Перейдите в каталог, содержащий файл конфигурации Prometheus:
- cd /etc/prometheus/
Используя
nano
или ваш любимый текстовый редактор, откройте файл для редактирования:- sudo nano prometheus.yml
Добавьте экспортер MongoDB в качестве цели, скопировав выделенные строки в свой файл:
# 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"]
9216
— порт по умолчанию для экспортера MongoDB.Сохраните и закройте файл.
После добавления цели перезапустите Prometheus:
- sudo systemctl restart prometheus
Перейдите по адресу
http://localhost:9090/targets
, чтобы убедиться, что Prometheus очищает ваш недавно добавленный экспортер.Примечание. Если вы используете удаленный сервер, вы можете просмотреть цели, перейдя по адресу
http://your_server_ip:9090/targets
. Вы также можете использовать переадресацию портов для локального просмотра целей. Для этого откройте новый терминал на локальном компьютере и введите следующую команду:- ssh -L 9090:localhost:9090 your_non_root_user@your_server_ip
После подключения к серверу перейдите к
http://localhost:9090/targets
в веб-браузере вашего локального компьютера.Вы получите доступ к списку целей Prometheus:
Конечная точка
9090
— это сам процесс парсинга Prometheus. Конечная точка9216
— это экспортер MongoDB, который подтверждает, что ваша конфигурация работает должным образом.На этом шаге вы установили средство экспорта MongoDB и настроили его как цель Prometheus для сбора метрик. Далее вы создадите информационную панель MongoDB в веб-консоли Grafana для просмотра и анализа этих показателей.
Шаг 3 — Создание панели инструментов MongoDB в Grafana
На этом этапе вы создадите панель инструментов для визуализации данных MongoDB в Grafana. Для этого вы добавите Prometheus в качестве источника данных в Grafana и импортируете панель управления MongoDB из панели обзора MongoDB в свой экземпляр Grafana. Для начала вы установите Prometheus в качестве источника данных Grafana.
В рамках предварительных условий вы установили и защитили Grafana. Перейдите к своему экземпляру Grafana по адресу
ваш_домен:3000
и войдите в систему, используя учетные данные, которые вы создали во время предварительных требований.На левой панели щелкните значок шестеренки для параметра «Конфигурация», затем выберите «Источники данных»:
Нажмите Добавить источник данных:
Затем выберите Прометей:
На следующем экране вы настроите параметры для вашего источника данных Prometheus:
В поле URL укажите URL вашего экземпляра Prometheus:
http://your_server_ip:9090/
Нажмите «Сохранить и протестировать» в нижней части экрана. Теперь в качестве источника данных для Grafana добавлен Prometheus.
Далее вы импортируете сводную панель MongoDB для Grafana. Вы можете импортировать панель мониторинга, загрузив файл JSON или импортировав идентификатор панели мониторинга, который можно найти в документации по продукту Grafana для панелей мониторинга. Здесь вы будете использовать идентификатор информационной панели для импорта информационной панели.
В меню слева щелкните значок плюса для «Создать» и выберите «Импорт». Оттуда вы должны попасть на страницу импорта:
Здесь вы можете загрузить JSON-файл панели управления или вставить идентификатор панели управления Grafana:
Добавьте идентификатор информационной панели Grafana, который вы можете найти на странице Grafana для обзорной информационной панели MongoDB:
https://grafana.com/grafana/dashboards/7353
Доступно множество информационных панелей. Вы можете найти больше, посетив страницу Grafana на информационных панелях.
После добавления идентификатора панели управления нажмите «Загрузить».
Теперь откроется страница «Параметры», где вы можете указать имя панели мониторинга, выбрать папку для панели мониторинга и выбрать источник данных. Вы можете оставить панель инструментов и имена папок по умолчанию. В качестве источника данных выберите Prometheus. После того, как вы заполнили параметры, нажмите «Импорт».
Панель инструментов будет создана:
На вашей панели мониторинга в режиме реального времени будут отображаться обновления вашей базы данных MongoDB, включая командные операции, соединения, курсоры, операции с документами и операции в очереди. (Для получения дополнительной информации ознакомьтесь с документацией Percona для панели мониторинга MongoDB Overview.)
Заключение
В этой статье вы настроите панель мониторинга Grafana для мониторинга метрик Prometheus для вашей базы данных MongoDB, что позволит вам отслеживать базу данных с помощью панели инструментов с графическим интерфейсом. Сначала вы установили Prometheus и настроили экспортер MongoDB. Затем вы добавили Prometheus в качестве источника данных в Grafana, где вы могли отслеживать и визуализировать данные из своего экземпляра MongoDB.
Теперь, когда у вас есть полностью работающий конвейер мониторинга для MongoDB, вы можете копнуть немного глубже. Для начала попробуйте изучить дополнительные информационные панели в Grafana.
Чтобы узнать больше о MongoDB, ознакомьтесь с нашей серией руководств по управлению данными с помощью MongoDB.
Чтобы быстро перейти к полностью работающей среде базы данных, ознакомьтесь с управляемой базой данных MongoDB от DigitalOcean.
- Запись A с