nginx+mysql+exporter实现prometheus监控

所涉及的相关文件

[root@ecs-82f5]~/make#  ll
total 24
-rw-r--r-- 1 root root  157 Jun 18 06:25 create_mysql_user.sql
-rw-r--r-- 1 root root  448 Jun 19 04:21 Dockerfile
-rw-r--r-- 1 root root  148 Jun 18 01:32 nginx_status.conf
-rw-r--r-- 1 root root 6954 Jun 18 05:53 prometheus-mysqld-exporter
-rw-r--r-- 1 root root  340 Jun 19 04:21 start.sh

各文件对应的内容:

[root@ecs-82f5]~/make# more Dockerfile
FROM ubuntu:latest

RUN apt-get update \
    && apt-get -y install nginx prometheus-nginx-exporter mysql-server prometheus-mysqld-exporter

COPY nginx_status.conf /etc/nginx/sites-enabled/nginx_status.conf
COPY prometheus-mysqld-exporter /etc/default/prometheus-mysqld-exporter
COPY create_mysql_user.sql /tmp/create_mysql_user.sql
COPY start.sh /opt/start.sh

EXPOSE 80 9113 9104
ENTRYPOINT ["/bin/bash","/opt/start.sh"]
#ENTRYPOINT ["/bin/bash"]

[root@ecs-82f5]~/make# cat nginx_status.conf
server {
      listen 8080;
      server_name  localhost;
      location /stub_status {
         stub_status on;
         access_log off;
      }
}

[root@ecs-82f5]~/make# cat create_mysql_user.sql
CREATE USER prometheus@localhost IDENTIFIED BY 'StrongPassword';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO prometheus@localhost;
FLUSH PRIVILEGES;


[root@ecs-82f5]~/make# cat start.sh
#!/bin/bash
# -------------------------------
set -e

service nginx start
/etc/init.d/prometheus-nginx-exporter start
#/usr/bin/prometheus-nginx-exporter &

#mkdir -p /nonexistent
service mysql start

# 下行一定要放后台执行,不然重启或stop以后start会报错
mysql < /tmp/create_mysql_user.sql &
export DATA_SOURCE_NAME="prometheus@unix(/run/mysqld/mysqld.sock)/"
/usr/bin/prometheus-mysqld-exporter


[root@ecs-82f5]~/make# cat prometheus-mysqld-exporter
ARGS=""
### Database authentication
#
# By default the DATABASE connection string will be read from
# the file specified with the -config.my-cnf parameter.  For example:
# ARGS='--config.my-cnf /etc/mysql/debian.cnf'
#
# Note that SSL options can only be set using a cnf file.

# To set a connection string from the environment instead, set the
# DATA_SOURCE_NAME variable.

# To use UNIX domain sockets authentication with or without password:
# DATA_SOURCE_NAME="prometheus:nopassword@unix(/run/mysqld/mysqld.sock)/"
DATA_SOURCE_NAME="prometheus@unix(/run/mysqld/mysqld.sock)/"

# To use a TCP connection and password authentication:
# DATA_SOURCE_NAME="prometheus:password@(hostname:port)/dbname"

### Monitoring user creation.
#
# You need a user with enough privileges for the exporter to run.
#
# Example to create a user to connect (only) via UNIX socket:
#   CREATE USER IF NOT EXISTS 'prometheus'@'localhost' IDENTIFIED WITH auth_socket;
#
# To create a user with a password, that can log in via UNIX or TCP sockets:
#   CREATE USER IF NOT EXISTS 'prometheus'@'localhost' IDENTIFIED BY 'password';
#
# Finally, to grant the necessary privileges:
#   GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'localhost';

### Availabe command-line arguments to pass to the exporter.
#
# General options:

#  --config.my-cnf="${HOME}/.my.cnf"
#      Path to .my.cnf file to read MySQL credentials from.
#  --exporter.lock_wait_timeout=2
#      Set a lock_wait_timeout on the connection to avoid long metadata
#      locking.
#  --exporter.log_slow_filter
#      Add a log_slow_filter to avoid slow query logging of scrapes.
#      NOTE: Not supported by Oracle MySQL.
#  --log.level="info"
#      Only log messages with the given severity or above.
#      Valid levels: [debug, info, warn, error, fatal].
#  --log.format="logger:stderr"
#      Set the log target and format.
#      Example: "logger:syslog?appname=bob&local=7" or
#      "logger:stdout?json=true"
#  --timeout-offset=0.25
#      Offset to subtract from timeout in seconds.
#  --web.listen-address=":9104"
#      Address to listen on for web interface and telemetry.
#  --web.telemetry-path="/metrics"
#      Path under which to expose metrics.

