faultlineとは
オープンソースのエラートラッキングツールです。
faultline-js
JavaScriptのエラートラッキングにfaultlineを利用するときには、faultline-js が利用できます。
インストール
Webpack等を利用している場合はnpmでインストールしてください
$ npm install faultline-js --save
レガシーな感じで設置する場合は dest/client.min.js
と dest/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'
]
});
簡単ですね!
結果
というわけでJavaScriptでも安全にfaultlineが使えますよ!