CircleCI_Serverの利用状況を可視化した話 / CircleCI Server Visualization of usage status

E598c2f9a8e5c94eea0e6505b4233d81?s=47 dehio3
August 23, 2019

CircleCI_Serverの利用状況を可視化した話 / CircleCI Server Visualization of usage status

CircleCI ユーザーコミュニティミートアップ 【LT会】
https://circleci.connpass.com/event/140666/

E598c2f9a8e5c94eea0e6505b4233d81?s=128

dehio3

August 23, 2019
Tweet

Transcript

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

  2. 自己紹介
 Tanaka Tomohide
 • twitter: @dehio3
 • blog:https://www.dehio3.com/
 • 音響屋→インフラエンジニア


    • CircleCI運用歴:10ヶ月
 2
  3. はじめに 3

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

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

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

    6
  7. 可視化の背景 7

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

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

  10. こんなものを作った 10

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

  12. 構成 12

  13. lambda + S3 + Athena + Redash
 13

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

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

  16. APIの選択 / resent-builds
 API実行時から指定のビルド情報を取得
 
 
 
 
 
 16

    https://circleci.com/docs/api/#recent-builds-across-all-projects
  17. APIの選択 / limitパラメータ
 • マニュアルでは「Maixmum 100」とあるがオンプレ は制限なし?
 • limitを大きめの5000にして、取りこぼしのないよう にビルド情報を取得


    17
  18. ビルド日時の判断
 • ビルド情報を集計する時に日付の判断が必要
 • 「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
  19. JSONファイルの管理
 作成したJSONファイルはS3で管理
 19

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

  21. 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
  22. そのままテーブルを参照するとエラー
 日付の取得で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
  23. テーブル作成時は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
  24. 最終的なテーブル作成クエリ
 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
  25. ポイント
 • APIを利用し日次でビルド情報を収集
 • AthenaでJSONデータをテーブル化
 • Redashにてテーブルデータを可視化
 25

  26. string型をtimestamp型に変換
 “注意: データが ISO 8601 形式である場合は、操作を進める前に from_iso8601_timestamp() 関数を使用してデータを TIMESTAMP に変換してください。”


    https://aws.amazon.com/jp/premiumsupport/knowledge-center/query-table-athena- timestamp-empty/ 26
  27. 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
  28. Redash上でのクエリ
 28 https://github.com/kakakakakku/redash-hands-on

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

  30. こんなデータも可視化 30

  31. 日毎のOrganization別ビルド数
 31

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

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

  34. まとめ 34

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


  36. Thank you!! 36