Slide 1

Slide 1 text

CircleCI Serverの 利用状況を可視化した話 CircleCI ユーザーコミュニティミートアップ #6

Slide 2

Slide 2 text

自己紹介
 Tanaka Tomohide
 ● twitter: @dehio3
 ● blog:https://www.dehio3.com/
 ● 音響屋→インフラエンジニア
 ● CircleCI運用歴:10ヶ月
 2

Slide 3

Slide 3 text

はじめに 3

Slide 4

Slide 4 text

注意
 Workflow、OrbsなどCircle機能の話は
 一切出ません!!
 (そもそもオンプレはOrbs対応してない)
 4

Slide 5

Slide 5 text

CircleCI Serverの 利用状況を可視化した話

Slide 6

Slide 6 text

CircleCI Serverとは
 ● オンプレミス版のCircleCI
 ● AWS上で利用可能
 ● 構築用のTerraformが提供
 ○ https://github.com/circleci/enterprise-setup 6

Slide 7

Slide 7 text

可視化の背景 7

Slide 8

Slide 8 text

顧客からこんな依頼が
 「チーム毎での利用比率を取れない?」
 8

Slide 9

Slide 9 text

なぜ?
 ● ライセンス費は年払い
 ● ユーザー数分ライセンス費がかかる
 ● 利用してるチーム毎に予算を振り分けたい
 9

Slide 10

Slide 10 text

こんなものを作った 10

Slide 11

Slide 11 text

CircleCIコスト按分ダッシュボード
 11

Slide 12

Slide 12 text

構成 12

Slide 13

Slide 13 text

lambda + S3 + Athena + Redash
 13

Slide 14

Slide 14 text

ポイント
 ● APIを利用し日次でビルド情報を収集
 ● AthenaでJSONデータをテーブル化
 ● Redashにてテーブルデータを可視化
 14

Slide 15

Slide 15 text

ポイント
 ● APIを利用し日次でビルド情報を収集
 ● AthenaでJSONデータをテーブル化
 ● Redashにてテーブルデータを可視化
 15

Slide 16

Slide 16 text

APIの選択 / resent-builds
 API実行時から指定のビルド情報を取得
 
 
 
 
 
 16 https://circleci.com/docs/api/#recent-builds-across-all-projects

Slide 17

Slide 17 text

APIの選択 / limitパラメータ
 ● マニュアルでは「Maixmum 100」とあるがオンプレ は制限なし?
 ● limitを大きめの5000にして、取りこぼしのないよう にビルド情報を取得
 17

Slide 18

Slide 18 text

ビルド日時の判断
 ● ビルド情報を集計する時に日付の判断が必要
 ● 「queued_at」からビルドの実施日を判断
 ● 実施日毎でJSONファイルを作成
 "queued_at" : "2013-02-12T21:33:30Z" // time build was queued
 "start_time" : "2013-02-12T21:33:38Z", // time build started
 "stop_time" : "2013-02-12T21:34:01Z", // time build finished
 18

Slide 19

Slide 19 text

JSONファイルの管理
 作成したJSONファイルはS3で管理
 19

Slide 20

Slide 20 text

ポイント
 ● APIを利用し日次でビルド情報を収集
 ● AthenaでJSONデータをテーブル化
 ● Redashにてテーブルデータを可視化
 20

Slide 21

Slide 21 text

JSON用ライブラリでのテーブル作成
 CREATE EXTERNAL TABLE circleci_buids_data ( username string, // GitHubのorganization build_url string, status string, // ビルドのステータス queued_at timestamp, start_time timestamp, stop_time timestamp, build_time_millis int // ビルド走行時間 ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://<バケット名>/' 21

Slide 22

Slide 22 text

そのままテーブルを参照するとエラー
 日付の取得でERRORが発生する
 Error running query: HIVE_BAD_DATA: Error parsing field value '2019-04-11T14:45:00.417Z' for field 3: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff] 22

Slide 23

Slide 23 text

テーブル作成時はstring型
 ”Athena は、Java の TIMESTAMP 形式「YYYY-MM-DD HH:MM:SS.fffffffff」 (小数点以下 9 桁) を必要とします。
 データが必須の TIMESTAMP 形式でない場合は、列を STRING として定義し、次に Presto の日付と時刻の関数を使用してフィー ルドを DATE または TIMESTAMP としてクエリ内に読み取りま す。”
 https://aws.amazon.com/jp/premiumsupport/knowledge-center/query-table-athena- timestamp-empty/ 23

Slide 24

Slide 24 text

最終的なテーブル作成クエリ
 CREATE EXTERNAL TABLE circleci_buids_data ( username string, // GitHubのorganization build_url string, status string, // ビルドのステータス queued_at string, start_time string, stop_time string, build_time_millis int // ビルド走行時間 ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://<バケット名>/' 24

Slide 25

Slide 25 text

ポイント
 ● APIを利用し日次でビルド情報を収集
 ● AthenaでJSONデータをテーブル化
 ● Redashにてテーブルデータを可視化
 25

Slide 26

Slide 26 text

string型をtimestamp型に変換
 “注意: データが ISO 8601 形式である場合は、操作を進める前に from_iso8601_timestamp() 関数を使用してデータを TIMESTAMP に変換してください。”
 https://aws.amazon.com/jp/premiumsupport/knowledge-center/query-table-athena- timestamp-empty/ 26

Slide 27

Slide 27 text

string型をtimestamp型に変換
 from_iso8601_timestamp関数を使用して、参照時にtimestamp型に 変換
 
SELECT queued_at, typeof(queued_at) as "type", from_iso8601_timestamp(queued_at) as "queued_at timestamp", typeof(from_iso8601_timestamp(queued_at)) as "type" FROM circleci_buids_data; 27

Slide 28

Slide 28 text

Redash上でのクエリ
 28 https://github.com/kakakakakku/redash-hands-on

Slide 29

Slide 29 text

CircleCIコスト按分ダッシュボード
 29

Slide 30

Slide 30 text

こんなデータも可視化 30

Slide 31

Slide 31 text

日毎のOrganization別ビルド数
 31

Slide 32

Slide 32 text

曜日別、時間帯別ビルド数
 32

Slide 33

Slide 33 text

ビルドステータス推移(success以外)
 33

Slide 34

Slide 34 text

まとめ 34

Slide 35

Slide 35 text

まとめ
 35 ● APIを使って簡単にビルド情報が取れる
 ● AthenaとBIツールでJSONデータを簡単に可視化 できる
 ● ビルド状況の可視化する事で、チームの活動状 況を把握する事ができる


Slide 36

Slide 36 text

Thank you!! 36