[elk] dockerhubイメージのpull数をELKでトラッキングする


背景

dockerhubへイメージをリリースする場合、dockerhubサイトからのようにpullの数が確認できる

ラボの環境でプロジェクトの色々メトリックを管理するの中、このpull数も可視化したい。この数はdockerhubのAPIで取れる。また、すでにプロジェクトのメトリックはELKのダッシュボードで管理されるため、この数もそこにいれたい。ここで、その方法をまとめる。

環境

  • ホスト CentOS 7 (jq packageをインストール済み)
  • ELKスタック 7.0 (サーバ 10.128.64.200)

index作成

以下のスクリプトで、ELKにおいてdockerhub-trackというindexを作成する

$ curl -XPUT "http://10.128.64.200:9200/dockerhub-track" -H 'Content-Type: application/json' -d'
{
    "settings": {
        "number_of_shards": 3,
        "number_of_replicas" : 2
    },
    "mappings": {
      "dockerhub": {
        "properties": {
           "download": { "type" : "integer" },
           "created": { "type": "date"}
        }
      }
    }
}'

UPDATE: ELS 7.x から上のスキーマは使えなくなった。

次に、kibanaのindex mamangementにて、新しいパターンを作成し、createdtime filter field にする。

データ更新

ELKのindexへデータを更新するスクリプトを作成する。例えば、/home/user/script/update.sh

update.sh
#!/bin/sh

# 
PROXY=""
DOCKER_URL="https://hub.docker.com/v2/repositories/username/project/"
PULL=$(curl -s -x $PROXY $DOCKER_URL | jq .pull_count)
DATE=$(date -u +"%Y-%m-%dT%H:%M:%S")
echo $PULL
echo $DATE

# DATE is in UTC
curl -s -XPOST $DOCKER_URL -H 'Content-Type: application/json' -d "{\"download\": $PULL,\"created\":\"$DATE\"}"

DOCKER_URLusernameprojectに合わせ、変更する。dockerhubのprojectに関した情報は以下のapiで取れる。

https://hub.docker.com/v2/repositories/username/project/

また、ラボの環境にproxyが必要ならば、PROXYをそのurlを置き換える必要ある。例えば、

PROXY="http://10.128.3.103:8080"

このスクリプトをcronに1時間ごと実行するように仕掛ける。例えば、このように

0 * * * *         /home/user/script/update.sh > /dev/null 2>&1

これで、準備が完了である。残りは、kibanaで従来通り、dockerhub-trackのmetric visualをついかすれば、dockerhubのpullの数をトラッキングできる。

まとめ

dockerhubのAPIを用い、pull数をELKでカウンター表示する方法を説明した。このようにプロジェクトの色々情報をELKで可視化できる。