# Collectior options:

#  --collect.auto_increment.columns
#      Collect auto_increment columns and max values from information_schema.
#  --collect.binlog_size
#      Collect the current size of all registered binlog files.

#  --collect.engine_innodb_status
#      Collect from SHOW ENGINE INNODB STATUS.

#  --collect.engine_tokudb_status
#      Collect from SHOW ENGINE TOKUDB STATUS.

#  --collect.global_status
#      Collect from SHOW GLOBAL STATUS.

#  --collect.global_variables
#      Collect from SHOW GLOBAL VARIABLES.

#  --collect.heartbeat
#      Collect from heartbeat.
#  --collect.heartbeat.database="heartbeat"
#      Database from where to collect heartbeat data.
#  --collect.heartbeat.table="heartbeat"
#      Table from where to collect heartbeat data.

#  --collect.info_schema.clientstats
#      If running with userstat=1, set to true to collect client statistics.

#  --collect.info_schema.innodb_cmp
#      Collect metrics from information_schema.innodb_cmp.

#  --collect.info_schema.innodb_cmpmem
#      Collect metrics from information_schema.innodb_cmpmem.

#  --collect.info_schema.innodb_metrics
#      Collect metrics from information_schema.innodb_metrics.

#  --collect.info_schema.innodb_tablespaces
#      Collect metrics from information_schema.innodb_sys_tablespaces.

#  --collect.info_schema.processlist
#      Collect current thread state counts from the
#      information_schema.processlist.
#  --collect.info_schema.processlist.min_time=0
#      Minimum time a thread must be in each state to be counted.
#  --collect.info_schema.processlist.processes_by_host
#      Enable collecting the number of processes by host.
#  --collect.info_schema.processlist.processes_by_user
#      Enable collecting the number of processes by user.

#  --collect.info_schema.query_response_time
#      Collect query response time distribution if query_response_time_stats is
#      ON..

#  --collect.info_schema.schemastats
#      If running with userstat=1, set to true to collect schema statistics.

#  --collect.info_schema.tables
#      Collect metrics from information_schema.tables.
#  --collect.info_schema.tables.databases="*"
#      The list of databases to collect table stats for, or '*' for all.

#  --collect.info_schema.tablestats
#      If running with userstat=1, set to true to collect table statistics.

#  --collect.info_schema.userstats
#      If running with userstat=1, set to true to collect user statistics.

#  --collect.mysql.user
#      Collect data from mysql.user
#  --collect.mysql.user.privileges
#      Enable collecting user privileges from mysql.user.

#  --collect.perf_schema.eventsstatements
#      Collect metrics from
#      performance_schema.events_statements_summary_by_digest.
#  --collect.perf_schema.eventsstatements.digest_text_limit=120
#      Maximum length of the normalized statement text.
#  --collect.perf_schema.eventsstatements.limit=250
#      Limit the number of events statements digests by response time.
#  --collect.perf_schema.eventsstatements.timelimit=86400
#      Limit how old the 'last_seen' events statements can be, in seconds.

#  --collect.perf_schema.eventsstatementssum
#      Collect metrics of grand sums from
#      performance_schema.events_statements_summary_by_digest.

#  --collect.perf_schema.eventswaits
#      Collect metrics from
#      performance_schema.events_waits_summary_global_by_event_name.

#  --collect.perf_schema.file_events
#      Collect metrics from performance_schema.file_summary_by_event_name.

#  --collect.perf_schema.file_instances
#      Collect metrics from performance_schema.file_summary_by_instance.
#  --collect.perf_schema.file_instances.filter=".*"
#      RegEx file_name filter for performance_schema.file_summary_by_instance.
#  --collect.perf_schema.file_instances.remove_prefix="/var/lib/mysql/"
#      Remove path prefix in performance_schema.file_summary_by_instance.

#  --collect.perf_schema.indexiowaits
#      Collect metrics from
#      performance_schema.table_io_waits_summary_by_index_usage.

#  --collect.perf_schema.replication_applier_status_by_worker
#      Collect metrics from
#      performance_schema.replication_applier_status_by_worker.

#  --collect.perf_schema.replication_group_member_stats
#      Collect metrics from performance_schema.replication_group_member_stats.

#  --collect.perf_schema.tableiowaits
#      Collect metrics from performance_schema.table_io_waits_summary_by_table.

#  --collect.perf_schema.tablelocks
#      Collect metrics from
#      performance_schema.table_lock_waits_summary_by_table.

#  --collect.slave_hosts
#      Scrape information from 'SHOW SLAVE HOSTS'.

#  --collect.slave_status
#      Collect from SHOW SLAVE STATUS.

donation