概要

MySQL Telemetry が提供する OpenTelemetry Metrics は、MySQL データベースのパフォーマンス、動作、健全性に関する情報を提供します。最大 400 の MySQL 内部メトリックが公開され、ユーザは以下を適切に行えるようになります。

  • リソースの利用状況評価
  • ボトルネックの特定
  • モニタリング
  • 問題の検出とトラブルシューティング
  • パフォーマンス指標の追跡
  • キャパシティプランニング
  • アラート
  • その他のインサイト

この恩恵は特に、多数のデータセンターに分散して数十から数千のMySQLデータベースが配置されているような、大規模な案件で享受できます。接続やポーリング、情報送信に特別な特権アカウントが必要のない、安全なプッシュ・モデルであるOpenTelemetryのモデルは、セキュリティの観点からも望ましい仕組みです。MySQLは、Cloud Native Compute FoundationのOpenTelemetry Protocol (OTLP)を、オープンスタンダードに基づいて採用しています。

MySQL Server 内で設定されると、メトリックは OpenTelemetry プロトコル (OTLP) を用いてストリーミングされ、これらのメトリックを収集、処理、アラート、視覚化するために設計された製品にエクスポートされます。これらの生測定値は、効率的にリアルタイムで MySQL 内部に取り込まれます。メトリックとトレースの相関も、OpenTelemetryを通じて実現できます。多くのツールやアプリケーションが、OpenTelemetry をネイティブサポートしています。

メトリック

MySQL Telemetry メトリックには、MySQL Server 内で更新されるメーター、カウンター、ゲージが含まれています。ここでは、MySQL EE Telemetry データを OCI メトリック・エクスプローラに転送する方法を中心に説明します。OCI メトリック・エクスプローラは OpenTelemetry プロトコル (OTLP) を使用しており、OCI Observability and Monitoring 製品群の一部として様々な O&M 製品と統合されています。

概要の説明は以上となりますが、ではさっそく OCI メトリック・エクスプローラにデータをエクスポートする手順を説明しましょう。

方法

ステップ 1 – O&M でドメインを定義

APM (Application Performance Monitoring) の「Telemetry」ドメインは、監視対象システムのグループを定義します。MySQL の場合、OpenTelemetry のトレースとメトリックの双方は、通常は指定されたサーバーやサービスのグループに対して同じドメインに送信されます。

ドメインの作成は簡単です。

Oracle Cloud Infrastructure コンソールで APM ドメインを作成する手順は、以下の通りです。 

  1. Oracle Cloud Infrastructure コンソールにサインインします。
  2. ナビゲーション・メニューを開き、[監視および管理]をクリックします。[アプリケーション・パフォーマンス・モニタリング]で[管理]をクリックします。
  3. [管理]ページの左ペインで、APM ドメインを作成するコンパートメントを選択します。
  4. [APM ドメイン]ページで、[APMドメインの作成]をクリックします。
  5. APM ドメインの作成ダイアログボックスに必要な詳細を入力します:
    • 名前フィールドに APM ドメインの名前を入力します。
    • [コンパートメントに作成] フィールドでコンパートメントを選択します。
    • [説明] フィールドに APM ドメインの説明を入力します。
    • オプションで、無料ドメインを作成するために [Always Free ドメインとして作成] チェックボックスをオンにします。チェックボックスをオフにすると、ドメインは有料ドメインとして作成されます。
    • タグを指定する場合は、[拡張オプションの表示] をクリックします。

APM ドメインの作成

次のステップには、ドメインから 2 つの設定情報が必要です。

  1. データ・アップロード・エンドポイント
  2. そのエンドポイントの秘密鍵

MySQL Telemetry がこのドメインにデータを送る設定のために、この2つの値を用います。

まず、データ・アップロード・エンドポイントをコピーします。

データ・アップロード・エンドポイント

次にそのエンドポイントの秘密鍵をコピーします。

次にそのエンドポイントの秘密鍵をコピー

これを実際に作業を見ながら、もう少し詳しい説明を確認したい人は、こちらのビデオ (英語) をご覧ください – 「Creating a ‘Data upload endpoint’ in OCI APM

