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 Slide

  2. 自己紹介

    Tanaka Tomohide

    ● twitter: @dehio3

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

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

    ● CircleCI運用歴:10ヶ月

    2

    View Slide

  3. はじめに
    3

    View Slide

  4. 注意

    Workflow、OrbsなどCircle機能の話は

    一切出ません!!

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

    4

    View Slide

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

    View Slide

  6. CircleCI Serverとは

    ● オンプレミス版のCircleCI

    ● AWS上で利用可能

    ● 構築用のTerraformが提供

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

    View Slide

  7. 可視化の背景
    7

    View Slide

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

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

    8

    View Slide

  9. なぜ?

    ● ライセンス費は年払い

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

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

    9

    View Slide

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

    View Slide

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

    11

    View Slide

  12. 構成
    12

    View Slide

  13. lambda + S3 + Athena + Redash

    13

    View Slide

  14. ポイント

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

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

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

    14

    View Slide

  15. ポイント

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

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

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

    15

    View Slide

  16. APIの選択 / resent-builds

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






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

    View Slide

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

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

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

    17

    View Slide

  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

    View Slide

  19. JSONファイルの管理

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

    19

    View Slide

  20. ポイント

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

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

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

    20

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  25. ポイント

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

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

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

    25

    View Slide

  26. string型をtimestamp型に変換

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

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

    View Slide

  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

    View Slide

  28. Redash上でのクエリ

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

    View Slide

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

    29

    View Slide

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

    View Slide

  31. 日毎のOrganization別ビルド数

    31

    View Slide

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

    32

    View Slide

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

    33

    View Slide

  34. まとめ
    34

    View Slide

  35. まとめ

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

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

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


    View Slide

  36. Thank you!!
    36

    View Slide