Prometehus: MySQL exporter

Автор: | 07/08/2018

Ещё одна задача по мониторингу – проверять доступ к серверу баз данных.

Краткая заметка просто для примера.

Используем prometheus/mysqld_exporter.

Подключаемся к серверу БД, добавляем пользователя:

[simterm]

MariaDB [(none)]> CREATE USER 'prometheus'@'10.0.2.7' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

[/simterm]

Задаём ему права доступа:

[simterm]

MariaDB [(none)]> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'10.0.2.7';
Query OK, 0 rows affected (0.00 sec)

[/simterm]

Запускаем експортер:

[simterm]

root@bm-backed-app-dev:/opt/prometheus-client# docker run -p 9104:9104 -e DATA_SOURCE_NAME="prometheus:password@(rdsurl.us-east-2.rds.amazonaws.com:3306)/" prom/mysqld-exporter
Unable to find image 'prom/mysqld-exporter:latest' locally
latest: Pulling from prom/mysqld-exporter
f70adabe43c0: Already exists 
b91f96ddd9e3: Already exists 
25f34166cb87: Pull complete 
Digest: sha256:9f4fb61cca309cb4a8c1b9ed9fb4aa75af0f7a21f36d3954667db37c062a0172
Status: Downloaded newer image for prom/mysqld-exporter:latest
time="2018-07-19T11:13:47Z" level=info msg="Starting mysqld_exporter (version=0.11.0, branch=HEAD, revision=5d7179615695a61ecc3b5bf90a2a7c76a9592cdd)" source="mysqld_exporter.go:206"
time="2018-07-19T11:13:47Z" level=info msg="Build context (go=go1.10.3, user=root@3d3ff666b0e4, date=20180629-15:00:35)" source="mysqld_exporter.go:207"
time="2018-07-19T11:13:47Z" level=info msg="Enabled scrapers:" source="mysqld_exporter.go:218"
time="2018-07-19T11:13:47Z" level=info msg=" --collect.info_schema.tables" source="mysqld_exporter.go:222"
time="2018-07-19T11:13:47Z" level=info msg=" --collect.global_status" source="mysqld_exporter.go:222"
time="2018-07-19T11:13:47Z" level=info msg=" --collect.global_variables" source="mysqld_exporter.go:222"
time="2018-07-19T11:13:47Z" level=info msg=" --collect.slave_status" source="mysqld_exporter.go:222"
time="2018-07-19T11:13:47Z" level=info msg="Listening on :9104" source="mysqld_exporter.go:232"

[/simterm]

Проверяем метрики:

[simterm]

admin@bm-backed-app-dev:~$ curl -s localhost:9104/metrics | grep -v \# | grep mysql_up
mysql_up 1

[/simterm]

Добавляем в Ansible шаблон Compose файла:

...
  mysql_exporter:
    image: prom/mysqld-exporter
    networks:
    - prometheus-client
    ports:
    - 9104:9104
    environment:
    - DATA_SOURCE_NAME={{ mysql_monitoring_user }}:{{ mysql_monitoring_pass }}@({{ mysql_monitoring_host }}:3306)/
...

Готово.