Поиск по сайту:

Как контролировать 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. Начните с входа на сервер и обновления списков пакетов следующим образом:

    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 или ваш любимый текстовый редактор, создайте служебный файл systemd с именем prometheus.service:

    1. 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:

    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.

    Примечание. Для доступа к веб-консоли Prometheus вам может потребоваться разрешить порт 9090 на вашем сервере. Чтобы проверить текущий набор правил UFW, выполните следующую команду:

    1. sudo ufw status

    Если порт 9090 еще не разрешен, вы можете добавить его с помощью следующей команды:

    1. sudo ufw allow 9090

    Теперь вы можете получить доступ к веб-консоли Prometheus:

    На этом шаге вы установили Prometheus и настроили его для работы в качестве службы. Далее вы привяжете свою базу данных MongoDB к Prometheus с помощью экспортера MongoDB.

    Шаг 2 — Настройка экспортера MongoDB

    Prometheus работает, очищая цели для сбора метрик. На этом шаге вы установите средство экспорта MongoDB и настроите его как цель Prometheus, чтобы Prometheus мог собирать данные из вашего экземпляра MongoDB.

    Установка экспортера MongoDB

    В этом разделе вы установите экспортер MongoDB. Сначала создайте каталог для экспортера и перейдите к нему:

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

    Экспортер MongoDB можно загрузить с Github. Экспортер поставляется в виде бинарного файла в архиве, но вы настроите его как сервис. Загрузите бинарный файл с помощью следующей команды:

    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 и создадите пользователя для мониторинга показателей кластера.

    Начните с подключения к экземпляру MongoDB с помощью mongo:

    1. mongo

    Вы создадите учетную запись администратора для экспортера с ролью монитора кластера. Переключитесь на базу данных admin:

    1. use admin

    После переключения на базу данных 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:

    1. exit

    Затем установите переменную среды MongoDB URI с соответствующими учетными данными для аутентификации:

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

    Вы устанавливаете MONGODB_URI, чтобы указать экземпляр mongodb, который использует учетные данные аутентификации, которые вы установили ранее (пользователь test и тестовый пароль). 27017 — порт по умолчанию для экземпляра mongodb. Когда вы устанавливаете переменную среды, она имеет приоритет над профилем, хранящимся в файле конфигурации.

    Чтобы проверить правильность установки переменной среды MongoDO URI, выполните следующую команду:

    1. env | grep mongodb

    Вы получите следующий вывод:

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

    В этом разделе вы создали пользователя MongoDB с ролью clusterMonitor, которая помогает отслеживать показатели кластера. Далее вы настроите экспортер MongoDB для работы в качестве службы.

    Создание службы для экспортера MongoDB

    В этом разделе вы создадите системный файл для экспортера MongoDB и запустите его как службу.

    Перейдите в /lib/systemd/system и создайте новый служебный файл для экспортера с помощью nano или вашего любимого текстового редактора:

    1. cd /lib/systemd/system/
    2. 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.

    Сохраните и закройте файл.

    Затем перезапустите системный демон, чтобы перезагрузить файлы модулей:

    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
    
    

    Чтобы убедиться, что все работает должным образом, перейдите в корень проекта и запустите команду curl на порту 9216, где работает экспортер:

    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, metrics-document и сведения о соединениях.

    В этом разделе вы настроите экспортер MongoDB как службу и соберете метрики из MongoDB. Далее вы настроите экспортер как цель для Prometheus.

    Настройка экспортера MongoDB в качестве цели Prometheus

    В этом разделе вы настроите экспортер MongoDB в качестве цели Prometheus. Перейдите в каталог, содержащий файл конфигурации Prometheus:

    1. cd /etc/prometheus/

    Используя nano или ваш любимый текстовый редактор, откройте файл для редактирования:

    1. 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:

    1. sudo systemctl restart prometheus

    Перейдите по адресу http://localhost:9090/targets, чтобы убедиться, что Prometheus очищает ваш недавно добавленный экспортер.

    Примечание. Если вы используете удаленный сервер, вы можете просмотреть цели, перейдя по адресу http://your_server_ip:9090/targets. Вы также можете использовать переадресацию портов для локального просмотра целей. Для этого откройте новый терминал на локальном компьютере и введите следующую команду:

    1. 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.