RettyアプリエンジニアはAndroid / iOSアプリの開発だけでなく、アプリが使うAPIも開発しています。そのAPIサーバーのon call対応もアプリエンジニアが行っています。on call対応もしているのでアプリチームとして監視しているSLI(Service Level Indicator)も確認しています。 今回はRettyアプリチームが確認しているSLI、主要KPIの値を簡単に取得するためのツール、tech-report-generatorを紹介します。
主な機能
tech-report-generatorには以下のような機能があります。
- FabricからAndroidアプリとiOSアプリのCrash free rateを取得
- New Relicからアプリがアクセスしている特定エンドポイントのLatencyを取得
- New Relicからerror rateを取得
- Pagerdutyから過去一週間分のアラート回数を取得
- データベース上にあるKPI値を取得
- 他チームがまとめているスプレッドシートからKPI値を取得
- 以上の値をstdoutに出力
使い方
外部サービスログイン情報等をtech-report-generatorに同梱されているconfig sampleを真似て書いて実行するだけで上記を結果が得られます。
{ "dataSourceName": "user:password@/dbname?charset=utf8&parseTime=True&loc=Local", "countQuery": "SELECT COUNT(*) FROM table WHERE created_at BETWEEN '%DATE_PLACEHOLDER%' -INTERVAL 7 DAY AND '%DATE_PLACEHOLDER%'", "googleServiceAccountCredentials": "base64 string of google service account", "spreadsheetID": "spreadsheet id", "spreadsheetTabName": "spreadsheet tab name", "fabricAccount": "user:password", "fabricOrganization": "string", "iosAppScheme": "string", "androidAppScheme": "string", "newrelicAccount": "user:password", "newrelicTransactionID": "transaction id", "pagerdutyAccount": "user:password", "pagerdutyOrganization": "string" }
$ GO111MODULE=on go install github.com/li-go/tech-report-generator
goで書かれているのでコンパイル済みバイナリとconfigを渡せば誰でも実行できます。
使われているライブラリ
viper
viperの機能としてはコマンドライン引数読み取り、環境変数読み取り、多様なフォーマットのコンフィグファイルの読み書き等があります。 tech-report-generatorではjsonファイルに記されたコンフィグファイルの読み取りのためにviperを使っています。
chromedp
chromedpは Chrome DevTools Protocolをgoで使ってchromeを制御するためのライブラリです。 tech-report-generatorではchromedpを使ってFabric, New Relic, PagerDuty上のデータをスクレイピングしています。 豊富なサンプルがあるので、実装時に参考にできます。
chromedpでFabricからクラッシュフリーレートを取得する例
https://github.com/li-go/tech-report-generator/blob/master/main.go#L83
- configから得たログイン情報をchromedpに渡してログインボタンを押し、
- Fabric上でAndroidやiOSのCrash free rateが書かれているエリアから情報をスクレイピングしています。
gorm
gormはmysql clientです。データベースに保存されている値の取得のために使用します。
スプレッドシートへのアクセス
x/oauth2/google で認証し、google.golang.org/api/sheets/v4 でスプレッドシートから情報を取得しています。
https://github.com/li-go/tech-report-generator/blob/master/reports/weekly_uu.go
まとめ
Webサービス、データベース、スプレッドシートと複数箇所に散らばっているデータソースにアクセスして情報をまとめるのは地味に面倒ですが、tech-report-generatorではgoのchromedp, gorm, sheetsを使ってこの面倒な作業を簡単に実現しています。