Мониторинг производительности вашей базы данных MySQL в режиме реального времени помогает вам сразу выявлять проблемы и другие факторы, которые могут вызывать проблемы сейчас или в будущем. Это также хороший способ определить, какие компоненты базы данных могут быть улучшены или оптимизированы для повышения эффективности и производительности. Обычно это делается с помощью программного обеспечения и инструментов для мониторинга, встроенных в программное обеспечение для управления базами данных или установленных сторонними поставщиками.
Prometheus — это программное приложение с открытым исходным кодом, используемое для мониторинга событий и оповещения о них. Его можно использовать вместе с инструментом визуализации, таким как Grafana, для простого создания и редактирования панелей мониторинга, запросов, визуализации, оповещения и понимания ваших метрик. ScaleGrid обеспечивает полный административный доступ к вашим развертываниям MySQL — это облегчает интеграцию существующей экосистемы инструментов MySQL с вашими развертываниями ScaleGrid MySQL в AWS или Azure . Prometheus хорошо работает для записи любых чисто числовых временных рядов, а также предлагает поддержку для сбора и запроса многомерных данных. С его помощью Grafana можно создавать инструментальные панели, которые помогают визуализировать эти данные таким образом, чтобы их было легко интерпретировать и использовать.
Эти инструменты обеспечат дополнительную информацию о ваших показателях, шаблонах использования и наборах данных, а также о мониторинге , анализе запросов и предупреждениях ScaleGrid MySQL . В этом посте мы обсудим, как вы можете настроить и использовать Prometheus и Grafana с вашими развертываниями ScaleGrid MySQL для расширенного мониторинга базы данных и оповещения.
Вы также можете быть заинтересованы в:
Развертывание и запуск MySQL в Kubernetes с Statefulsets и Kops
Как настроить мониторинг MySQL
Давайте пройдемся по шагам, связанным с установкой и настройкой сервера Prometheus для хранения и отображения метрик, экспортером (в данном случае MySQL Exporter) для сбора метрик и их передачи на сервер Prometheus и Grafana для создания панелей мониторинга. Инструмент MySQL Exporter может быть установлен локально на сервере MySQL или централизованно на сервере Prometheus. В приведенном ниже примере использования мы объясним, как настроить и начать использовать Prometheus, MySQL Exporter и Grafana с центрального хоста, работающего на Ubuntu, для мониторинга нескольких серверов MySQL. Вы также можете ознакомиться с пошаговыми инструкциями в справочном документе Prometheus и Grafana для MySQL .
Приведенная ниже блок-схема показывает настройку развертывания MySQL «главный-подчиненный-кворум», которая включает в себя два несущих данные узла (главный и подчиненный) и один голосующий элемент (кворум) с использованием MySQL Exporter, хоста Prometheus и Grafana:
Установка и настройка сервера Prometheus
Prometheus — это инструмент, который мы будем использовать для централизации и хранения ваших метрик MySQL. Он регулярно отбирает показатели у одного или нескольких экспортеров и отображает их в своем пользовательском интерфейсе. Ниже приведены инструкции по установке и настройке Prometheus на центральном хосте Ubuntu. Для более подробной информации, вы можете обратиться к этой статье .
1. Создайте системную группу и пользователя Prometheus
Оболочка
xxxxxxxxxx
1
$sudo groupadd --system prometheus
2
$sudo useradd -s /sbin/nologin --system -g prometheus prometheus
2. Создайте каталог данных для Прометея
Оболочка
xxxxxxxxxx
1
$sudo mkdir /var/lib/prometheus
3. Создайте каталоги конфигурации для Prometheus
Оболочка
xxxxxxxxxx
1
$for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done
4. Загрузите архив Прометея и распакуйте файл.
Чтобы загрузить последний бинарный архив для Prometheus:
Оболочка
xxxxxxxxxx
1
$mkdir -p /tmp/prometheus && cd /tmp/Prometheus
2
$curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest \
3
| grep browser_download_url \
4
| grep linux-amd64 \
5
| cut -d '"' -f 4 \
6
| wget -qi -
Чтобы извлечь файл:
Оболочка
xxxxxxxxxx
1
$tar xvf prometheus*.tar.gz
2
$cd prometheus*/
5. Переместите файлы Prometheus в стандартные местоположения
Переместите двоичные файлы Prometheus в / usr / local / bin:
Оболочка
xxxxxxxxxx
1
$sudo mv prometheus promtool /usr/local/bin/
Переместите шаблон конфигурации Prometheus в каталог / etc:
Оболочка
xxxxxxxxxx
1
$sudo mv prometheus.yml /etc/prometheus/prometheus.yml
Также переместите консоли и console_libraries в каталог / etc / prometheus:
Оболочка
xxxxxxxxxx
1
$sudo mv consoles/ console_libraries/ /etc/prometheus/
6. Создайте / отредактируйте файл конфигурации Prometheus
Оболочка
xxxxxxxxxx
1
$sudo vim /etc/prometheus/prometheus.yml
Конфигурации шаблона должны выглядеть примерно так:
Простой текст
xxxxxxxxxx
1
#my global config
2
global:
3
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
4
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
5
#scrape_timeout is set to the global default (10s).
6
#Alertmanager configuration
8
alerting:
9
alertmanagers:
10
- static_configs:
11
- targets:
12
#- alertmanager:9093
13
#Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
15
rule_files:
16
#- "first_rules.yml"
17
#- "second_rules.yml"
18
#A scrape configuration containing exactly one endpoint to scrape:
20
#Here it's Prometheus itself.
21
scrape_configs:
22
#The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
23
- job_name: 'prometheus'
24
#metrics_path defaults to '/metrics'
26
#scheme defaults to 'http'.
27
static_configs:
29
- targets: ['localhost:9090']
7. Создайте файл сервисного модуля Prometheus systemd
Оболочка
xxxxxxxxxx
1
$cat /etc/systemd/system/prometheus.service
2
[Unit]
4
Description=Prometheus
5
Documentation=https://prometheus.io/docs/introduction/overview/
6
Wants=network-online.target
7
After=network-online.target
8
[Service]
10
Type=simple
11
Environment="GOMAXPROCS=1"
12
User=prometheus
13
Group=prometheus
14
ExecReload=/bin/kill -HUP $MAINPID
15
ExecStart=/usr/local/bin/prometheus \
16
--config.file=/etc/prometheus/prometheus.yml \
17
--storage.tsdb.path=/var/lib/prometheus \
18
--web.console.templates=/etc/prometheus/consoles \
19
--web.console.libraries=/etc/prometheus/console_libraries \
20
--web.listen-address=0.0.0.0:9090 \
21
--web.external-url=
22
SyslogIdentifier=prometheus
24
Restart=always
25
[Install]
27
WantedBy=multi-user.target
Не забудьте отредактировать строку: Environment = "GOMAXPROCS = 1 , заменив 1 номером ** vcpus ** на вашем сервере.
8. Изменить разрешения каталога
Измените владельца этих каталогов на пользователя и группу Prometheus:
Оболочка
xxxxxxxxxx
1
$for i in rules rules.d files_sd; do sudo chown -R prometheus:prometheus /etc/prometheus/${i}; done
2
$for i in rules rules.d files_sd; do sudo chmod -R 775 /etc/prometheus/${i}; done
3
$sudo chown -R prometheus:prometheus /var/lib/prometheus/
9. Перезагрузите systemd Daemon и запустите службу
Оболочка
xxxxxxxxxx
1
$sudo systemctl daemon-reload
2
$sudo systemctl start prometheus
3
$sudo systemctl enable prometheus
Проверьте состояние с помощью команды systemctl status prometheus :
10. Настройте брандмауэр на открытие порта 9090
Оболочка
xxxxxxxxxx
1
$sudo firewall-cmd --add-port=9090/tcp --permanent
2
$sudo firewall-cmd --reload
После завершения настройки вы можете получить доступ к пользовательскому интерфейсу Prometheus, войдя по адресу http: // <PrometheusHostIP>: 9090
Установка и настройка MySQL Prometheus Exporter
Прометей требует экспортер для сбора метрик сервера MySQL. Этот экспортер может быть запущен централизованно на сервере Prometheus или на сервере базы данных. Для дальнейшего чтения обратитесь к документации Prometheus .
Выполните следующие шаги, чтобы установить и настроить MySQL Prometheus Exporter на центральном хосте Prometheus. Для более подробной информации, обратитесь к этой статье .
1. Загрузите и установите Prometheus MySQL Exporter
Оболочка
xxxxxxxxxx
1
$curl -s https://api.github.com/repos/prometheus/mysqld_exporter/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
2
$tar xvf mysqld_exporter*.tar.gz
3
$sudo mv mysqld_exporter-*.linux-amd64/mysqld_exporter /usr/local/bin/
4
$sudo chmod +x /usr/local/bin/mysqld_exporter
2. Создайте пользователя базы данных Prometheus Exporter для доступа к базе данных, очистки метрик и предоставления грантов.
SQL
xxxxxxxxxx
1
CREATE USER 'mysqld_exporter'@'<PrometheusHostIP>' IDENTIFIED BY 'StrongPassword' WITH MAX_USER_CONNECTIONS 2;
2
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'<PrometheusHostIP>';
3
FLUSH PRIVILEGES;
4
EXIT
WITH MAX_USER_CONNECTIONS 2 используется, чтобы установить максимальный лимит подключения для пользователя, чтобы избежать перегрузки сервера с отслеживанием скрепов при большой нагрузке.
3. Настройте учетные данные базы данных
Отредактируйте файл конфигурации экспортера:
Оболочка
xxxxxxxxxx
1
$sudo vim /etc/.mysqld_exporter.cnf
Добавьте имя пользователя и пароль созданного пользователем и сервера MySQL ScaleGrid, который вы хотите отслеживать:
Оболочка
xxxxxxxxxx
1
$sudo vim /etc/.mysqld_exporter.cnf
2
[client]
4
user=mysqld_exporter
5
password=StrongPassword
6
host=SG-mysqltestcluster-123456.servers.mongodirector.com
Установите права владения:
Оболочка
xxxxxxxxxx
1
$sudo chown root:prometheus /etc/.mysqld_exporter.cnf
4. Создайте системный файл модуля
Создайте новый файл сервиса:
Оболочка
xxxxxxxxxx
1
$sudo vim /etc/systemd/system/mysql_exporter.service
Добавьте следующий контент:
Файлы свойств
xxxxxxxxxx
1
[Unit]
2
Description=Prometheus MySQL Exporter
3
After=network.target
4
User=prometheus
5
Group=prometheus
6
[Service]
8
Type=simple
9
Restart=always
10
ExecStart=/usr/local/bin/mysqld_exporter \
11
--config.my-cnf /etc/.mysqld_exporter.cnf \
12
--collect.global_status \
13
--collect.info_schema.innodb_metrics \
14
--collect.auto_increment.columns \
15
--collect.info_schema.processlist \
16
--collect.binlog_size \
17
--collect.info_schema.tablestats \
18
--collect.global_variables \
19
--collect.info_schema.query_response_time \
20
--collect.info_schema.userstats \
21
--collect.info_schema.tables \
22
--collect.perf_schema.tablelocks \
23
--collect.perf_schema.file_events \
24
--collect.perf_schema.eventswaits \
25
--collect.perf_schema.indexiowaits \
26
--collect.perf_schema.tableiowaits \
27
--collect.slave_status \
28
--web.listen-address=0.0.0.0:9104
29
30
[Install]
31
WantedBy=multi-user.target
web.listen-address = 0.0.0.0: 9104 указывает, что сервер прослушивает порт 9104. Если ваш сервер имеет общедоступную и частную сеть, вам может потребоваться заменить 0.0.0.0:9104 на частный IP, например - 192.168. 4.5: 9104.
Когда закончите, перезагрузите systemd и запустите службу mysql_exporter:
Оболочка
xxxxxxxxxx
1
$sudo systemctl daemon-reload
2
$sudo systemctl enable mysql_exporter
3
$sudo systemctl start mysql_exporter
5. Сконфигурируйте конечную точку MySQL для очистки с помощью Прометея
Внесите изменения, как показано ниже в файле prometheus.yml:
Джава
xxxxxxxxxx
1
scrape_configs:
2
- job_name: mysql_server1
3
static_configs:
4
- targets: ['localhost:9104']
5
labels:
6
alias: db1
Примечание. Если экспортер не работает на том же хосте, что и Prometheus, укажите IP-адрес сервера вместо localhost. 9104 относится к порту, который прослушивает Прометей, как указано в предыдущем шаге.
Мониторинг нескольких хостов MySQL с центрального хоста Prometheus
Несколько серверов MySQL можно контролировать с центрального сервера. Это может быть достигнуто с помощью отдельной службы экспорта для каждого сервера. Обязательно создайте файлы .mysqld_exporter.cnf и mysql_exporter.service (с уникальными номерами портов, назначенными для флага --web.listen-address) для каждой службы, как указано в шагах 3 и 4 выше. Добавьте цели в файл prometheus.yml, как указано в шаге 5 выше. Имена должностей должны быть уникальными для каждой цели. Например:
Джава
xxxxxxxxxx
1
scrape_configs:
2
- job_name: mysql_server1
3
static_configs:
4
- targets: ['localhost:9104']
5
labels:
6
alias: db1
7
- job_name: mysql_server2
8
static_configs:
9
- targets: ['localhost:9105']
10
labels:
11
alias: db2
12
- job_name: mysql_server3
13
static_configs:
14
- targets: ['localhost:9106']
15
labels:
16
alias: db3
Примечание: Prometheus Server должен быть в состоянии достичь целей по сети. Убедитесь, что настройки вашей сети / брандмауэра были изменены соответствующим образом.
Установка Grafana и создание панелей мониторинга
Grafana использует Prometheus в качестве источника данных, что позволяет вам создавать информационные панели для лучшей визуализации и понимания ваших метрик. Это отличный способ получить представление о данных временных рядов.
Выполните следующие шаги, чтобы установить Grafana на центральный хост Prometheus.
1. Загрузите последнюю версию Grafana
Перейдите на страницу Скачать Grafana, чтобы загрузить последнюю версию.
Оболочка
xxxxxxxxxx
1
$wget <debian package url>
2
$sudo apt-get install -y adduser libfontconfig1
3
$sudo dpkg -i grafana_<version>_amd64.deb
2. Загрузите APT-репозиторий и установите Grafana
Команда add-apt-repository не является приложением по умолчанию в Debian 9 и требует:
Оболочка
xxxxxxxxxx
1
$apt-get install -y software-properties-common
Установите репозиторий для стабильных выпусков:
Оболочка
xxxxxxxxxx
1
$sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
Если вы хотите бета-версии, есть отдельный репозиторий:
Оболочка
xxxxxxxxxx
1
$sudo add-apt-repository "deb https://packages.grafana.com/oss/deb beta main"
Используйте приведенную выше строку, даже если вы используете Ubuntu или другую версию Debian. Затем добавьте наш ключ gpg. Это позволяет вам устанавливать подписанные пакеты:
Оболочка
xxxxxxxxxx
1
$wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
Обновите свои репозитории Apt и установите Grafana:
Оболочка
xxxxxxxxxx
1
$sudo apt-get update
2
$sudo apt-get install grafana
3. Запустите Сервис
Оболочка
xxxxxxxxxx
1
$systemctl daemon-reload
2
$systemctl start grafana-server
3
$systemctl status grafana-server
Включите службу systemd, чтобы Grafana запускалась при загрузке:
Оболочка
xxxxxxxxxx
1
$sudo systemctl enable grafana-server.service
Чтобы запустить Grafana, откройте браузер и перейдите по адресу * http: // <PrometheusHostIP>: 3000 / *. 3000 - это http-порт, который Grafana слушает по умолчанию.
4. Добавление источника данных
После установки войдите в панель администратора и добавьте источник данных, выбрав «Конфигурация»> «Источники данных».
Имя: Прометей Тип: Прометей URL: http: // localhost: 9090
Примечание. Если сервер Prometheus не работает на том же хосте, что и Grafana, укажите IP-адрес сервера вместо localhost.
Теперь вы можете создавать и настраивать информационные панели для мониторинга MySQL. Вы можете создать новую панель мониторинга, нажав на ссылку в правой части панели инструментов. После того, как панель мониторинга создана, вы можете добавить панели, выбирая метрики для отображения, пометить панель инструментов, сохранить и поделиться ею. Для получения подробных инструкций вы можете обратиться к документации по началу работы с Grafana .
Вот пример информационной панели Grafana, созданной для развертывания MySQL в ScaleGrid:
На приведенной выше панели инструментов Grafana отображаются метрики блокировки таблиц MySQL, метрики временных объектов MySQL, сортировки MySQL и MySQL Select Types, представленные в диаграммах, а на панели инструментов Grafana ниже отображаются стандартные счетчики команд MySQL и основные счетчики команд MySQL за час.