New Relicで3rd Partyのソフトウェアのデータも統合監視しよう！ - MySQL編

on-host Integrationsを使うと、ApacheやMySQLなどのメトリクスを収集して、ミドルウェアレベルでの問題切り分けやパフォーマンスなどの分析ができるようになります。

# on-host Integrationsとは
on-host IntegrationsはNew Relic Infrastructure エージェントをインストールすることで利用でき、多くの3rd Party ソフトウェアの独自のデータをNew Relicに送って、監視することができます。

on-host Integrationsで対応しているサービスは以下サイトでご確認いただけます。

https://newrelic.com/instant-observability?category=infrastructure-and-os

Apache Integrationのセットアップは以下記事が参考になります。

https://qiita.com/nr-mito/items/c14647f651bb0e1a7113

Infrastructure エージェントのインストール方法は以下Qiitaブログが参考になります。

https://qiita.com/nr-mito/items/b11c4645cfc3f5ad6d8a

https://qiita.com/nr-mito/items/7ab8f9d69b12943a8a0b

on-host Integrationsは、Infrastructure エージェントをインストールした後に、統合したい3rd Party ソフトウエアに対応したパッケージをインストール（例えば、Linux環境のMySQLを統合する場合は、yum install nri-mysqlでインストール)します。

# 試してみよう
今回はMySQLのステータスをon-host Integrationsで取得する設定を試してみます。

### インストール前の事前チェック
New Relicの管理画面にログインし、「＋ Integrations & Agents」を選択->「MySQL」を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/f9846804-ef8d-6719-2fed-7661e1b707cd.png" width="30%">

セットアップ方法は今回は「On a host」を選択します。Ansibleでセットアップしたり、New RelicのCLIを使ったセットアップ方法なども選択できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/baf35eb1-50e4-2202-85db-656a6e57d863.png" width="65%">

セットアップするOSを選択します。今回はLinuxを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/27f94f2c-e93e-d2bc-566b-4d0c8d16cc26.png" width="65%">

InfraStracture エージェントが入っている対象ホストを選択します。InfraStracture エージェントをインストールする場合、「Instrument a new host」をクリックすると、画面でガイドを受けながらエージェントをインストールすることもできます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/8013556e-7887-d5f7-46e5-7f0f1ccac9aa.png" width="65%">

セットアップする環境がセットアップ要件を満たしているか確認していきます。

IntegrationがサポートしているMySQLのバージョン（5.6以上）を使用しているか確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/c820dd7b-ddf7-4118-40ae-fb1347d807ed.png" width="70%">

```bash:コマンドの出力例
# mysql --version
mysql  Ver 8.0.40 for Linux on x86_64 (MySQL Community Server - GPL)
```

OSがTLS1.2以上をサポートしているか確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/fecb4aab-1805-7972-c87c-8b1c20b3aa0b.png" width="65%">

```bash:コマンドの出力例
# openssl ciphers -v | awk '{print " - " $2}' | sort | uniq
 - SSLv3
 - TLSv1
 - TLSv1.2
 - TLSv1.3
```

MySQL IntegrationがMySQLのステータスを取得するのに使用するMySQLのusernameとpassowrdを入力すると、MySQLのユーザー作成のSQLクエリが生成されるので、コピーしてMySQLにログインして実行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/9b2af2c7-edb4-9a76-6a38-0fda001d2c3d.png" width="65%">
```sql:実行例
# Create 'newrelic' user
CREATE USER 'newrelic'@'localhost' IDENTIFIED BY 'password';
# Grant replication client privileges
GRANT REPLICATION CLIENT ON *.* TO 'newrelic'@'localhost';
# Grant select privileges
GRANT SELECT ON *.* TO 'newrelic'@'localhost';
```

作成したユーザーでMySQLのステータスを取得できることを確認します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/40a3636b-7f03-e944-7838-ced999327cc3.png" width="65%">

```sql:実行例
# mysql --user=newrelic --password=password -e 'show status' | grep Uptime
mysql: [Warning] Using a password on the command line interface can be insecure.
Uptime	677
```

### インストール
Integrationをインストールする環境のOSを選択します。今回はAmazonLinuxを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/8f9dc71a-1d2b-8e08-e1bd-894e9eb179fa.png" width="30%">

ガイドで表示されたインストールコマンドをOS内で実行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/8036aa1a-4dfd-7d5b-67d5-e81e9dd20e9c.png" width="50%">
```bash
sudo yum install nri-mysql -y
```

Integrationの構成ファイルを画面上でコピーもしくはDLしてガイドされているサーバーの所定のディレクトリに配置します。MySQL Integrationの設定例については[公式ドキュメント](https://docs.newrelic.com/install/mysql/#examples)をご確認ください。今回は画面上で生成されたデフォルト値を設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/57425c52-52a6-27f8-942f-5f16816ed275.png" width="50%">

```yaml: /etc/newrelic-infra/integrations.d/mysql-config.yml
integrations:
  - name: nri-mysql
    env:
      HOSTNAME: localhost
      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: password

      # 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

```

構成ファイルを配置後、正しく設定されているかコマンドで確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/232914b9-48fb-bbe4-cc0a-123770251455.png" width="50%">


```bash:コマンドの出力例
# sudo /usr/bin/newrelic-infra -dry_run -integration_config_path /etc/newrelic-infra/integrations.d/mysql-config.yml | grep -wo "Integration health check finished with success"
Integration health check finished with success
```

「Integration health check finished with success」が返ってくればOKです。

オプションでMySQLのログを転送する設定を行います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/8efd6285-b280-d3ef-05b5-d25c192a83d3.png" width="70%">

```yaml:/etc/newrelic-infra/logging.d/mysql-log.yml 
logs:
- name: "mysql_errors"
  file: /var/log/mysql/error.log
  attributes:
    logtype: mysql-error

```

これでセットアップ完了です！

# データを確認しよう
「Infrastructure」→「Third-party services」→「Apache Dashboard」を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/ac516691-71e5-e5f4-4e9a-e36b4e4f86d5.png" width="70%">

セットアップしたMySQLのステータスをすぐに分析できるダッシュボードが表示されました。on-host Integrationsでセットアップしたデータはビルドインのダッシュボードですぐにデータが可視化されるので、セットアップ終えてすぐにダッシュボードを使ったカスタムデータの分析ができるようになっています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/64985f04-017d-3de8-0ac2-1b4e7d74bbb9.png" width="90%">

本記事ではon-host Integrationsを使ってMySQLのステータスをNew Relicに送って、可視化するまでの流れを紹介しました。アプリケーションの運用ではインフラやアプリケーションの監視だけでなく、DBサーバーのソフトウエアのステータスを監視するのもアプリケーションのパフォーマンスや稼働状況を確認するうえで重要になります。簡単にセットアップできますので、是非お試しください！

# その他
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)
:::