Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

dehio3
August 23, 2019

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

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

dehio3

August 23, 2019
Tweet

More Decks by dehio3

Other Decks in Technology

Transcript

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

    View full-size slide

  2. 自己紹介

    Tanaka Tomohide

    ● twitter: @dehio3

    ● blog:https://www.dehio3.com/

    ● 音響屋→インフラエンジニア

    ● CircleCI運用歴:10ヶ月

    2

    View full-size slide

  3. はじめに
    3

    View full-size slide

  4. 注意

    Workflow、OrbsなどCircle機能の話は

    一切出ません!!

    (そもそもオンプレはOrbs対応してない)

    4

    View full-size slide

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

    View full-size slide

  6. CircleCI Serverとは

    ● オンプレミス版のCircleCI

    ● AWS上で利用可能

    ● 構築用のTerraformが提供

    ○ https://github.com/circleci/enterprise-setup
    6

    View full-size slide

  7. 可視化の背景
    7

    View full-size slide

  8. 顧客からこんな依頼が

    「チーム毎での利用比率を取れない?」

    8

    View full-size slide

  9. なぜ?

    ● ライセンス費は年払い

    ● ユーザー数分ライセンス費がかかる

    ● 利用してるチーム毎に予算を振り分けたい

    9

    View full-size slide

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

    View full-size slide

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

    11

    View full-size slide

  12. lambda + S3 + Athena + Redash

    13

    View full-size slide

  13. ポイント

    ● APIを利用し日次でビルド情報を収集

    ● AthenaでJSONデータをテーブル化

    ● Redashにてテーブルデータを可視化

    14

    View full-size slide

  14. ポイント

    ● APIを利用し日次でビルド情報を収集

    ● AthenaでJSONデータをテーブル化

    ● Redashにてテーブルデータを可視化

    15

    View full-size slide

  15. APIの選択 / resent-builds

    API実行時から指定のビルド情報を取得






    16
    https://circleci.com/docs/api/#recent-builds-across-all-projects

    View full-size slide

  16. APIの選択 / limitパラメータ

    ● マニュアルでは「Maixmum 100」とあるがオンプレ
    は制限なし?

    ● limitを大きめの5000にして、取りこぼしのないよう
    にビルド情報を取得

    17

    View full-size slide

  17. ビルド日時の判断

    ● ビルド情報を集計する時に日付の判断が必要

    ● 「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

    View full-size slide

  18. JSONファイルの管理

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

    19

    View full-size slide

  19. ポイント

    ● APIを利用し日次でビルド情報を収集

    ● AthenaでJSONデータをテーブル化

    ● Redashにてテーブルデータを可視化

    20

    View full-size slide

  20. 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

    View full-size slide

  21. そのままテーブルを参照するとエラー

    日付の取得で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

    View full-size slide

  22. テーブル作成時は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

    View full-size slide

  23. 最終的なテーブル作成クエリ

    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

    View full-size slide

  24. ポイント

    ● APIを利用し日次でビルド情報を収集

    ● AthenaでJSONデータをテーブル化

    ● Redashにてテーブルデータを可視化

    25

    View full-size slide

  25. string型をtimestamp型に変換

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

    https://aws.amazon.com/jp/premiumsupport/knowledge-center/query-table-athena-
    timestamp-empty/
    26

    View full-size slide

  26. 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

    View full-size slide

  27. Redash上でのクエリ

    28
    https://github.com/kakakakakku/redash-hands-on

    View full-size slide

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

    29

    View full-size slide

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

    View full-size slide

  30. 日毎のOrganization別ビルド数

    31

    View full-size slide

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

    32

    View full-size slide

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

    33

    View full-size slide

  33. まとめ

    35
    ● APIを使って簡単にビルド情報が取れる

    ● AthenaとBIツールでJSONデータを簡単に可視化
    できる

    ● ビルド状況の可視化する事で、チームの活動状
    況を把握する事ができる


    View full-size slide

  34. Thank you!!
    36

    View full-size slide