2025-07-09 19:49:23
Для полноценной установки и настройки **mysqld_exporter-0.17.2** с учётом создания пользователя в MariaDB и правильной конфигурации экспортера, можно расширить Ansible playbook следующим образом:
### 1. Создание пользователя в MariaDB для мониторинга
Пользователь должен иметь минимально необходимые права: `PROCESS`, `SELECT`, `REPLICATION CLIENT` (если нужна репликация). Рекомендуется ограничить количество подключений.
Пример SQL:
```sql
CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'StrongPassword' WITH MAX_USER_CONNECTIONS 2;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'localhost';
FLUSH PRIVILEGES;
```
### 2. Конфигурация mysqld_exporter для подключения к базе
Создайте файл с учётными данными, например `/etc/.mysqld_exporter.cnf`:
```
[client]
user=mysqld_exporter
password=StrongPassword
```
Дайте права на чтение только root и группе, которой принадлежит сервис (например, `prometheus`):
```bash
chown root:prometheus /etc/.mysqld_exporter.cnf
chmod 640 /etc/.mysqld_exporter.cnf
```
### 3. Запуск mysqld_exporter с указанием файла конфигурации
В systemd unit-файле укажите параметр `--config.my-cnf /etc/.mysqld_exporter.cnf` для безопасного чтения пароля.
### Полный пример Ansible playbook с учётом выше:
```yaml
---
- name: Установка и настройка mysqld_exporter с пользователем MariaDB
hosts: all
become: yes
vars:
exporter_user: mysqld_exporter
exporter_password: StrongPassword
exporter_version: 0.17.2
exporter_archive: mysqld_exporter-0.17.2.linux-amd64.tar.gz
exporter_local_path: /tmp/mysqld_exporter-0.17.2.linux-amd64.tar.gz
exporter_install_dir: /usr/local/bin
exporter_config_file: /etc/.mysqld_exporter.cnf
prometheus_user: prometheus
tasks:
- name: Создаём пользователя и группу prometheus
group:
name: "{{ prometheus_user }}"
system: yes
ignore_errors: yes
- name: Создаём пользователя prometheus
user:
name: "{{ prometheus_user }}"
group: "{{ prometheus_user }}"
shell: /sbin/nologin
system: yes
ignore_errors: yes
- name: Копируем архив mysqld_exporter на целевой сервер
copy:
src: "{{ exporter_local_path }}"
dest: "/tmp/{{ exporter_archive }}"
mode: '0644'
- name: Распаковываем архив mysqld_exporter
unarchive:
src: "/tmp/{{ exporter_archive }}"
dest: /tmp/
remote_src: yes
- name: Копируем бинарник mysqld_exporter в /usr/local/bin
copy:
src: "/tmp/mysqld_exporter-{{ exporter_version }}.linux-amd64/mysqld_exporter"
dest: "{{ exporter_install_dir }}/mysqld_exporter"
mode: '0755'
- name: Удаляем временные файлы
file:
path: "/tmp/mysqld_exporter-{{ exporter_version }}.linux-amd64"
state: absent
- name: Удаляем архив
file:
path: "/tmp/{{ exporter_archive }}"
state: absent
- name: Создаём файл с учётными данными для mysqld_exporter
copy:
dest: "{{ exporter_config_file }}"
content: |
[client]
user={{ exporter_user }}
password={{ exporter_password }}
owner: root
group: "{{ prometheus_user }}"
mode: '0640'
- name: Создаём systemd unit файл для mysqld_exporter
copy:
dest: /etc/systemd/system/mysqld_exporter.service
content: |
[Unit]
Description=Prometheus MySQL Exporter
After=network.target
[Service]
User={{ prometheus_user }}
Group={{ prometheus_user }}
Type=simple
Restart=always
ExecStart={{ exporter_install_dir }}/mysqld_exporter --config.my-cnf={{ exporter_config_file }} --web.listen-address=0.0.0.0:9104
[Install]
WantedBy=multi-user.target
notify:
- Reload systemd
- Restart mysqld_exporter
- name: Создаём пользователя базы данных mysqld_exporter в MariaDB
mysql_user:
login_user: root
login_password: "{{ mysql_root_password | default(omit) }}"
name: "{{ exporter_user }}"
host: localhost
password: "{{ exporter_password }}"
priv: "*.*:PROCESS,REPLICATION CLIENT,SELECT"
max_user_connections: 2
state: present
handlers:
- name: Reload systemd
systemd:
daemon_reload: yes
- name: Restart mysqld_exporter
systemd:
name: mysqld_exporter
state: restarted
enabled: yes
```
### Ключевые моменты:
- Создаётся системный пользователь `prometheus` для запуска экспортера.
- Пользователь `mysqld_exporter` создаётся в MariaDB с ограниченными правами.
- Пароль хранится в конфигурационном файле `/etc/.mysqld_exporter.cnf` с ограниченным доступом.
- systemd сервис запускает экспортер с указанием файла конфигурации.
- Порт по умолчанию 9104, доступен на всех интерфейсах (можно изменить).
Такой подход обеспечивает безопасную и корректную установку mysqld_exporter с учётом требований к пользователю базы данных и настройке экспорта метрик для Prometheus[1][2][3].
[1] https://arenda-server.cloud/blog/monitoring-mysql-i-mariadb-s-pomoshhju-prometheus-mysql-exporter/
[2] https://ru.linux-console.net/?p=21632
[3] https://ru.linux-console.net/?p=21624
[4] https://rtfm.co.ua/ru/__trashed-7/
[5] https://www.theairtips.com/post/monitoring-mysql---mariadb-with-prometheus
[6] https://www.reddit.com/r/PrometheusMonitoring/comments/ud9fr7/mysqld_exporter_doesnt_connect_to_mariadb_database/?tl=ru
[7] https://github.com/prometheus/mysqld_exporter
[8] https://stackoverflow.com/questions/46790359/mysqld-exporter-refusing-to-connect-to-mariadb/46807013
[9] https://last9.io/docs/integrations-opentelemetry-mariadb/
[10] https://www.tencentcloud.com/document/product/457/38553
Back to list