Retty Tech Blog

実名口コミグルメサービスRettyのエンジニアによるTech Blogです。プロダクト開発にまつわるナレッジをアウトプットして、世の中がHappyになっていくようなコンテンツを発信します。

RettyアプリチームがSLI確認のために使っているtech-report-generatorの紹介

RettyアプリエンジニアはAndroid / iOSアプリの開発だけでなく、アプリが使うAPIも開発しています。そのAPIサーバーのon call対応もアプリエンジニアが行っています。on call対応もしているのでアプリチームとして監視しているSLI(Service Level Indicator)も確認しています。 今回はRettyアプリチームが確認しているSLI、主要KPIの値を簡単に取得するためのツール、tech-report-generatorを紹介します。

github.com

主な機能

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"
}

コンパイルREADMEにある手順の通りです。

$ GO111MODULE=on go install github.com/li-go/tech-report-generator

goで書かれているのでコンパイル済みバイナリとconfigを渡せば誰でも実行できます。

使われているライブラリ

viper

viperの機能としてはコマンドライン引数読み取り、環境変数読み取り、多様なフォーマットのコンフィグファイルの読み書き等があります。 tech-report-generatorではjsonファイルに記されたコンフィグファイルの読み取りのためにviperを使っています。

chromedp

chromedpChrome 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

  1. configから得たログイン情報をchromedpに渡してログインボタンを押し、
  2. Fabric上でAndroidやiOSのCrash free rateが書かれているエリアから情報をスクレイピングしています。

gorm

gormmysql 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を使ってこの面倒な作業を簡単に実現しています。