New Relicを活用した Cloud SQLの監視

# はじめに

クラウド上にあるマネージドサービスでは運用の手間が少なく様々なサービスを活用できる一方で、ご自身で構築した環境と異なり必要な情報の取り方が変わってくるケースもあります。
本記事ではGoogle CloudのCloud SQL for MySQLを例に、Cloud SQLの情報を取得し、New Relicに送る方法を解説します。

## On-host integrationを利用した情報の取得
![VM to CloudSQL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970168/6bc743fe-6dd7-49b3-f6b6-5bcec3c20e0d.png)

New Relicでは、インフラストラクチャエージェントと連携して動作するインテグレーションをon-host integrations と呼んでいます。
これらのインテグレーションは、サポートされているサービスからデータを収集し、インフラストラクチャエージェントを使用してそのデータをNew Relicに送信します。

今回はMySQL monitoring itegrationを利用し、VPC内に設置されたVMからCloud SQLインスタンスに接続し、MySQLの詳細な情報を取得するまでをステップバイステップで解説します。

MySQL monitoring integration
https://docs.newrelic.com/jp/install/mysql/

### MySQL monitoring integrationの設定

MySQL monitoring integrationの設定を開始するには、「Integration & Agents」メニューより、MySQLを検索し、決定します。

![blog07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970168/0bcc4bd0-6851-c527-89cf-6c90c85e012c.png)

設定方法が複数レコメンドされますが、今回はVMに直接インストールするため 「On a host」を選択します。
![blog08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970168/d05594d9-7421-3ab8-f641-f64d7885866c.png)

続いてインストールする対象のOSを選択します。
本記事ではLinuxを対象に、インストールを行います。

![blog09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970168/d9520d72-9ae4-55bf-2e29-7cf8c5993e3f.png)


#### 監視用ユーザーの作成

続いてVMからCloudSQLに接続し、監視するユーザーを作成します。
usernameとpasswordのボックスにそれぞれ入力することで、コマンド例にusernameとpasswordが埋め込まれます。
(例では簡単なユーザー名とパスワードを設定していますが、実際に運用される環境では適切なパスワード設定を行なってください)

UI上からレコメンドされるコマンドではユーザー権限の対象が'newrelic'@'localhost'になっている点に注意が必要です。同一ホスト上でMySQLサーバが実行されている環境であれば問題ありませんが、CloudSQLでは実行するユーザーが別ホストにいます。ご自身の環境に合ったホスト名(例:'10.128.0.%')へ書き換えましょう。

![blog01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970168/c7d17491-3f1b-dd38-3557-aaeb156df615.png)

```bash:example
# Create 'newrelic' user
CREATE USER 'newrelic'@'10.128.0.%' IDENTIFIED BY 'example';

# Grant replication client privileges
GRANT REPLICATION CLIENT ON *.* TO 'newrelic'@'10.128.0.%';

# Grant select privileges
GRANT SELECT ON *.* TO 'newrelic'@'10.128.0.%';
```

管理ユーザなどでCloudSQLインスタンスに接続したらユーザー作成クエリを実行し、監視用ユーザーを作成します。

#### On-host integrationの設定

づづいて監視元となるVMで監視設定を行います。
プルダウンメニューからご自身のOSを選択し、Integrationパッケージのインストールコマンドを実行します。
(プルダウンメニューの内容により、パッケージマネージャーのコマンドが変化します)

パッケージのインストールが完了しましたら、画面の指示に従いディレクトリを移動します。

![blog10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970168/c913f557-32ca-19fb-d921-ebff433a81ad.png)

続いて設定ファイルを作成します。
UI上で設定ファイル `mysql-config.yml` の内容が表示されますので、ダウンロードないしコピー&ペーストでインテグレーションの設定ディレクトリ配下(例: /etc/newrelic-infra/integrations.d )にファイルを設置します。

```yaml:mysql-config.yml
integrations:
  - name: nri-mysql
    env:
      HOSTNAME: 10.6.16.5
      PORT: 3306

      # ENABLE_TLS: false
      # INSECURE_SKIP_VERIFY: false

      # Specify extra connection parameters as attr1=val1&attr2=val2.
      # EXTRA_CONNECTION_URL_ARGS: ""

      # If not empty `socket` parameter will discard `port` parameter
      # SOCKET: <PATH_TO_LOCAL_SOCKET_FILE_NAME>

      USERNAME: newrelic
      PASSWORD: example

      # Extended metrics
      EXTENDED_METRICS: true
      EXTENDED_INNODB_METRICS: true
      EXTENDED_MYISAM_METRICS: true

      REMOTE_MONITORING: true

    # Time between consecutive executions of the integration. It must be a number followed by a time unit (s, m or h), without spaces.
    # The default is 30s, and the minimum accepted value is 15s. Any value lower than 15s is automatically set to 15s.
    interval: 30s

    # The agent uses those labels to decorate the metrics, events, and inventory that it receives from a given integration instance.
    labels:
      env: production
      role: write-replica

    # Advanced: Allows overriding the category and term of the inventory source.
    inventory_source: config/mysql

```

レコメンドされているファイルではHOSTNAMEに対しlocalhostが設定されていますので、対象のCloud SQLインスタンスに置き換えます。

本記事ではPRIVATE_ADDRESSに対し接続します。

```
gcloud sql instances list
NAME                     DATABASE_VERSION  LOCATION       TIER         PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
okawa-cloudsql-5a295ada  MYSQL_8_0         us-central1-c  db-f1-micro  -                10.6.16.5        RUNNABLE
```

以上で設定は完了です。
続いて、データが正常に入ってきているかどうかを確認します。

#### データの流入を確認する

データが正常にNew Relicに入っているかは、Metrics & Eventsから確認できます。

検索窓にmysqlと入力し、期待されたデータが取得できるか確認しましょう。

![blog11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970168/3bacacb6-0705-7a44-69f1-c155a8171f39.png)

# おわりに
本記事ではリモートからマネージドサービス(CloudSQL)内の情報を取得する方法を解説しました。
皆様の監視ライフの一助になりますと幸いです。

# その他
New Relicでは、**新しい機能やその活用方法**について、QiitaやXで発信しています！
**無料でアカウント作成**も可能なのでぜひお試しください！

:::note info
New Relic株式会社の[X(旧Twitter)](https://x.com/NewRelicJapan) や [Qiita OrganizationOrganization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::

:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)