Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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が使えますよ!

k1LoW
pepabo
「いるだけで成長できる環境」を標榜し、エンジニアが楽しく開発できるWebサービス企業を目指しています。
https://pepabo.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away