faultlineでNode.jsのエラートラッキングをしてみる

OSSのエラートラッキングツールfaultlineでNode.jsのエラートラッキングをしてみたので覚書です。 インストール $ git clone https://github.com/faultline/faultl […]

広告ここから
広告ここまで

目次

    OSSのエラートラッキングツールfaultlineでNode.jsのエラートラッキングをしてみたので覚書です。

    インストール

    $ git clone https://github.com/faultline/faultline.git
    $ cd faultline
    $ npm install
    

    config.ymlの設定

    バケットの設定などを行います。
    config.default.ymlの内容を元に書き換えていきましょう。

    config.default.yml

    # faultline service name
    serviceName: faultline
    # AWS deploy region
    region: ap-northeast-1
    # S3 bucket name
    s3BucketName: (EDITME)
    # Dynamodb table prefix
    dynamodbTablePrefix: faultline
    # Dynamodb Read Capacity Units
    dynamodbReadCapacityUnits: 1
    # Dynamodb Write Capacity Units
    dynamodbWriteCapacityUnits: 1
    # Error tracking count interval (year / month / day / hour / minute)
    timeunit: minute
    # faultline API Key for full control (!This is not API Gateway API Key!)
    masterApiKey: (EDITME)
    # faultline API Key for POST errors only (!This is not API Gateway API Key!)
    clientApiKey: (EDITME)
    # faultline error data Retention (days / -1 is unlimited)
    errorDataRetentionInDays: -1
    # faultline functions CloudWatchLogs Retention (days / -1 is unlimited)
    logRetentionInDays: 180
    # Use AWS KMS Key to encrypt POST params (notifications) ( 0 or 1 )
    useKms: 0
    # AWS KMS Key alias
    kmsKeyAlias: faultline
    

    config.yml example

    個人的にメモしておきたいところ

    • faultline API Keyは任意のランダムな文字列を入れます。
    • errorDataRetentionInDaysunlimitedになっているので、必要に応じて変更する
    • s3バケット / DynamoDBテーブルはCloudFormationが作ってくれるので、自分で作る必要はありません
    # faultline service name
    serviceName: faultline
    # AWS deploy region
    region: ap-northeast-1
    # S3 bucket name
    s3BucketName: faultline-test
    # Dynamodb table prefix
    dynamodbTablePrefix: faultline-test
    # Dynamodb Read Capacity Units
    dynamodbReadCapacityUnits: 1
    # Dynamodb Write Capacity Units
    dynamodbWriteCapacityUnits: 1
    # Error tracking count interval (year / month / day / hour / minute)
    timeunit: minute
    # faultline API Key for full control (!This is not API Gateway API Key!)
    masterApiKey: 0mTk4gTwbYgW
    # faultline API Key for POST errors only (!This is not API Gateway API Key!)
    clientApiKey: s4V63ZhO092a
    # faultline error data Retention (days / -1 is unlimited)
    errorDataRetentionInDays: -1
    # faultline functions CloudWatchLogs Retention (days / -1 is unlimited)
    logRetentionInDays: 180
    # Use AWS KMS Key to encrypt POST params (notifications) ( 0 or 1 )
    useKms: 1
    # AWS KMS Key alias
    kmsKeyAlias: faultline
    

    デプロイ

    デプロイはServerless FWを利用して行われます。
    最後に生成結果が出ますので、APIのURLだけ控えておきましょう。

    $ AWS_PROFILE=XXxxXXX npm run deploy
    ...
    CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - faultline-v0
    Serverless: Stack update finished...
    Service Information
    service: faultline
    stage: v0
    region: ap-northeast-1
    stack: faultline-v0
    api keys:
      None
    endpoints:
      GET - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects
      DELETE - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects/{project}
      POST - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects/{project}/errors
      GET - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects/{project}/errors
      GET - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects/{project}/errors/{message}
      PATCH - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects/{project}/errors/{message}
      DELETE - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects/{project}/errors/{message}
      GET - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects/{project}/errors/{message}/occurrences
      GET - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/projects/{project}/errors/{message}/occurrences/{reversedUnixtime}
      POST - https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0/encrypt
    functions:
      projectsList: faultline-v0-projectsList
      projectsDelete: faultline-v0-projectsDelete
      errorsPost: faultline-v0-errorsPost
      errorsList: faultline-v0-errorsList
      errorsGet: faultline-v0-errorsGet
      errorsPatch: faultline-v0-errorsPatch
      errorsDelete: faultline-v0-errorsDelete
      occurrencesList: faultline-v0-occurrencesList
      occurrencesGet: faultline-v0-occurrencesGet
      callNotifications: faultline-v0-callNotifications
      deleteExpiredErrors: faultline-v0-deleteExpiredErrors
      encrypt: faultline-v0-encrypt
    
    Stack Outputs
    ErrorsGetLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-errorsGet:1
    EncryptLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-encrypt:1
    ErrorsDeleteLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-errorsDelete:1
    OccurrencesListLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-occurrencesList:1
    ErrorsPatchLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-errorsPatch:1
    OccurrencesGetLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-occurrencesGet:1
    DeleteExpiredErrorsLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-deleteExpiredErrors:1
    ServerlessDeploymentBucketName: faultline-v0-serverlessdeploymentbucket-1spgr5g27e44a
    ProjectsDeleteLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-projectsDelete:1
    ProjectsListLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-projectsList:1
    ErrorsListLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-errorsList:1
    ErrorsPostLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-errorsPost:1
    CallNotificationsLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:999999999999:function:faultline-v0-callNotifications:1
    ServiceEndpoint: https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0
    

    これでトラッキングするための基盤の準備ができました。

    サンプルデータを送信する。

    トラッキングするものがないとなので、サンプルコードを作ってみます。

    まずはディレクトリを作成します。

    $ cd ../
    $ mkdir faultline-example
    $ cd faultline-example
    

    faultline-jsでデータを送信できるので、インストールしましょう。

    $ npm init -y
    $ npm install --save faultline-js
    

    以下のようなexample.jsを作成します。

    var faultlineJs = require('faultline-js');
    var faultline = new faultlineJs({
                      project: 'faultline-js',
                      apiKey: 's4V63ZhO092a', // your clientApiKey
                      endpoint: 'https://XXXXXX.execute-api.ap-northeast-1.amazonaws.com/v0',
                      notifications: []
                    });
    faultline.notify('example');
    console.log('notification sent');
    

    実行してnotification sentが出ればOKです。

    $ node example.js 
    notification sent
    

    GUIを作成する

    最後にトラッキングデータを確認する画面を作ります。

    ソースコードをDLします。

    $ cd ../
    $ git clone [email protected]:faultline/faultline-webui.git
    $ cd faultline-webui
    $ npm install
    

    config.example.jsを参考にconfig.jsを作ります。

    var config = {
        endpoint: 'https://XXXXX.execute-api.ap-northeast-1.amazonaws.com/v0', // faultline endpoint here
        masterApiKey: '0mTk4gTwbYgW' // faultline API Key, here
    };
    

    あとはindex.htmlをひらけばOKです。

    $ open index.html
    

    下の画像のように、送信されたデータがトラッキングされるようになりました。

    そのほか

    Node.jsではなくブラウザ上のJSやPHPなどのエラートラッキングにも使えるので、「トラッキングツールを使ってみたいけど予算が・・・」というかたはとりあえずこれから初めてみるといいかなと思います。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark