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

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

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

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

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

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

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

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

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


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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/1caac611-32c6-60c0-86f6-9af40dfade25.png" width="30%">

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/dbd08f61-4e7b-3c05-a246-409d441383ee.png" width="65%">

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/25d0cf0d-64af-ab5c-75cc-45969305981f.png" width="65%">

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/d8a9f94e-3923-6715-4b1e-3e6799d979c0.png" width="65%">

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

IntegrationがサポートしているApacheのバージョン（2.2 or 2.4）を使用しているか確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/8318f1b6-e3c6-4e1f-8784-4a5cb9a694e8.png" width="65%">

```bash:コマンドの出力例
# /usr/sbin/apachectl -v | grep version
Server version: Apache/2.4.62 (Amazon Linux)
```

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
```

Apacheのステータスを取得するのに利用するモジュール（mod_status）が有効になっているか確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/2914f644-6cc4-397e-491b-70982cda441c.png" width="65%">

環境によってはガイド画面に出ているapachectlコマンドでモジュール情報を取得できないケースがあるので、環境にあわせて実行するコマンドを変えてください。
```bash:コマンドの出力例
# /usr/sbin/httpd -M | grep status_module
 status_module (shared)
```
```bash:コマンドの出力例
# /usr/sbin/apachectl -M | grep status_module
 status_module (shared)
```

Apacheのon-host IntegrationsはNew Relic InfrastructureエージェントがポーリングでApacheのステータスを取得するエンドポイントにGetリクエストを送ってデータを取得する方式になっています。

④のステップでApacheのステータスを取得できるエンドポイントにon-host IntegrationsをセットアップしているOSからアクセスできるか確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/5cbfe209-1cdf-c6ec-1b3f-429b969568ea.png" width="65%">

```bash:コマンドの出力例
curl -I http://127.0.0.1/server-status 2>/dev/null | head -n 1 | cut -d$' ' -f1,2
HTTP/1.1 200
```

### インストール
Integrationをインストールする環境のOSを選択します。今回はCentOSを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/ef72c485-e337-aa98-47bf-19b6f5c6f139.png" width="30%">

ガイドで表示されたインストールコマンドをOS内で実行します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/b2722a1b-a650-b736-ee2d-1910756d6a67.png" width="70%">

Integrationの構成ファイルを画面上でコピーもしくはDLしてガイドされているサーバーの所定のディレクトリに配置します。Apache Integrationの設定例については[公式ドキュメント](https://docs.newrelic.com/install/apache/#examples)をご確認ください。今回は画面上で生成されたデフォルト値を設定します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/1cc377c2-a1b8-cd09-d6c5-7b55a3f9ecbf.png" width="50%">

```yaml: /etc/newrelic-infra/integrations.d/apache-config.yml
integrations:
- name: nri-apache
  env:
    METRICS: "true"
    INVENTORY: "true"
    # status_url is used to identify the monitored entity to which the inventory will be attached.
    STATUS_URL: http://127.0.0.1/server-status?auto

    # binary_path is used to specify the path of the apache binary file (i.e. "C:\Apache\bin\httpd.exe").
    # By default the integration automatically discovers the binary on "/usr/sbin/httpd" or "/usr/sbin/apache2ctl". Use this setting for any other location.
    # BINARY_PATH: ""

    # Alternative Certificate Authority bundle directory and file
    # CA_BUNDLE_DIR: ""
    # CA_BUNDLE_FILE: ""
    # Set this to false if you want to avoid certificate validation
    # VALIDATE_CERTS: true

    # New users should leave this property as `true`, to identify the
    # monitored entities as `remote`. Setting this property to `false` (the
    # default value) is deprecated and will be removed soon, disallowing
    # entities that are identified as `local`.
    # Please check the documentation to get more information about local
    # versus remote entities:
    # https://github.com/newrelic/infra-integrations-sdk/blob/master/docs/entity-definition.md
    REMOTE_MONITORING: true
  interval: 15s
  labels:
    env: production
    role: load_balancer
  inventory_source: config/apache
```

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

<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/apache-config.yml | grep -wo "Integration health check finished with success"
Integration health check finished with success
```

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

オプションでApacheのログを転送する設定を行います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/2389f6ee-be26-bf4c-e671-8ac4ffcc714b.png" width="70%">

```yaml:/etc/newrelic-infra/logging.d/apache-log.yml 
# Log forwarder configuration for Apache logs.
# Apache installations can vary. Use the appropriate
# log file location for your environment / installation
#
# Once data is being collected, logs can be seen at:
#   1) https://one.newrelic.com > Explorer or Infrastructure > Hosts > (select an entity) > Logs
#   2) https://one.newrelic.com/launcher/logger.log-launcher
logs:
  - name: apache_access
    file: /var/log/httpd/access_log
    # file: /var/log/apache/access.log
    # file: /var/log/apache2/access.log
    # file: /etc/httpd/log/access_log
    attributes:
      logtype: apache

  - name: apache_error
    file: /var/log/httpd/error_log
    # file: /var/log/apache/error.log
    # file: /var/log/apache2/error.log
    # file: /etc/httpd/log/error_log
    attributes:
      logtype: apache_error
```

「Test connection」を選択して、データがNew Relicに届いていることを確認します。これでセットアップ完了です！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/3ce11ccb-6f15-f127-95c7-63e604bcfd30.png" width="70%">

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/bb52911e-d69c-98b6-2814-8a019e5d2e3b.png" width="70%">

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/af7396dc-82df-cb9a-5f23-c25ef91ecfdd.png" width="90%">

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

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