Node.js エージェント

SixthSense Node 監視を使用し、コード内の正確なエラーを追跡します。 これによりアプリケーション環境の全体像が把握できるため問題の解決がより容易となります。

前提条件

  • エージェントのインストールに必要な前提条件については エージェントのインストールに必要な前提条件の確認 を参照してください。
  • SixthSense エージェント:Node パッケージ エージェントのダウンロード を参照してください。
  • SixthSense コレクターの URL/IP(SixthSense カスタマーサポートから提供されるテナント URL)
  • アクセストークン:トークンへのアクセスについては 「SixthSense ポータルを利用開始する」にある アクセス トークンの取得 を参照してください。
  • PACKAGE_TOKEN:カスタマーサポートから提供され るSixthSense パッケージのダウンロードに必要なアクセストークン

エージェントのダウンロード

  • SixthSense エージェントをプロジェクトの依存関係としてダウンロードします。 「@SixthSense/SixthSense-node-js": "^2.2.5」
  • エージェント構成はアプリケーションのエントリーポイントに追加されます。例えば、Node.js アプリケーションのエントリーポイントは package.json ファイルで定義され、以下の例では server.js ファイルがエントリーポイントとなります。以下は package.json ファイルです。
{
"name": "SixthSense-node-demo",
"version": "2.2.5",
"description": "RESTful API with Node Demo",
"main": "server.js",
"scripts":{
"test": "echo \"Error: no tests specified\"&& exit 1"
}
}
  • 依存関係のあるエージェントを追加します。
"dependencies": {
"@sixthsense/sixthsense-node-js": "^2.2.5"
}

エージェントを初期化し、名前を指定する

  • アプリケーションへのエントリーポイントは「server.js」です。ユーザーのアプリケーションによっては、エントリーポイントが異なる場合があります。そのため、以下に記載されているように、エントリーポイントファイルに楽天によるエージェント構成を追加してください。
  • serviceName 変数を使用してサービス名を指定します。
// Sixthsense Agent
var agent = require('@sixthsense/sixthsense-node-js').default
agent.start({
serviceName: 'NAME_OF_THE_SERVICE',
// The identifier of the instance
// Collector agent_gRPC/grpc service addresses.
directServers: 'grpc-collector-observability.sixthsense.rakuten.com:443',
collectorAddress: 'grpc-collector-observability.sixthsense.rakuten.com:443',
enableLogs: true,
caPath: true,
authorization: process.env.TOKEN
});

OneCloud Platform の場合は、以下のコマンドを使用します。

// Sixthsense Agent
var agent = require('@sixthsense/sixthsense-node-js').default
agent.start({
serviceName: 'NAME_OF_THE_SERVICE',
// The identifier of the instance
// Collector agent_gRPC/grpc service addresses.
// For connectivity to backend using onecloud private network: 100.99.116.221:80
// For connectivity to backend using intra public network: 133.237.176.44:80
directServers: '133.237.176.44:80',
collectorAddress: '133.237.176.44:80',
enableLogs: true,
agent.force_tls=${SW_AGENT_FORCE_TLS:false},
caPath: true,
authorization: process.env.TOKEN
});
  • SixthSense ポータルからアクセストークンを取得します。アクセストークンへのアクセスについては 「SixthSense ポータルを利用開始する」にある アクセス トークンの取得 を参照してください。
  • エントリーポイントファイルにアクセストークンを追加します。authorization: 'Access token'。

例として、上記のスニペットを参照してください。

アプリケーションの実行

  • npm install コマンドを実行する前に、以下のコマンドを実行します。

エージェントをダウンロードするには、Gitlab Package Registry からパッケージをダウンロードします。

npm config set @sixthsense:registry https://artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/
npm config set -- '//artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/:_authToken' "PACKAGE_TOKEN"
  • PACKAGE_TOKEN: SixthSense カスタマーサポートより提供
  • npm install コマンドを実行して、すべての依存関係をダウンロードします。
npm install @sixthsense/sixthsense-node-js
  • スタートコマンドを実行して、Node アプリケーションを起動します。

SixthSense バックエンドへのネットワーク制限がある場合は、プロキシを使用するか、ネットワークチームに SixthSense バックエンドアドレスのホワイトリスト化を依頼して、データの送信を許可します。

  1. システム/コンテナレベルでプロキシを設定します。

例: a. Windowsサーバー: システムレベルの環境変数に http_proxy、https_proxy を追加します。 b. Linux サーバー: ~/.bashrc ファイルに以下のようにプロキシを追加します。 export http_proxy=10.0.0.1:3128

  1. ノードレベルでプロキシを渡します。

npm config set proxy http://username:password@host:port npm config set https-proxy https://username:password@host:port

  1. npm のプロキシおよびその他の設定を行うには、コンソールで以下のコマンドを入力します。

npm config edit

このコマンドにより、.npmrc ファイルが開きます。このファイルに、npm に関連するプロキシ、https-proxy を設定します。

note

