にゃみかんてっくろぐ

猫か百合を見守る壁になりたい

www.p2pquake.net のサービスをぜんぶ Docker でコンテナ化した(計 35 コンテナ)

※個人開発の備忘録です。

Debian 9 (stretch) が EOL を迎えたので、ちょうど良い機会だと思って色々と手を加えた。

  • Debian 11 (bullseye) に
  • すべてを Docker でコンテナ化
  • 監視ツールを Munin + Xymon から Prometheus + Grafana に
  • Vultr から Linode

すべてを Docker でコンテナ化

www.p2pquake.net は VPS 上で動いていて、小さなサービスの組み合わせで P2P 地震情報が成り立っている。

P2P 地震情報のサービス構成図

が、「まぁ動いてるからヨシ!」状態で、以下のようなサービスもある。

  • インスタンス再起動後に手で起動している
  • ずっと安定稼働して、セットアップ方法がわからなくなっている

サービスの起動し忘れで不具合が起きたりもしていた。

そこで、その辺の問題を解消すべく、重い腰を上げてすべてコンテナ化した。

Dockerfile が 500 行ちょっと、 compose.yml が 800 行ちょっと。ちゃんと (?) Docker Compose V2 を使っている。

~/production (master) $ find epsp-server-apps/ epsp-web-services/ -name Dockerfile | xargs -I{} wc -l {} | cut -d" " -f1 | awk '{s += $1} END {print s}'
530
~/production (master) $ find epsp-server-apps/ epsp-web-services/ -name compose.yml | xargs -I{} wc -l {} | cut -d" " -f1 | awk '{s += $1} END {print s}'
807

ただの MongoDB や Blue/Green デプロイ用に多重起動しているものもあるけれど、計 35 コンテナが動作している。

NAMES                                         STATUS
external-fluent_push-1                        Up 4 hours
external-fluent_twitter-1                     Up 4 hours
external-api-1                                Up 4 hours
server-areapeer-deliver-1                     Up 23 hours
epsp-web-services-eew-gateway-1               Up 23 hours
epsp-web-services-mobile_bridge-1             Up 23 hours
epsp-web-services-client-1                    Up 23 hours
server-client-1                               Up 23 hours
server-server-1                               Up 23 hours
jma_collector-broadcaster-1                   Up 24 hours
jma_collector-client-1                        Up 24 hours
epsp-web-services-https-portal-1              Up 2 days
epsp-web-services-static-1                    Up 2 days
epsp-web-services-realtime-api-green-1        Up 2 days
epsp-web-services-realtime-api-blue-1         Up 2 days
epsp-web-services-web-api-green_www-1         Up 2 days
epsp-web-services-web-api-blue_www-1          Up 2 days
epsp-web-services-web-api-v2-green-1          Up 2 days
epsp-web-services-web-api-v2-blue-1           Up 2 days
epsp-web-services-web-api-blue_backend-1      Up 2 days
epsp-web-services-web-api-green_backend-1     Up 2 days
server-metrics-1                              Up 2 days
jma_collector-dmdata_connector-1              Up 2 days
jma_collector-register-1                      Up 2 days
jma_collector-jma_watcher-1                   Up 2 days
epsp-web-services-traefik-1                   Up 2 days
epsp-web-services-prometheus_exporter-1       Up 2 days
userquake_aggregator-userquake-aggregator-1   Up 2 days
replicator-replicator-1                       Up 2 days
logger-logger-1                               Up 29 hours
logger-register-1                             Up 2 days
instance-exporter-cadvisor-1                  Up 2 days (healthy)
instance-exporter-node-exporter-1             Up 2 days
mongodb-mongodb_exporter-1                    Up 2 days
mongodb-mongodb-1                             Up 2 days

監視ツールを Prometheus + Grafana に

これまで Munin と Xymon を組み合わせてやってきたが、さすがに厳しい気がして Prometheus + Grafana に移行した。

Munin: MongoDB のメトリクス

Grafana: MongoDB のメトリクス

Munin は有志の手によって様々な plugin が作られてメトリクスが収集できていたけれど、 Prometheus も同じように様々な exporter でメトリクスが収集できた。

Traefik は標準で Prometheus サポートが入っているし、比較的モダンなソフトウェアとモダンな監視ツールの相性はやはり良いのかなという印象(個人の感想です)。

Linode

さくらの VPS から Vultr を経て、 Linode の Dedicated CPU インスタンスに移行した。 CPU 専有。

というのも、 CPU リソースを割と消費していて、「これ高負荷を理由に止められてもおかしくないのでは…」という心配が常にあったからである。

CPU 専有ならその心配はない(はず)。

RAM 4 GB, 2 vCPU で月 30 ドル。 Shared CPU だと月 20 ドルで、月 10 ドルの上乗せで済んでいるなら良いかなという気持ち。

Grafana: CPU 使用率は 40% 弱

Amazon Lightsail も考えたが、この CPU 使用率だと月 80 ドルのインスタンスタイプが必要になるため断念した。


そんなこんなで色々とモダンになり、省力化ができましたとさ。めでたしめでたし。