※個人開発の備忘録です。
Debian 9 (stretch) が EOL を迎えたので、ちょうど良い機会だと思って色々と手を加えた。
- Debian 11 (bullseye) に
- すべてを Docker でコンテナ化
- 監視ツールを Munin + Xymon から Prometheus + Grafana に
- Vultr から Linode へ
すべてを Docker でコンテナ化
www.p2pquake.net は VPS 上で動いていて、小さなサービスの組み合わせで P2P 地震情報が成り立っている。
が、「まぁ動いてるからヨシ!」状態で、以下のようなサービスもある。
- インスタンス再起動後に手で起動している
- ずっと安定稼働して、セットアップ方法がわからなくなっている
サービスの起動し忘れで不具合が起きたりもしていた。
【障害(復旧済) 地震情報・津波予報】 5/3 23:10〜5/4 13:05 の間、地震情報・津波予報が配信されない状態となっておりました。
— たくや@P2P地震情報 (@p2pquake_takuya) 2022年5月4日
プッシュ通知を除き、 5/4 12:50〜13:05 にかけて順次配信いたしました。ご迷惑をお掛けいたしました。
そこで、その辺の問題を解消すべく、重い腰を上げてすべてコンテナ化した。
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 は有志の手によって様々な plugin が作られてメトリクスが収集できていたけれど、 Prometheus も同じように様々な exporter でメトリクスが収集できた。
Traefik は標準で Prometheus サポートが入っているし、比較的モダンなソフトウェアとモダンな監視ツールの相性はやはり良いのかなという印象(個人の感想です)。
Linode
さくらの VPS から Vultr を経て、 Linode の Dedicated CPU インスタンスに移行した。 CPU 専有。
というのも、 CPU リソースを割と消費していて、「これ高負荷を理由に止められてもおかしくないのでは…」という心配が常にあったからである。
大抵のVPS、利用規約に「高負荷時は止めるぞ」という記述があり、実際某VPSで止められたことがある。AWSのT*インスタンス・LightsailのCPUクレジットの概念のほうがよっぽど親切に感じてくる
— たいぷらいた〜 (@no_clock) 2020年5月30日
CPU 専有ならその心配はない(はず)。
RAM 4 GB, 2 vCPU で月 30 ドル。 Shared CPU だと月 20 ドルで、月 10 ドルの上乗せで済んでいるなら良いかなという気持ち。
Amazon Lightsail も考えたが、この CPU 使用率だと月 80 ドルのインスタンスタイプが必要になるため断念した。
そんなこんなで色々とモダンになり、省力化ができましたとさ。めでたしめでたし。