💻

apmとnginxインテグレーションをamazon linux 2023×arm(graviton3)環境で動かす

2024/02/09に公開

前提

こちらの続きです。
https://zenn.dev/n06u1886/articles/6c373709de3c2e

apmとnginxインテグレーションはtar archiveを使用することで導入できました。

導入作業

apm(php)

https://docs.newrelic.com/docs/apm/agents/php-agent/installation/php-agent-installation-tar-file/

  1. ログイン > サイドバー > AddData > ApplicationMonitoring > 対象言語 > On a host (tar archive)を選択する
    • ※パッケージマネージャーやAnsibleGalaxyを使用するとインストールに失敗します
  2. アプリ名など必要な項目を入力し、自動生成されるコマンドを実行する
下記実行コマンド例
curl -s -O https://download.newrelic.com/php_agent/release/newrelic-php5-10.15.0.4-linux.tar.gz

gzip -dc newrelic-php5-10.15.0.4-linux.tar.gz | tar xf -

cd newrelic-php5-10.15.0.4-linux

sudo NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=true NR_INSTALL_KEY=${your_licence_key} ./newrelic-install install

# installして作成されたnewrelic.iniファイルの修正
sudo find /etc /opt/etc /usr/local/etc -type f -name newrelic.ini -exec sed -i -e "s/REPLACE_WITH_REAL_KEY/${your_licence_key}/" -e "s/newrelic.appname[[:space:]]=[[:space:]].*/newrelic.appname = \"${your_app_name}\"/" {} \; 2>/dev/null

sudo service php-fpm restart

少し待つとAPMとBrowserMonitoringでデータが連携されていることを確認できました

nginxインテグレーション

https://docs.newrelic.com/jp/docs/infrastructure/host-integrations/installation/install-infrastructure-host-integrations/

1. tarballリポジトリからnginx/arm環境のリソースを探す
https://download.newrelic.com/infrastructure_agent/binaries/linux/arm64/

  1. インストールする
    • ※こちらはnewrelicのGUI上でtar archiveから取得するコマンドができません
実行コマンド例
# ※作業時点のarm環境で使用可能な最新バージョンを指定しています
curl -s -O https://download.newrelic.com/infrastructure_agent/binaries/linux/arm64/nri-nginx_linux_3.4.1_arm64.tar.gz

gzip -dc nri-nginx_linux_3.4.1_arm64.tar.gz | tar xf -
  1. 解凍したフォルダ内の./var/db/newrelic-infra/newrelic-integrations/bin/nri-nginx/var/db/newrelic-infra/newrelic-integrations/bin/nri-nginxに移動する
実行コマンド例
# ※ルートディレクトリで作業している場合は対応不要です
mv ./var/db/newrelic-infra/newrelic-integrations/bin/nri-nginx /var/db/newrelic-infra/newrelic-integrations/bin/nri-nginx
  1. newrelicの設定ファイルを作成/編集
/etc/newrelic-infra/integrations.d/nginx-config.yml
integrations:
- name: nri-nginx
  env:
    METRICS: "true"
    STATUS_URL: http://127.0.0.1/status
    STATUS_MODULE: discover
    REMOTE_MONITORING: true
  interval: 30s
  labels:
    env: your_app_env

- name: nri-nginx
  env:
    INVENTORY: "true"
    CONFIG_PATH: /etc/nginx/nginx.conf
    REMOTE_MONITORING: true
    STATUS_URL: http://127.0.0.1/status
  interval: 60s
  labels:
    env: your_app_env
  inventory_source: config/nginx
/var/db/newrelic-infra/newrelic-integrations/nginx-definition.yml
name: com.newrelic.nginx
description: Reports status and metrics for NGINX server
protocol_version: 3
os: linux

commands:
    metrics:
        command:
          - ./bin/nri-nginx
          - -metrics
        interval: 30

    inventory:
        command:
          - ./bin/nri-nginx
          - -inventory
        prefix: config/nginx
        interval: 60
  1. nginxのstatus確認用のエンドポイントを用意
/etc/nginx/nginx.conf
location /status {
    access_log off;
    allow 127.0.0.1;
    deny all;
    stub_status on; #ここが有効になっているとステータスが取得できる
}
  1. newrelic-infraエージェントを再起動
sudo sytemctl restart newrelic-infra

サイドバー > AllEntities > On Host > NGINX serversにアクセスし、server:インスタンスID:ポート番号で表示されていることが確認できれば導入完了です。

最後に

なんとか動くことは確認できました。
AnsibleでIaC化するのが大変なのでGalaxyだけで対応できる日が待ち遠しい!!

Discussion