必要な情報はこれだけで、非常に簡単です。

ステップ 2 – MySQL Telemetry コンポーネントのインストールと設定

以下の実行には、MySQL Enterprise Edition バージョン 8.4 LTS または 9 Innovation Release を用いる必要があります。
クラシックプロトコルを用いて MySQL サーバに接続します。以下では MySQL Shell を用いています。

% mysqlsh 
MySQL Shell 8.4.1-commercial
Copyright (c) 2016, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.

Type '\help' or '\?' for help; '\quit' to exit.
> \c --mc root@localhost
Creating a Classic session to 'root@localhost'
> select @@version;
> # バージョンは正しいか?
> select * from mysql.component;
> # Telemetry コンポーネントを未インストールの場合は以下でインストール 
> install component 'file://component_telemetry';
> # Telemetry 関連のシステム変数を確認 
> show variables like '%telemetry%';

+----------------------------------------------------------+----------------------------------+
| Variable_name                                            | Value                            |
+----------------------------------------------------------+----------------------------------+
| telemetry.metrics_enabled                                | ON                               |
| telemetry.metrics_reader_frequency_1                     | 10                               |
| telemetry.metrics_reader_frequency_2                     | 60                               |
| telemetry.metrics_reader_frequency_3                     | 0                                |
| telemetry.otel_bsp_max_export_batch_size                 | 512                              |
| telemetry.otel_bsp_max_queue_size                        | 2048                             |
| telemetry.otel_bsp_schedule_delay                        | 5000                             |
| telemetry.otel_exporter_otlp_metrics_certificates        |                                  |
| telemetry.otel_exporter_otlp_metrics_cipher              |                                  |
| telemetry.otel_exporter_otlp_metrics_cipher_suite        |                                  |
| telemetry.otel_exporter_otlp_metrics_client_certificates |                                  |
| telemetry.otel_exporter_otlp_metrics_client_key          |                                  |
| telemetry.otel_exporter_otlp_metrics_compression         | none                             |
# telemetry.otel_exporter_otlp_metrics_endpoint            | http://localhost:4318/v1/metrics |
# telemetry.otel_exporter_otlp_metrics_headers             |                                  |
| telemetry.otel_exporter_otlp_metrics_max_tls             |                                  |
| telemetry.otel_exporter_otlp_metrics_min_tls             |                                  |
| telemetry.otel_exporter_otlp_metrics_protocol            | http/protobuf                    |
| telemetry.otel_exporter_otlp_metrics_timeout             | 10000                            |
| telemetry.otel_exporter_otlp_traces_certificates         |                                  |
| telemetry.otel_exporter_otlp_traces_cipher               |                                  |
| telemetry.otel_exporter_otlp_traces_cipher_suite         |                                  |
| telemetry.otel_exporter_otlp_traces_client_certificates  |                                  |
| telemetry.otel_exporter_otlp_traces_client_key           |                                  |
| telemetry.otel_exporter_otlp_traces_compression          | none                             |
| telemetry.otel_exporter_otlp_traces_endpoint             | http://localhost:4318/v1/traces  |
| telemetry.otel_exporter_otlp_traces_headers              |                                  |
| telemetry.otel_exporter_otlp_traces_max_tls              |                                  |
| telemetry.otel_exporter_otlp_traces_min_tls              |                                  |
| telemetry.otel_exporter_otlp_traces_protocol             | http/protobuf                    |
| telemetry.otel_exporter_otlp_traces_timeout              | 10000                            |
| telemetry.otel_log_level                                 | info                             |
| telemetry.otel_resource_attributes                       |                                  |
| telemetry.query_text_enabled                             | ON                               |
| telemetry.trace_enabled                                  | ON                               |
+----------------------------------------------------------+----------------------------------+
35 rows in set (0.0051 sec)

最初にセットするのは、上記リスト中に # マークで示した 2 つの値で、最初のステップで Telemetry ドメインから取得した値をセットします。これらの変数のインストール時のデフォルト値は、ローカルで OpenTelemetry Collector が動作している場合の値となっています(下記再掲)。

