3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Node.js APMエージェントをどうしても試してみたいので、Node-Redにエージェント導入を試みる

Last updated at Posted at 2023-08-30

このアップデートの詳細はこちら
New Relic アップデート

はじめに

Node.jsが大好きだ。だけど、ガリガリとNode.jsを使ってアプリケーションを開発できるほどのスキルは持っていないので、いままでNode.jsにAPMエージェントを導入して遊んでみることができなかった。(がんばれ自分!!)

もしかしたら、Node.jsやっているエンジニアにとっては知っていて当たり前のことなのかもしれないけど、Node-Redというの様なNode.jsベースのソリューションがあることを知人に教えてもらいました。(感謝感謝)

Node.jsやJavaScriptに詳しくなくても、さまざまなロジックをUIベースで作れるようなので、ここにNode.js APMエージェントを導入して、いろいろなロジックを組み込んで遊んでみることにした。

やってみる

早速、開始・・・といきたいが、遊ぶための環境は以下のものが必要だったので、情報の整理。

必要なもの

  • Docker Desktop
  • New Relicプラットフォーム
    • もしまだ持っていない人はこちらから永久無料アカウントの取得をお願いします。

ステップ(準備)

  1. 任意のフォルダを作成し、ターミナルでそのフォルダに移動する

  2. Dockerhubのnodered/node-redイメージを取得し、任意名でコンテナの起動を行う(以下の例は、コンテナ名を mynodered として起動しています)

    docker run -it -p 1880:1880 -v .:/data --name mynodered nodered/node-red
    
  3. コンテナ起動後、Webブラウザを起動し、http://localhost:1880にアクセスする(localhostのタイポに気をつけて!!)
    補足: 以下の画面が表示されれば成功です。このUIからさまざまなロジックを作成することができますワクワク

  4. 新しいターミナルを起動し、以下のコマンドを実行し、コンテナ内で作業を行う(以下の例では、コンテナ名を mynodered としています。作成したコンテナ名に置き換えて試して下さい。)

    docker exec -it mynodered /bin/bash
    
  5. 一旦、新たに起動したターミナルから離れて、New Relicプラットフォームにアクセスし、Add Dataボタンをクリックする

  6. さまざまなデータタイプのタイルが表示されるので、Node.jsのタイルをクリックする

  7. 導入方法の選択肢が表示されるので On a host を選択し、npmを用いて導入を行う
    以下の手順に従い、進めます

    1. Give your application a name: New Relicプラットフォーム上で表示される名前を指定する
      補足: ここで指定した名前は後続で利用しますが、設定上意味はありません

    2. 先ほど2番目に起動したターミナル上で以下のコマンドを実行する

      npm install newrelic --save
      
    3. 続いて以下のコマンドをコピーし、手元のテキストファイルに貼り付ける
      補足: コマンド内の<上記のGive your application a nameで指定した名前>や<ライセンスキー>は、自動で補完されているので、そのまま利用します

      NEW_RELIC_APP_NAME=<上記のGive your application a nameで指定した名前> NEW_RELIC_LICENSE_KEY=<ライセンスキー> node -r newrelic YOUR_MAIN_FILENAME.js
      
    4. 以下のコマンドを実施する(Node-Redのルートディレクトリにnewrelic.jsをコピーする)

      cp /usr/src/node-red/node_modules/newrelic/newrelic.js /usr/src/node-red
      

      重要: newrelic.jsファイルは、Node.js APMエージェントの設定ファイルです。今回の利用以外にもさまざまな目的で編集するファイルとなります。

    5. コンテナ内の/usr/src/node-red/newrelic.jsを編集する
      コマンド例: vi newrelic.js

      • newrelic.js内のapp_nameの値を<上記のGive your application a nameで指定した名前>に変更する
        変更例: app_name: ['qiita_nodered'],
      • newrelic.js内のlicense_keyの値を<ライセンスキー>に変更する
        変更例: license_key: '1234567890...abcdefg...'
    6. 変更後、ファイルを保存する

  8. Node-Redの起動スクリプト/usr/src/node-red/entrypoint.shを編集し、Node-Redが起動する際に、Node.js APMエージェントを含めるようにする
    コマンド例: vi entrypoint.sh
    補足: 変更箇所は、nodeコマンドに-r newrelicが追加されている部分のみになります

    #!/bin/bash
    
    trap stop SIGINT SIGTERM
    
    function stop() {
            kill $CHILD_PID
            wait $CHILD_PID
    }
    
    -/usr/local/bin/node $NODE_OPTIONS node_modules/node-red/red.js --userDir /data $FLOWS "${@}" &
    +/usr/local/bin/node $NODE_OPTIONS -r newrelic node_modules/node-red/red.js --userDir /data $FLOWS "${@}" &
    
    CHILD_PID="$!"
    
    wait "${CHILD_PID}"
    
  9. entrypoint.shファイルを更新後、Node-Redコンテナを再起動する(以下の例では、コンテナ名を mynodered としています。作成したコンテナ名に置き換えて試して下さい。)

    docker restart mynodered
    
  10. New Relicプラットフォームに戻り、APM & Servicesメニューを選択した際に、設定したアプリケーションの名前が一覧に表示されます(以下に表示しているスクリーンショットは、さらにその収集データの詳細を確認している画面です)

まとめ

上記の数ステップで、無事にNode.js APMエージェントの導入が完了できました。もっと早くNode-Redの存在に気づていていれば、遊び倒していたのにという複雑な気持ちです。
(気持ちをサクッと切り替えて)今後は、外部のアプリケーションへの連携DB連携などAPMならではの構成を試してみようと思います。どの様な情報を得られるかを試して、Qiitaにアップできればと思いますので、続報をお待ちくださいませ!!

最後にお仕事っぽく

New Relicを使い倒すための情報をこれからもどんどん発信していければと思います。また、New Relicを触ったことはないけれど、いろいろ触ってみたい興味をお持ちの方は、是非こちらから永久無料アカウントを作成して下さい。

永久無料アカウントの詳細はこちらです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?