diff --git a/host_vars/database.yml b/host_vars/database.yml index 6d7f535..94d6bb3 100644 --- a/host_vars/database.yml +++ b/host_vars/database.yml @@ -5,5 +5,5 @@ custom_firewall_ports: - 3306 apt_packages: - nfs-kernel-server -# install_mysql_exporter: true +install_mysqld_exporter: true description: 'database & filestorage node for hosting app.retailor.io' diff --git a/plays/metrics-node.yml b/plays/metrics-node.yml index c869b68..76e071f 100644 --- a/plays/metrics-node.yml +++ b/plays/metrics-node.yml @@ -6,12 +6,16 @@ nginx_exporter_version: "1.4.1" cadvisor_version: "0.46.0" fail2ban_exporter_version: "0.10.2" + mysqld_exporter_version: "0.17.2" roles: - - role: roles/node_exporter - - role: roles/fail2ban_exporter - - role: roles/redis_exporter + - role: roles/exporter-node + - role: roles/exporter-fail2ban + + - role: roles/exporter-redis when: install_redis_exporter - - role: roles/cadvisor + + - role: roles/exporter-cadvisor when: install_cadvisor_exporter - - role: roles/nginx_prometheus_exporter - when: install_nginx_exporter + + - role: roles/exporter-mysql + when: install_mysqld_exporter diff --git a/roles/exporter-mysql/README.md b/roles/exporter-mysql/README.md new file mode 100644 index 0000000..af6b2b5 --- /dev/null +++ b/roles/exporter-mysql/README.md @@ -0,0 +1,11 @@ +# mysqld exporter + +(https://github.com/prometheus/mysqld_exporter)[https://github.com/prometheus/mysqld_exporter] + +## Required Grants + +```mysql +CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3; +GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost'; +``` + diff --git a/roles/exporter-mysql/tasks/install.yml b/roles/exporter-mysql/tasks/install.yml new file mode 100644 index 0000000..9e4e53b --- /dev/null +++ b/roles/exporter-mysql/tasks/install.yml @@ -0,0 +1,23 @@ +--- +- name: Download MySQL Prometheus Exporter + get_url: + url: "https://github.com/prometheus/mysqld_exporter/releases/download/v{{ mysqld_exporter_version }}/mysqld_exporter-{{ mysqld_exporter_version }}.linux-amd64.tar.gz" + dest: "/tmp/mysqld-exporter.tar.gz" + +- name: Extract MySQL Prometheus Exporter + unarchive: + src: "/tmp/mysqld-exporter.tar.gz" + dest: "/tmp" + remote_src: yes + +- name: copy my.cnf config + template: + src: "my.cnf.j2" + dest: "/root/my.cnf.j2" + +- name: Move MySQL Prometheus Exporter binary + copy: + src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-amd64/mysqld_exporter" + dest: "/usr/local/bin/mysqld_exporter" + remote_src: yes + mode: '0755' diff --git a/roles/exporter-mysql/tasks/main.yml b/roles/exporter-mysql/tasks/main.yml new file mode 100644 index 0000000..4c57727 --- /dev/null +++ b/roles/exporter-mysql/tasks/main.yml @@ -0,0 +1,6 @@ +--- +# ensure we have variables from .env files +- include_tasks: ../roles/env/tasks/main.yml + +- include_tasks: install.yml +- include_tasks: service.yml diff --git a/roles/exporter-mysql/tasks/service.yml b/roles/exporter-mysql/tasks/service.yml new file mode 100644 index 0000000..5eeac03 --- /dev/null +++ b/roles/exporter-mysql/tasks/service.yml @@ -0,0 +1,23 @@ +--- +- name: Create mysqld_exporter service file + template: + src: "mysqld_exporter.service.j2" + dest: "/etc/systemd/system/mysqld_exporter.service" + mode: '0644' + tags: + - create_service + +- name: Reload systemd to pick up the mysqld_exporter service + systemd: + daemon_reload: yes + tags: + - reload_systemd + +- name: Enable and start the mysqld_exporter service + systemd: + name: mysqld_exporter + state: started + enabled: yes + tags: + - start_mysqld_exporter + diff --git a/roles/exporter-mysql/templates/my.cnf.j2 b/roles/exporter-mysql/templates/my.cnf.j2 new file mode 100644 index 0000000..55805fa --- /dev/null +++ b/roles/exporter-mysql/templates/my.cnf.j2 @@ -0,0 +1,3 @@ +[client] +user = {{ env_vars.DB_USERNAME }} +password = {{ env_vars.DB_PASSWORD }} diff --git a/roles/exporter-mysql/templates/mysqld_exporter.service.j2 b/roles/exporter-mysql/templates/mysqld_exporter.service.j2 new file mode 100644 index 0000000..dfee7e0 --- /dev/null +++ b/roles/exporter-mysql/templates/mysqld_exporter.service.j2 @@ -0,0 +1,12 @@ +[Unit] +Description=mysqld exporter +After=network.target + +[Service] +User=nobody +ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/home/forge/.my.cnf +Restart=always + +[Install] +WantedBy=multi-user.target +