SW_IGNORE_SUFFIX、SW_TRACE_IGNORE_PATH、SW_HTTP_IGNORE_METHOD 等の様々な無視オプション、および SW_AGENT_MAX_BUFFER_SIZE を超過するため記録されなかったエンドポイントは、無視されたステータスのすべてを、それらを呼び出す可能性のある他のエンドポイントに対して伝達します。そのエンドポイントが Node Sixthsense エージェントを実行している場合、無視の設定に関わらず記録がされません(上流の親が記録されていないため)。これにより、関心のないエンドポイントのツリー全体を削除できるだけでなく、チェーンの一部が無視された場合でも、他のエンドポイントが実際の親ではなく ROOT の子として記録されている場合は、その部分的なトレースを削除することが可能です。

Node.js エージェントのログを有効にする

Node.js エージェントはデバッグフレームワークを出力ログに使用しており、現在、アプリケーションをデプロイする前にログを有効にすることができます。

ログレベルは以下のように設定できます。

  • info
  • debug
  • warn
  • error

ログローテーションを有効にする

デフォルトでは、ログローテーションは有効になっており、最大サイズは5MB、最大ファイル数は7日となっています。これを変更するには、env SS_AGENT_LOGGING_MAXFILES & SS_AGENT_LOGGING_MAXSIZE を設定します。

  • SS_AGENT_LOGGING_MAXSIZE

ローテーションの対象となるファイルの最大サイズ。これはバイト数、または kb、mb、gb の単位で指定できます。単位を使用する場合は、接尾語として「k」、「m」、または「g」を追加します。単位は数字の直後に指定する必要があります。

  • SS_AGENT_LOGGING_MAXFILES

保持するログの最大数。これはファイル数または日数で指定できます。日数で指定する場合は、接尾語として「d」を追加します。

Docker へのインストール

Docker におけるエージェント統合

Docker におけるエージェント統合については エージェントのダウンロードを参照してください。

Docker ファイルにおける依存関係のダウンロード設定の追加

Node SixthSense エージェントは、楽天のセルフホスト型プライベートパッケージマネージャでホストされています。パッケージをダウンロードするには、認証のために以下の手順を実行します。

  • NPM インストールコマンドの前に、以下のコードスニペットを Docker ファイルに追加します。
RUN npm config set @sixthsense:registry https://artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/
npm config set -- '//artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/:_authToken' "PACKAGE_TOKEN"
RUN npm install @sixthsense/sixthsense-node-js
  • このコードにより、SixthSense パッケージレジストリを識別するための構成が設定されます。またこれにより、package.json ファイルで同じ名前を定義した URL から依存関係をダウンロードすることも指示されます。
  • https://artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/ (SixthSenseパッケージマネージャの URL)。
  • _authToken' 「PACKAGE_TOKEN」:パッケージはプライベートパッケージマネージャでホストされているため、ユーザーを識別するための認証が必要です。この認証トークンは、オンボーディング中に定義されます。
  • 簡略化のため、認証トークンは Docker ファイルに配置されています。ただし、Docker ファイルに追加してバージョン管理リポジトリにプッシュしたくない場合は、環境変数を設定したり、Jenkins CI/CD からシークレットを渡したりするなど、認証管理に基づいてこの認証トークンを渡すことができます。
  • docker build でアプリケーションをビルドし、docker image/containerを実行します。エージェントがアプリケーションに統合され、SixthSense ダッシュボードでメトリクスが表示されるようになります。

ビルド引数として PACKAGE_TOKEN を渡します。

docker build --build-arg PACKAGE_TOKEN=${PACKAGE_TOKEN_VALUE} -t service:tag .

yarn の例

FROM yarnpkg/node-yarn
# Prepare app directory
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
COPY yarn.lock /usr/src/app/
ARG PACKAGE_TOKEN
RUN npm config set @sixthsense:registry https://artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/ && \
npm config set -- '//artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/:_authToken' "${PACKAGE_TOKEN}"
# RUN yarn add @sixthsense/sixthsense-node-js
RUN yarn install
COPY . /usr/src/app
# Start the app
CMD ["yarn", "start"]

NPM の例

FROM node:10-alpine
# Prepare app directory
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
COPY package-lock.json /usr/src/app/
ARG PACKAGE_TOKEN
RUN npm config set @sixthsense:registry https://artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/ && \
npm config set -- '//artifacts-observability.sixthsense.rakuten.com/api/v4/projects/3/packages/npm/:_authToken' "${PACKAGE_TOKEN}"
RUN npm i @sixthsense/sixthsense-node-js
RUN npm install
COPY . /usr/src/app
# Start the app
CMD ["/usr/local/bin/npm", "start"]

Node.js 対応ライブラリ

NodeJS ライブラリの自動インストゥルメンテーションをサポートする組み込みプラグインがいくつかあります。以下はそれらすべてを含むリストです。

ライブラリプラグイン名
1Expressexpress
2Axiosaxios
3MySQLmysql
4MySQLmysql2
5PostgreSQLpg
6pg-cursorpg-cursor
7MongoDBmongodb
8Mongoosemongoose
9RabbitMQamqplib
10redisioredis