sql >> データベース >  >> RDS >> Mysql

ScaleGridでPrometheusとGrafanaを使用してMySQLの展開を監視する方法

    MySQLデータベースのパフォーマンスをリアルタイムで監視すると、現在または将来問題を引き起こす可能性のある問題やその他の要因をすぐに特定できます。また、データベースのどのコンポーネントを拡張または最適化して効率とパフォーマンスを向上させることができるかを判断するための良い方法でもあります。これは通常、データベース管理ソフトウェアに組み込まれている、またはサードパーティプロバイダーからインストールされた監視ソフトウェアとツールを介して行われます。

    Prometheusは、イベントの監視とアラートに使用されるオープンソースのソフトウェアアプリケーションです。 Grafanaなどの視覚化ツールと一緒に使用すると、ダッシュボードの作成と編集、クエリ、視覚化、アラート、およびメトリックの理解を簡単に行うことができます。 ScaleGridは、MySQLデプロイメントへの完全な管理アクセスを提供します。これにより、既存のMySQLエコシステムのツールをAWSまたはAzure上のScaleGridMySQLデプロイメントと簡単に統合できます。 Prometheusは、純粋な数値の時系列を記録するのに適しています。また、多次元データの収集とクエリのサポートも提供します。 Grafanaを使用して、解釈と利用が容易な方法でこのデータを視覚化するのに役立つダッシュボードを構築できます。これらのツールは、ScaleGrid MySQLの監視、クエリ分析、アラートに加えて、指標、使用パターン、データセットに関する追加の洞察を提供します。このブログ投稿では、高度なデータベースの監視とアラートのために、ScaleGridMySQLデプロイメントでPrometheusとGrafanaをセットアップして使用する方法について説明します。

    MySQLモニタリングを設定する方法

    メトリックを保存および表示するためのPrometheusサーバー、メトリックを収集して中継するエクスポーター(この場合はMySQLエクスポーター)のインストールと構成に関連する手順を見ていきましょう。 Prometheusサーバー、およびダッシュボードを作成するためのGrafana。 MySQLエクスポーターツールは、MySQLサーバーにローカルにインストールすることも、Prometheusサーバーに集中的にインストールすることもできます。以下のユースケースでは、Ubuntuで実行されている中央ホストからPrometheus、MySQL Exporter、およびGrafanaをセットアップして使用を開始し、複数のMySQLサーバーを監視する方法を説明します。また、PrometheusとGrafanaforMySQLのヘルプドキュメントで手順を確認することもできます。

    以下のブロック図は、2つのデータ保持ノード(マスターとスレーブ)と1つの投票メンバー(クォーラム)を使用するマスタースレーブクォーラムMySQLデプロイメントのセットアップを示しています。 MySQLエクスポーター、Prometheusホスト、およびGrafana:

    Prometheusサーバーのインストールと構成

    Prometheusは、MySQLメトリックを一元化して保存するために使用するツールです。 1つまたは複数のエクスポーターから定期的にメトリックを取得し、UIに表示します。以下は、中央のUbuntuホストにPrometheusをインストールして構成する手順です。詳細については、この記事を参照してください。

    1。プロメテウスシステムグループとユーザーを作成する

    $sudo groupadd --system prometheus
    $sudo useradd -s /sbin/nologin --system -g prometheus prometheus

    2。 Prometheusのデータディレクトリを作成する

    $sudo mkdir /var/lib/prometheus

    3。 Prometheusの構成ディレクトリを作成する

    $for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done

    4。 Prometheusアーカイブをダウンロードしてファイルを抽出する

    Prometheusの最新のバイナリアーカイブをダウンロードするには:

    $mkdir -p /tmp/prometheus && cd /tmp/prometheus
    $curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest \
    | grep browser_download_url \
    | grep linux-amd64 \
    | cut -d '"' -f 4 \
    | wget -qi -

    ファイルを抽出するには:

    $tar xvf prometheus*.tar.gz
    $cd prometheus*/

    5。 Prometheusファイルを標準の場所に移動する

    Prometheusバイナリファイルを/usr / local / binに移動します:

    $sudo mv prometheus promtool /usr/local/bin/

    Prometheus構成テンプレートを/etcディレクトリに移動します:

    $sudo mv prometheus.yml  /etc/prometheus/prometheus.yml

    コンソールとconsole_librariesも/ etc /prometheusディレクトリに移動します:

    $sudo mv consoles/ console_libraries/ /etc/prometheus/

    6。 Prometheus構成ファイルの作成/編集

    テンプレートの構成は次のようになります。

    $cat /etc/prometheus/prometheus.yml
    
     #my global config
     global:
     scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
     evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
     #scrape_timeout is set to the global default (10s).
    
     #Alertmanager configuration
     alerting:
     alertmanagers:
     - static_configs:
     - targets:
     #- alertmanager:9093
    
     #Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
     rule_files:
     #- "first_rules.yml"
     #- "second_rules.yml"
    
     #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'
    
     #metrics_path defaults to '/metrics'
     #scheme defaults to 'http'.
    
     static_configs:
     - targets: ['localhost:9090']

    7。 Prometheussystemdサービスユニットファイルを作成する

    $sudo vim /etc/systemd/system/prometheus.service

    次のコンテンツを追加します:

     [Unit]
     Description=Prometheus
     Documentation=https://prometheus.io/docs/introduction/overview/
     Wants=network-online.target
     After=network-online.target
    
     [Service]
     Type=simple
     Environment="GOMAXPROCS=1"
     User=prometheus
     Group=prometheus
     ExecReload=/bin/kill -HUP $MAINPID
     ExecStart=/usr/local/bin/prometheus \
     --config.file=/etc/prometheus/prometheus.yml \
     --storage.tsdb.path=/var/lib/prometheus \
     --web.console.templates=/etc/prometheus/consoles \
     --web.console.libraries=/etc/prometheus/console_libraries \
     --web.listen-address=0.0.0.0:9090 \
     --web.external-url=
    
     SyslogIdentifier=prometheus
     Restart=always
    
     [Install]
     WantedBy=multi-user.target

    次の行を編集することを忘れないでください: Environment =” GOMAXPROCS =1 1をサーバー上のvcpusの数に置き換えます。

    8。ディレクトリ権限の変更

    これらのディレクトリの所有権をPrometheusユーザーとグループに変更します:

    $for i in rules rules.d files_sd; do sudo chown -R prometheus:prometheus /etc/prometheus/${i}; done
    $for i in rules rules.d files_sd; do sudo chmod -R 775 /etc/prometheus/${i}; done
    $sudo chown -R prometheus:prometheus /var/lib/prometheus/

    9。 systemdデーモンをリロードしてサービスを開始

    $sudo systemctl daemon-reload
    $sudo systemctl start prometheus
    $sudo systemctl enable prometheus

    systemctl status prometheusを使用してステータスを確認します コマンド:

    10。ポート9090を開くようにファイアウォールを構成する

    $sudo firewall-cmd --add-port=9090/tcp --permanent
    $sudo firewall-cmd --reload

    セットアップが完了したら、http:// :9090

    にログインしてPrometheusUIにアクセスできます。

    ScaleGridでPrometheusとGrafanaを使用して#MySQLデプロイメントを監視する方法ClickToTweet

    MySQLPrometheusExporterのインストールと構成

    Prometheusには、MySQLサーバーのメトリックを収集するためのエクスポーターが必要です。このエクスポーターは、Prometheusサーバーまたはデータベースサーバーで一元的に実行できます。詳細については、Prometheusのドキュメントを参照してください。

    以下の手順に従って、中央のPrometheusホストにMySQLPrometheusExporterをインストールしてセットアップします。詳細については、この記事を参照してください。

    1。 PrometheusMySQLExporterをダウンロードしてインストールします

    $curl -s https://api.github.com/repos/prometheus/mysqld_exporter/releases/latest   | grep browser_download_url   | grep linux-amd64 | cut -d '"' -f 4   | wget -qi -
    $tar xvf mysqld_exporter*.tar.gz
    $sudo mv  mysqld_exporter-*.linux-amd64/mysqld_exporter /usr/local/bin/
    $sudo chmod +x /usr/local/bin/mysqld_exporter

    2。 Prometheus Exporterデータベースユーザーを作成して、データベースにアクセスし、メトリックをスクレイプし、助成金を提供します

    CREATE USER 'mysqld_exporter'@'<PrometheusHostIP>' IDENTIFIED BY 'StrongPassword' WITH MAX_USER_CONNECTIONS 2;
    GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'<PrometheusHostIP>';
    FLUSH PRIVILEGES;
    EXIT

    WITH MAX_USER_CONNECTIONS 2 は、ユーザーの最大接続制限を設定するために使用され、高負荷時にスクレイプを監視してサーバーに過負荷をかけないようにします。

    3。データベースクレデンシャルを構成する

    中央ホストのエクスポーターの構成ファイルを編集します:

    $sudo vim /etc/.mysqld_exporter.cnf

    作成したユーザーのユーザー名とパスワード、および監視するScaleGrid MySQLサーバーを追加します:

    $sudo vim /etc/.mysqld_exporter.cnf
    
    [client]
    user=mysqld_exporter
    password=StrongPassword
    host=SG-mysqltestcluster-123456.servers.mongodirector.com

    所有権の権限を設定する:

    $sudo chown root:prometheus /etc/.mysqld_exporter.cnf

    4。 systemdユニットファイルを作成する

    中央ホストに新しいサービスファイルを作成します:

    $sudo vim /etc/systemd/system/mysql_exporter.service

    次のコンテンツを追加します:

     [Unit]
     Description=Prometheus MySQL Exporter
     After=network.target
     User=prometheus
     Group=prometheus
    
     [Service]
     Type=simple
     Restart=always
     ExecStart=/usr/local/bin/mysqld_exporter \
     --config.my-cnf /etc/.mysqld_exporter.cnf \
     --collect.global_status \
     --collect.info_schema.innodb_metrics \
     --collect.auto_increment.columns \
     --collect.info_schema.processlist \
     --collect.binlog_size \
     --collect.info_schema.tablestats \
     --collect.global_variables \
     --collect.info_schema.query_response_time \
     --collect.info_schema.userstats \
     --collect.info_schema.tables \
     --collect.perf_schema.tablelocks \
     --collect.perf_schema.file_events \
     --collect.perf_schema.eventswaits \
     --collect.perf_schema.indexiowaits \
     --collect.perf_schema.tableiowaits \
     --collect.slave_status \
     --web.listen-address=0.0.0.0:9104
     
     [Install]
     WantedBy=multi-user.target

    web.listen-address =0.0.0.0:9104 サーバーがポート9104でリッスンしていることを指定します。サーバーにパブリックネットワークとプライベートネットワークがある場合は、0.0.0.0:9104をプライベートIPに置き換える必要があります(例:192.168.4.5:9104)。

    完了したら、systemdをリロードし、mysql_exporterサービスを開始します:

    $sudo systemctl daemon-reload
    $sudo systemctl enable mysql_exporter
    $sudo systemctl start mysql_exporter

    5。 PrometheusによってスクレイプされるようにMySQLエンドポイントを構成する

    以下のようにprometheus.ymlファイルに変更を加えます:

    scrape_configs:
    - job_name: mysql_server1
    static_configs:
    - targets: ['localhost:9104']
    labels:
    alias: db1

    注:エクスポーターがPrometheusと同じホストで実行されていない場合は、localhostではなくサーバーのIPアドレスを指定してください。 9104は、前の手順で指定したように、Prometheusがリッスンするポートを指します。

    中央のPrometheusホストからの複数のMySQLホストの監視

    複数のMySQLサーバーを中央サーバーから監視できます。これは、サーバーごとに個別のエクスポーターサービスを用意することで実現できます。上記の手順3および4で説明したように、サービスごとに.mysqld_exporter.cnfおよびmysql_exporter.service(–web.listen-addressフラグに一意のポート番号が割り当てられている)ファイルを作成してください。上記の手順5で説明したように、prometheus.ymlファイルにターゲットを追加します。ジョブ名は一意である必要があります ターゲットごとに。例:

    scrape_configs:
    - job_name: mysql_server1
    static_configs:
    - targets: ['localhost:9104']
    labels:
    alias: db1
    - job_name: mysql_server2
    static_configs:
    - targets: ['localhost:9105']
    labels:
    alias: db2
    - job_name: mysql_server3
    static_configs:
    - targets: ['localhost:9106']
    labels:
    alias: db3

    注:Prometheusサーバーはネットワーク経由でターゲットに到達できる必要があります。ネットワーク/ファイアウォールの構成がそれに応じて変更されていることを確認してください。

    Grafanaのインストールとダッシュボードの作成

    GrafanaはPrometheusをデータソースとして使用し、ダッシュボードを作成して指標をより適切に視覚化して理解できるようにします。時系列データを洞察するための優れた方法を提供します。

    以下の手順に従って、中央のPrometheusホストにGrafanaをインストールします。

    1。最新のGrafanaバージョンをダウンロードする

    「Grafanaのダウンロード」ページに移動して、最新バージョンをダウンロードします。

    $wget <debian package url>
    $sudo apt-get install -y adduser libfontconfig1
    $sudo dpkg -i grafana_<version>_amd64.deb

    2。 APTリポジトリをダウンロードしてGrafanaをインストールする

    コマンドadd-apt-repositoryはDebian 9のデフォルトのアプリではなく、以下が必要です:

    $apt-get install -y software-properties-common

    安定したリリース用のリポジトリをインストールします:

    $sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

    ベータリリースが必要な場合は、別のリポジトリがあります:

    $sudo add-apt-repository "deb https://packages.grafana.com/oss/deb beta main"

    Ubuntuまたは別のDebianバージョンを使用している場合でも、上記の行を使用してください。次に、gpgキーを追加します。これにより、署名されたパッケージをインストールできます:

    $wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

    Aptリポジトリを更新し、Grafanaをインストールします:

    $sudo apt-get update
    $sudo apt-get install grafana

    3。サービスを開始する

    $systemctl daemon-reload
    $systemctl start grafana-server
    $systemctl status grafana-server

    Grafanaが起動時に開始するようにsystemdサービスを有効にします:

    $sudo systemctl enable grafana-server.service

    Grafanaを実行するには、ブラウザを開いて http:// :3000 /にアクセスします。 。 3000は、Grafanaがデフォルトでリッスンするhttpポートです。

    4。データソースの追加

    インストールしたら、管理ダッシュボードにログインし、[構成]>[データソース]に移動します。 [データソースの追加]をクリックし、[時系列データベース]で[Prometheus]を選択して、[名前]フィールドと[URL]フィールドに入力します。

    名前:Prometheus-1 URL:http:// localhost:9090

    注:PrometheusサーバーがGrafanaと同じホストで実行されていない場合は、localhostではなくサーバーのIPアドレスを指定してください。

    これで、MySQLモニタリング用のダッシュボードを作成およびカスタマイズする準備が整いました。ダッシュボードピッカーの右側にあるリンクをクリックすると、新しいダッシュボードを作成できます。ダッシュボードが作成されたら、表示するメトリックを選択するパネルを追加し、ダッシュボードにスターを付け、保存して共有できます。詳細な手順については、GrafanaのGettingStartedドキュメントを参照してください。

    これは、ScaleGridでのMySQLデプロイメント用に作成されたGrafanaダッシュボードの例です。

    上記のGrafanaダッシュボードには、MySQL Selectタイプ、MySQLクライアントスレッドアクティビティ、MySQLネットワーク使用時間、およびチャートに視覚化されたMySQLテーブルロックメトリックが表示され、以下のGrafanaダッシュボードにはMySQLトップが表示されます。コマンドカウンターとMySQLトップコマンドカウンター1時間ごと。

    私たちは常にユーザーの生活を楽にすることを目指しています。そのため、ScaleGridの展開に接続したい他のツールをお知らせください。コメントまたはTwitter(@scalegridio)経由。


    1. JSON_EXTRACT()–MySQLのJSONドキュメントからデータを返す

    2. OracleSQLステートメントの行を集約

    3. Oracleのlistaggの代わりに?

    4. Postgresを開始できません