telemetry.otel_exporter_otlp_metrics_endpoint            | http://localhost:4318/v1/metrics |
telemetry.otel_exporter_otlp_metrics_headers             

今回の場合、これらの変数に APM ドメインのデータ・アップロード・エンドポイントを指すように変更し、関連する秘密鍵もセットします。変更のためには SET PERSIST コマンドを実行し、OCI コンソールから得たエンドポイントの値をセットします。

短いビデオ (英語) で説明とデモを確認してください – 「Installing the Telemetry Component
# エンドポイントはこのような形でセットしてください
# 訳者註: OCIコンソールでコピーされるURLは、トレースやメトリックで共有されるエンドポイントのURL部分のみです。
# "/20200101/opentelemetry/v1/metrics" の部分は独自に追加してください。
> set persist_only telemetry.otel_exporter_otlp_metrics_endpoint="https://aaaade#######adj7e.apm-agt.us-ashburn-1.oci.oraclecloud.com/20200101/opentelemetry/v1/metrics"
# 次に秘密鍵をセットします
# 訳者註: HTTPリクエストに対する認証ヘッダの形で渡します。
> set persist_only telemetry.otel_exporter_otlp_metrics_headers="Authorization=dataKey <秘密鍵文字列>”
# SHOW VARIABLES を再実行すると、新しい値を確認できます。
> show variables like '%telemetry%metrics%';
  ...
> quit

persist_only変数を有効にするには、サーバーを再起動する必要があります。

Telemetry コンポーネントがデータ・アップロード・エンドポイントに接続する際に問題がないか、再起動時のエラーログを確認してください。

エラーが発生した場合、以下を確認してください。

  1. 設定に何か誤りがある
  2. selinux によってブロックされている
  3. ファイアウォールによってブロックされている
  4. その他のネットワークの問題

selinuxを実行しているlinuxの場合、エンドポイントのポートを追加する必要があります – APM の場合は443です。それ以外の Telemetry Collector場合は、デフォルトの 4318 など、別のポートに対応する必要があるでしょう。

# 許可された接続ポートを表示
$ semanage port -l | grep mysql
# ポートを追加
$ sudo semanage port -a -t mysqld_port_t -p tcp 443

AppArmorを実行しているLinuxの場合でも、同様にポートが許可されていなければならない要件があります。

ステップ 3 – MySQL メトリックの確認に メトリック・エクスプローラ を使う

ここまでで、インストール、構成、ネットワーク設定は完了です。mysqld のエラーログには、この時点では起動時の Telemetry コンポーネントのエラーは表示されていないはずです。

収集されたメトリックデータを確認してみましょう。

メトリック・エクスプローラへの行き方

下にスクロールし、Metric namespace ドロップダウンリストから、「oci_apm_monitoring」 を選びます (訳者註: 2024年10月現在、メトリック・エクスプローラの日本語化は完全には完成していないようです)。

From there select a Metric name to query, a Statistic followed by Update Chart

そののち、クエリする Metric name を選択し(以下の例では create_table カウンタを確認している)、次に Statistics(以下の例では Sum)を定義し、Update Chart をクリックします。

Update Chart

これで、グラフが更新されます。

メトリックのグラフ

やるべきことはこれで完了です。

次に検討すべきステップ

メーターグループの構成 – どのグループを有効または無効にするか、および特定のグループの頻度設定などを検討。

OpenTelemetry 経由のメトリック・エクスポートの頻度を定義。

例えば、OpenTelemetry 経由でメトリクスを出力する頻度を以下のシステム変数で設定します。

  • telemetry.metrics_reader_frequency_1
  • telemetry.metrics_reader_frequency_2
  • telemetry.metrics_reader_frequency_3                                                                                                              

最後に考えること

  • OCI Observability and Monitoringでレポート、アラート、ダッシュボードを作成。
  • カスタムメトリックグループを使うと、機械学習ベースの異常検知も有効にできます。

OCI Monitoring による、簡単なメトリックのエクスポート

OCI Application Performance Monitoring で使える多くの機能

Oracle APMに関するその他のブログについては、Observability and Management – Application Performance Monitoring ブログスペース (英語) で知ることができます。