Dockerで既に実行されているMySQLインスタンスの兄弟コンテナとしてNRDOT Collectorを使用して、MySQL監視をセットアップします。
ヒント
これを大規模に自動化するか、代わりにKubernetesで実行することをお考えですか?Ansibleのインストール、Chefのインストール、またはHelmチャートのインストールをご覧ください。
前提条件
インストールする前に、以下のものがあることを確認してください:
ホストにインストールされているDocker。
すでに実行中のMySQLコンテナ(MySQL 5.7以降)。
NewRelicライセンスキー。
コレクターコンテナからNew Relic OTLPエンドポイントへのネットワーク接続。
サポートされているMySQLのバージョン、必要な権限、および
performance_schemaの要件については、互換性と前提条件をご覧ください。
データベースユーザーを構成する
docker execを使用してMySQLコンテナに対してSQLを実行し、必要な権限を持つ監視ユーザーを作成します。<YOUR_MYSQL_CONTAINER_NAME>、<YOUR_MYSQL_ROOT_PASSWORD>、<YOUR_DB_USERNAME>、<YOUR_DB_PASSWORD>をご自身の値に置き換えます。
メトリクス収集に必要な最小限の権限を持つ監視ユーザーを作成するには、次を実行します:
bash$docker exec -i <YOUR_MYSQL_CONTAINER_NAME> mysql -u root -p'<YOUR_MYSQL_ROOT_PASSWORD>' -e "CREATE USER '<YOUR_DB_USERNAME>'@'%' IDENTIFIED BY '<YOUR_DB_PASSWORD>'; GRANT SELECT ON performance_schema.* TO '<YOUR_DB_USERNAME>'@'%'; FLUSH PRIVILEGES;"クエリサンプルと上位クエリも収集するには、代わりにすべての権限を付与してください:
bash$docker exec -i <YOUR_MYSQL_CONTAINER_NAME> mysql -u root -p'<YOUR_MYSQL_ROOT_PASSWORD>' -e "CREATE USER '<YOUR_DB_USERNAME>'@'%' IDENTIFIED BY '<YOUR_DB_PASSWORD>'; GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO '<YOUR_DB_USERNAME>'@'%'; GRANT SELECT ON performance_schema.* TO '<YOUR_DB_USERNAME>'@'%'; FLUSH PRIVILEGES;"(オプション)New Relicプラットフォームで待機時間データを表示するには、監視ユーザーに次の権限を付与します:
bash$docker exec -i <YOUR_MYSQL_CONTAINER_NAME> mysql -u root -p'<YOUR_MYSQL_ROOT_PASSWORD>' -e "GRANT UPDATE ON performance_schema.setup_consumers TO '<YOUR_DB_USERNAME>'@'%'; FLUSH PRIVILEGES;"(オプション)接続と権限を確認するには、次を実行します:
bash$docker exec -i <YOUR_MYSQL_CONTAINER_NAME> mysql -u '<YOUR_DB_USERNAME>' -p'<YOUR_DB_PASSWORD>' -e "SELECT 1;"コマンドがエラーなしで完了した場合、監視ユーザーとパスワードは正しいです。
NRDOT Collector の設定を作成します
この設定は、nrmysqlレシーバーを使用した基本的なMySQL監視に焦点を当てています。現在のディレクトリにmysql-config.yamlを生成するには、Dockerホストで以下を実行します:
$cat << 'EOF' > mysql-config.yaml$receivers:$ nrmysql:$ endpoint: "<YOUR_MYSQL_CONTAINER_NAME>:3306"$ transport: tcp$ username: "<YOUR_DB_USERNAME>"$ password: "<YOUR_DB_PASSWORD>"$ allow_native_passwords: true$ collection_interval: 15s$ initial_delay: 1s$ explain_mode: procedure$ statement_events:$ digest_text_limit: 4096$ time_limit: 24h$ limit: 500$ query_sample_collection:$ max_rows_per_query: 100$ allowed_comment_keys: [nr_service_guid]$ top_query_collection:$ lookback_time: 60$ max_query_sample_count: 5000$ top_query_count: 200$ collection_interval: 60s$ query_plan_cache_size: 1000$ query_plan_cache_ttl: 1h$ allowed_comment_keys: [nr_service_guid]$ events:$ db.server.query_sample:$ enabled: true$ db.server.top_query:$ enabled: true$ db.server.query_plan:$ enabled: true$ resource_attributes:$ db.system.version:$ enabled: true$ metrics:$ mysql.query.count:$ enabled: true$ mysql.query.slow.count:$ enabled: true$ mysql.commands:$ enabled: true$ mysql.innodb.data_file.io:$ enabled: true$
$processors:$ batch:$
$exporters:$ otlp/newrelic:$ endpoint: "<YOUR_NEWRELIC_OTLP_ENDPOINT>"$ headers:$ api-key: "<YOUR_NEWRELIC_LICENSE_KEY>"$ compression: gzip$ retry_on_failure:$ enabled: true$ initial_interval: 5s$ max_interval: 30s$ max_elapsed_time: 300s$
$service:$ pipelines:$ metrics:$ receivers: [nrmysql]$ processors: [batch]$ exporters: [otlp/newrelic]$ logs:$ receivers: [nrmysql]$ processors: [batch]$ exporters: [otlp/newrelic]$EOF設定パラメーター
| パラメータ | 説明 |
|---|---|
<YOUR_MYSQL_CONTAINER_NAME> | 実行中のMySQLコンテナの名前(またはDockerでDNS解決可能なホスト名)。 |
<YOUR_DB_USERNAME> | データベースユーザーの設定で作成した監視ユーザー。 |
<YOUR_DB_PASSWORD> | データベースユーザーの構成で作成した監視ユーザーのパスワード。 |
<YOUR_NEWRELIC_OTLP_ENDPOINT> | New Relic OTLPエンドポイント。詳細については、New Relic OTLPエンドポイントを参照してください。 |
<YOUR_NEWRELIC_LICENSE_KEY> | あなたのNew Relic ライセンスキー 。 |
NRDOT Collectorコンテナを起動してください。
コンテナ名で <YOUR_MYSQL_CONTAINER_NAME> を解決できるように、MySQLコンテナと同じDockerネットワーク上でコレクターを実行してください:
$docker run -d \> --name nrdot-collector \> --network <YOUR_DOCKER_NETWORK> \> -v "$PWD/mysql-config.yaml:/etc/nrdot-collector/mysql-config.yaml" \> newrelic/nrdot-collector:latest \> --config /etc/nrdot-collector/mysql-config.yamlヒント
docker inspect <YOUR_MYSQL_CONTAINER_NAME> --format '{{json .NetworkSettings.Networks}}'を使用して、MySQLコンテナのネットワークを特定してください。まだ共有のユーザー定義ネットワーク上にない場合は、ネットワークを作成し、両方のコンテナをそのネットワークに接続します:
$docker network create <YOUR_DOCKER_NETWORK>$docker network connect <YOUR_DOCKER_NETWORK> <YOUR_MYSQL_CONTAINER_NAME>コレクターコンテナが実行されていることを確認します:
$docker ps --filter name=nrdot-collector実行されていない場合は、ログでエラーを確認してください。最も一般的な原因は、mysql-config.yamlでのYAMLインデントの問題、または到達できないMySQLコンテナです:
$docker logs nrdot-collectorヒント
mysql-config.yamlを変更した後、コンテナを再起動して変更を適用してください:
$docker restart nrdot-collectorデータを探す、使う
データの収集が開始されると、New Relic UIから包括的なMySQLデータベース監視にアクセスできます。
New RelicでMySQLデータベースエンティティを見つけるには:
one.newrelic.com > All capabilities > Databasesに移動します。
Entity typeドロップダウンからMySQL instanceを選択し、Applyをクリックします。
エンティティのリストからMySQLデータベースを選択します。
データが到着していることを確認するには、クエリビルダーで次のクエリを実行します:
SELECT count(*) FROM MetricWHERE metricName LIKE 'mysql.%'AND instrumentation.provider = 'opentelemetry'SINCE 10 minutes ago
関連ドキュメント
NRDOTを使用したMySQLモニタリングの概要
New Relicを使用したMySQL監視で利用可能なすべてのインストレーション方法についてご確認ください。
セルフホスト型インストール
物理サーバー、仮想マシン、およびスタンドアロンのインストレーションでMySQL監視をセットアップする方法を学びます。
Ansibleのインストール
newrelic.newrelic_installを使用して、MySQL監視を大規模にインストールおよび設定する方法をご確認ください。Ansibleロール。
Chefのインストール
newrelic-install Chefクックブックを使用して、MySQL監視を大規模にインストールおよび設定する方法について説明します。
Helmチャートのインストール
mysql-otel Helmチャートを使用して、KubernetesでMySQL監視をインストールおよび構成する方法について説明します。