faultline-jsを使ってJavaScriptのエラートラッキングにfaultlineを利用する

  • 3
    Like
  • 0
    Comment

faultlineとは

オープンソースのエラートラッキングツールです。

faultline-js

JavaScriptのエラートラッキングにfaultlineを利用するときには、faultline-js が利用できます。

インストール

Webpack等を利用している場合はnpmでインストールしてください

$ npm install faultline-js --save

レガシーな感じで設置する場合は dest/client.min.jsdest/client.min.map を設置してください。

<script src="path/to/faultline-js/dist/client.min.js"></script>

使い方

<head> などで以下のようなコードを読みこめばOKです。

var faultline = new faultlineJs.Client({
                  project: 'faultline-js', 
                  apiKey: 'xxxxXXXXXxXxXXxxXXXXXXXxxxxXXXXXX', // clientApiKeyを設定してください
                  endpoint: 'https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v0',
                  notifications: [
                    {
                      type: 'slack',
                      endpoint: 'https://hooks.slack.com/services/XXXXXXXXXX/B2RAD9423/WC2uTs3MyGldZvieAtAA7gQq',
                      channel: '#random',
                      username: 'faultline-notify',
                      notifyInterval: 10,
                      threshold: 1,
                      timezone: 'Asia/Tokyo'
                    }
                  ]
                });

Webpackなどを利用しているのであれば

var faultlineJs = require('faultline-js');
var faultline = new faultlineJs({
                  project: 'faultline-js', 
                  apiKey: 'xxxxXXXXXxXxXXxxXXXXXXXxxxxXXXXXX', // clientApiKeyを設定してください
                  endpoint: 'https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v0',
                  notifications: [
                    {
                      type: 'slack',
                      endpoint: 'https://hooks.slack.com/services/XXXXXXXXXX/B2RAD9423/WC2uTs3MyGldZvieAtAA7gQq',
                      channel: '#random',
                      username: 'faultline-notify',
                      notifyInterval: 10,
                      threshold: 1,
                      timezone: 'Asia/Tokyo'
                    }
                  ]
                });

などでもOKです。

notifications の設定を暗号化する

GitHub Issueの連携にはGitHubのAPI Tokenが必要です。

SlackのIncoming WebhookのURLならまだしも、GitHubのAPI Tokenが外部に漏れるのはかなりマズいです。

そのため faultline v0.7.0 からKMSによる暗号/復号化機構を搭載しました。
(config.yml で useKms を true にすることで利用可能です)

暗号化

faultlineをデプロイしたAWSのprofileで、 aws-cliの aws kms encrypt でnotificationsの設定を暗号化します。

例えば、先ほどのSlackの設定を暗号化するには

$ AWS_PROFILE=XXxxXXX aws kms encrypt --key-id alias/faultline --plaintext '{"type":"slack","endpoint":"https://hooks.slack.com/services/XXXXXXXXXX/B2RAD9423/WC2uTs3MyGldZvieAtAA7gQq","channel":"#random","username":"faultline-notify","notifyInterval":10,"threshold":1}' --query CiphertextBlob --output text --region ap-northeast-1

で暗号化できます。

また、faultline v0.8.0 からAPIに /encrypt を提供していますので、AWSのprofileを共有せずにfautlineの apiKey のみ ( clientApiKey ではありません ) での暗号化も可能です。

基本的にAPIを利用するほうが簡単で良いでしょう。

$ curl -X POST -H "x-api-key:0123456789012345678901234567890" -H "Content-Type: application/json" https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v0/encrypt -d '{"type":"slack","endpoint":"https://hooks.slack.com/services/XXXXXXXXXX/B2RAD9423/WC2uTs3MyGldZvieAtAA7gQq","channel":"#random","username":"faultline-notify","notifyInterval":10,"threshold":1}'
{
  "status": "success",
  "encrypted": "VJrcSNSvM/KxZ3IIa/+aaEZMfYQgKrGqmGwzgAAASYwggEiBgkqhkiG9w0BBwagggETMIIBDwIBADCCAQCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMkrC8qGdnuIcfRlX9AgEQgIHaanVWXANlr/QkgYFIpSRy5QLmJohU4ltwGKwOFA/uRZfKw3kAMCuH7H/QJJyVA0mxzqMnQT/WUf6nG2AckhPQ4fTmgQgpXzw7jF4ToUvXL49a"
}

取得した暗号化されたテキストをnotificationsに追加するだけで、通常通り利用できます。

var faultline = new faultlineJs.Client({
                  project: 'faultline-js', 
                  apiKey: 'xxxxXXXXXxXxXXxxXXXXXXXxxxxXXXXXX', // clientApiKeyを設定してください
                  endpoint: 'https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v0',
                  notifications: [
                    'VJrcSNSvM/KxZ3IIa/+aaEZMfYQgKrGqmGwzgAAASYwggEiBgkqhkiG9w0BBwagggETMIIBDwIBADCCAQCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMkrC8qGdnuIcfRlX9AgEQgIHaanVWXANlr/QkgYFIpSRy5QLmJohU4ltwGKwOFA/uRZfKw3kAMCuH7H/QJJyVA0mxzqMnQT/WUf6nG2AckhPQ4fTmgQgpXzw7jF4ToUvXL49a'
                  ]
                });

簡単ですね!

結果

ss.png

というわけでJavaScriptでも安全にfaultlineが使えますよ!