Prometheus mysql-exporter

Posted

技术标签:

【中文标题】Prometheus mysql-exporter【英文标题】: 【发布时间】:2020-06-18 00:40:43 【问题描述】:

我正在尝试使用 Prometheus 从 MariaDB 获取数据。尤其是 Userstat 表。

我有三台机器。在第一个上,我安装了 MariaDB 数据库,在第二个上我安装了 Prometheus,第三个上安装了 Grafana。

我在 MariaDB SET GLOBAL userstat=1; 上设置了用户状态功能 并创建了 mysql_exporter 用户

MariaDB [(none)]> CREATE USER 'exporter'@'444.333.22.111' IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'444.333.22.111';
MariaDB [(none)]> FLUSH PRIVILEGES;

接下来我在第二台机器上安装了 Prometheus 和 mysql exporter。我也从存储库和 mysql_exporter 获得了 Prometheus。

我的导出器的路径是:/etc/default/prometheus-mysqld-exporter,看起来像:

# By default the connection string will be read from
# $HOME/my.cnf or -config.my-cnf.
# To set a connection string from the environment instead, uncomment the
# following line.

 export DATA_SOURCE_NAME="exporter:password@(444.333.22.111:3306)/mysql"
# Set the command-line arguments to pass to the exporter.
# ARGS='-config.my-cnf /etc/mysql/debian.cnf'

    -collect.auto_increment.columns
    -collect.binlog_size
    -collect.info_schema.userstats
    -config.my-cnf string
    -web.listen-address=0.0.0.0:9104

普罗米修斯.yml:

# Sample config for Prometheus.

global:
  scrape_interval:     1s # By default, scrape targets every 15 seconds.
  evaluation_interval: 15s # By default, scrape targets every 15 seconds.
  # scrape_timeout is set to the global default (10s).

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'example'

# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
  # - "first.rules"
  # - "second.rules"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s
    scrape_timeout: 5s

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
            - targets: ['localhost:9090', 'localhost:9104']

  - job_name: node
    # If prometheus-node-exporter is installed, grab stats about the local
    # machine by default.
    static_configs:
      - targets: ['localhost:9100']

不幸的是,它没有做我想做的事,并继续监控我安装了 Prometheus 的机器。任何想法可能是问题所在? 提前致谢!

【问题讨论】:

我不知道是否需要 - 但根据我的经验,您通常希望在运行服务的机器上安装导出器 - 即在 MariaDB 服务器上安装 mysqld-exporter。 感谢您的回复!我在想一个出口商可以从远程服务器上报废数据库数据。他们是否有任何文档,我在哪里可以找到有关该主题的一些提示? 有可能将 mysqld-exporter 安装在与 MariaDB 不同的服务器上——但我从未见过有人这样做的例子。也许尝试在 MariaDB 服务器上本地安装 mysqld-exporter,如果问题仍然存在,那么您可以从那里继续进行故障排除。 请注意,您应该将 mysql 导出器放在自己的工作上。工作标签通常用于识别度量领域。我不知道您的期望,但您的节点导出器只有一个静态配置。您的描述中有很多动人的部分没有加起来。这令人困惑。 “继续监控我安装了 Prometheus 的机器”是什么意思? 我的问题基本上是我是否可以通过 prometheus mysql exporter 远程抓取数据?我有两台机器,第一台有 Prometheus 和 mysql 导出器,第二台有 MariaDB。 【参考方案1】:

让我们首先尝试理解这一点,Exporter需要监控来自远程服务器的指标,因此exporter的配置应该是正确的,因为它正在尝试向IP请求MariaDB 服务器即444.333.22.111(远程服务器IP)。

MariaDB 服务器应将 Exporter 服务器的 IP 列入白名单,以允许来自那里的任何请求。

解决方案: 当您在 MariaDB 中创建用户时,在您的情况下是 'exporter'@'444.333.22.111',因此这意味着您将 444.333.22.111 列入用户 exporter 的白名单。

但是您应该将服务器的 IP 列入白名单,其中设置了 prometheus-mysqld-exporter。但在你的情况下,它是不同的服务器。所以应该是这样的

MariaDB [(none)]> CREATE USER 'exporter'@'exporter server 的 IP' IDENTIFIED BY 'password'; MariaDB [(none)]> GRANT PROCESS, REPLICATION CLIENT, SELECT ON . TO 'exporter'@'exporter server IP'; MariaDB [(none)]> 刷新权限;

试试这个,如果您遇到任何错误,请告诉我,同时尝试查看 prometheus-mysqld-exporter 日志。

【讨论】:

以上是关于Prometheus mysql-exporter的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus监控实战系列七:任务与实例

Prometheus监控运维实战六: Node_exporter监控主机

Prometheus FAQ

prometheus视频教程

grafana和prometheus系列六:prometheus默认存储

2019最新 prometheus视频教程 prometheus监控视频 prometheus入门与实践教程