Raspberry Pi 4B での dockprom の実行

現在(2021/02/08) dockprom v3.27.0 が公開されていますが、流石に更新が頻繁なのでここに記載していくのは省略することにします。

2021/01/16 dockprom v3.24.1のリリースに合わせて修正。
– cAdvisor: v0.38.7
– grafana: v7.3.7
2021/01/12 dockprom v3.24.0のリリースに合わせて修正。
– Prometheus: 2.24.0
2020/12/19 dockprom v3.23.2 のリリースに合わせて修正。
– grafana: v7.3.6
– prom/pushgateway: v1.3.1
2020/12/14 dockprom v3.23.1 のリリースに合わせて修正。
– cAdvisor: v0.38.6
– grafana: v7.3.5

プロセスの運用・監視のためのツールとしては Prometheus と Grafana を組み合わせたものが有名です。ところが、Prometheus と Grafana 共に、非常に高機能であり思い通りに設定するのはなかなか大変な作業になります。

ここで、dockprom として公開されているリポジトリを使用することで、Prometheus と Grafana を組み合わせた監視を簡単に実行することができます。

ところが、Raspberry Pi 4B で、そのまま実行することはできませんので修正する内容などをまとめてみたいと思います。

  1. dockprom をクローン

まず github から dockprom をクローンします。現在の最新版は v3.23.0 ですから、チェックアアウトしておきます。

$ git clone https://github.com/stefanprodan/dockprom.git
$ cd dockprom
$ git checkout v3.23.1

dockprom では、以下の 7つの docker コンテナーを使用しています。

$ gerp image: docker-compose.yml
image: prom/prometheus:v2.24.0
image: prom/alertmanager:v0.21.0
image: prom/node-exporter:v1.0.1
image: gcr.io/cadvisor/cadvisor:v0.38.7
image: grafana/grafana:7.3.7
image: prom/pushgateway:v1.3.1
image: stefanprodan/caddy

このうち、gcr.io/cadvisor/cadvisor:v0.38.7 と stefanprodan/caddy の 2つが、そのままでは Raspberry Pi 4B で動かせないので以下で対応していきます。

2. cadvisor の作成

cadvisor については、ZCube/cadvisor-docker として arm64 対応が公開されています。ただし、現在のバージョンが v0.36.0 になっているため dockprom に合わせて v0.38.7 をビルドします。

具体的には、以下の手順となります。ただし、ZCube/cadvisor のビルドでは docker の experimental な機能である Docker Buildx を使ってマルチプラットフォーム対応のビルドを実行しています。そこで、ここでは通常の docker build を使って arm64 用にビルドします。また cadvisor のバージョンについては、dockprom で使われている v0.38.7 を指定しています。

$ git clone https://github.com/ZCube/cadvisor-docker.git
$ cd cadvisor-docker
$ docker build --build-arg CADVISOR_VERSION=v0.38.7 -t cadvisor:v0.38.7 .

3. caddy の作成

dockprom では、caddy のコンテナーイメージが stefanprodan/caddy となっているように stefanprodan 自身がビルドしたものを使っています。そこで、これも github からクローンして arm64 対応のコンテナーをビルドします。

最初に、github.com から stefanprodan/caddy-builder をクローンします。

$ git clone https://github.com/stefanprodan/caddy-builder.git

caddy-builder では、caddy をクローンしてからビルドしていますが arm64 用のバイナリが公開されていますので、そちらを使うように Dockerfile を修正してからビルドします。さらに、ベースイメージの alpine もバージョンを新しいものに変更しましょう。

修正後の Dockerfile は、以下のようになります。

# Build image
FROM golang:1.15.6-alpine as builder

ARG CADDY_VERSION="0.10.10"

RUN wget https://github.com/caddyserver/caddy/releases/download/v${CADDY_VERSION}/caddy_v${CADDY_VERSION}_linux_arm64.tar.gz \
&& tar zxvf caddy_v${CADDY_VERSION}_linux_arm64.tar.gz \
&& mv caddy /go/bin

# Dist image
FROM alpine:3.12.2

# install deps
RUN apk add --no-cache --no-progress curl tini ca-certificates

# copy caddy binary
COPY --from=builder /go/bin/caddy /usr/bin/caddy

# list plugins
RUN /usr/bin/caddy -plugins

# static files volume
VOLUME ["/www"]
WORKDIR /www

COPY Caddyfile /etc/caddy/Caddyfile
COPY index.md /www/index.md

ENTRYPOINT ["/sbin/tini", "--"]
CMD ["caddy", "-agree", "--conf", "/etc/caddy/Caddyfile"]

この Dockerfile を使って、caddy のコンテナーを作成します。

$ docker build -t caddy .

4. dockprom の実行

準備ができましたので、いよいよ dockprom を実行します。先ほど、cadvisor と caddy のコンテナーを作成しましたので、これに合わせて docker-compose.yml ファイルを修正します。修正内容は cadvisor と caddy の image名をビルドしたイメージ名に合わせておきます。

$ docker-compose up -d

docker-compose コマンドで起動すると、最初に 5つの docker コンテナーを pull してから実行しています。

2度目以降は、以下のように起動しています。

$ docker-compose up -d
Creating network "dockprom_monitor-net" with driver "bridge"
Creating volume "dockprom_prometheus_data" with default driver
Creating volume "dockprom_grafana_data" with default driver
Creating nodeexporter ... done
Creating cadvisor ... done
Creating alertmanager ... done
Creating pushgateway ... done
Creating grafana ... done
Creating prometheus ... done
Creating caddy ... done

5. ブラウザからの監視

正常に起動したら、ブラウザから http://localhost:3000 として Grafana の画面を表示します。

dockprom Login
dockprom のログイン画面

最初に、ユーザー名:admin、パスワード:admin でログインします。これは、docker-ompose.yml ファイルで Grafana の環境変数 GF_SECURITY_ADMIN_USER、GF_SECURITY__ADMIN_PASSWORD として与えている値ですから、必要に応じて修正することができます。

ログインすると、新しいパスワードを設定する画面になりますので、実際に使用するパスワードを設定しておきます。確認用と合わせて 2回パスワードを入力したら、Submit ボタンをクリックして次に進みます。

dockprom home
dockprom ホーム画面
dockprom dashboard
dockprom ダッシュボード選択画面

Home をクリックすると、ダッシュボードの選択画面になります。ここで、画面を切り替えることができますので、Docker Containers をクリックしてみます。

dockprom docker containers
dockprom Dockerコンテナーの情報表示

6. dockprom の終了

dockprom は、docker-compose で起動していますので、docker-compose を使って終了します。この際、Docker Volume を使用しているので ”-v” オプションをつけてボリュームも削除しておきます。

$ docker-compose down -v
Stopping alertmanager … done
Stopping caddy … done
Stopping grafana … done
Stopping nodeexporter … done
Stopping cadvisor … done
Stopping prometheus … done
Stopping pushgateway … done
Removing alertmanager … done
Removing caddy … done
Removing grafana … done
Removing nodeexporter … done
Removing cadvisor … done
Removing prometheus … done
Removing pushgateway … done
Removing network dockprom_monitor-net
Removing volume dockprom_prometheus_data
Removing volume dockprom_grafana_data

7. まとめ

以上のように dockprom を使うことで、Prometheus で収集した情報を Grafana で綺麗に表示することができました。Prometheus も Grafana も非常に高機能で、色々とカスタマイズしていくことができますので実際に必要となる内容に合わせて修正していくことが可能です。

この記事をシェアする
目次
閉じる