LogNotes

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
← Previous Next →
Back to list