GAミント至上主義

Web Monomaniacal Developer.

Google Container Engineで本番運用したらfluentd-cloud-loggingのメモリ消費量が一番多かった

f:id:uyamazak:20161219114207p:plain

なるべくサーバー代を抑えるために、速度重視のフレームワーク使ったり(Python3 + Falcon + Nginx)、メモリリークと戦ったり、メモリに溜め込まないように書いてるけど、勝手にログを集めてくれるGoogle仕様のfluentdが一番メモリを食っていた。

アプリケーション側からのログ出力は、問題発生時しか出ないようにしてるから、リクエストごとに書き込むようなことはしてない。数分、数十分に一回程度。

まあ、1ノードあたり130MBぐらいだからそこまでじゃない。でもフロントのWEBサーバは45MBぐらいで動くから、メモリだけ考えるとそれを2台以上動かせる感じ。



Yahooが先日公開したK2HFTFUSEの記事を読んでfluentdって遅いんだと思ってたから気になったのもある。
techblog.yahoo.co.jp

大規模なログなどの集約を行うケースなどでは、Kafka(+Storm)で構築されたシステムが用いられていることと思われますが、小規模であれば簡単にfluentdで構築されたシステムもあるかと思います。


無料枠でも十分なほど、設定不要で標準出力を集めて貯めて、WEB画面で見やすくしてくれるStackDriverは便利だけど、もっとリソース食わないのになるといいな。

DockerでERAlchemyを使ってPostgreSQLのER図を書き出す

現在のアプリのデータベースのER図を作る必要があったので、検索した所、ERAlchemyというのがあることを知った。

ちなみにPostgresqlを使ってる。

GitHub - Alexis-benoist/eralchemy: Entity Relation Diagrams generation tool


こういう一時的な用途で、自分のPCにいろいろパッケージ入れたりするのは避けたいので、Dockerを使う。

本当に1回だけの使い捨てならDockerfileも作らずにコマンド操作だけでいける。


ベースとしてpython2.7の公式イメージを使う。
Dockerが入っているホストマシンで実行してbashに入る

sudo docker run -it python:2.7 bash

まずはレポジトリのアップデート。
これをしないとインストールする時にいろいろエラー出た。

apt-get update

必要なものをインストール

apt-get install eralchemy graphviz psycopg2

PDFで出力

eralchemy -i 'postgresql+psycopg2://dbuser:db_password@db_host/db_name' -o hoge.pdf

eralchemyコマンドはこちらを参考にした
qiita.com


起動したままにして、ホストにもどってコピーする。
コンテナIDはdocker psで確認

sudo docker cp {コンテナID}:hoge.pdf ./

完了。

何度も使ったり調整する場合は、Dockerfileに書いて取っておいた方がいい。

いい感じのER図のPDFが、ホストマシンを汚すことなくすぐ作れた

gcloud dockerコマンドのWARNING: The '--' argument must be specified between gcloud specific args on the left and DOCKER_ARGS on the right

GoogleのContainer Repositoryにアップする際、エラーメッセージが出るようになって、しばらくそのまま使ってたけど直し方がわかった。

WARNING: The '--' argument must be specified between gcloud specific args on the left and DOCKER_ARGS on the right. IMPORTANT: previously, commands allowed the omission of the --, and unparsed arguments were treated as implementation args. This usage is being deprecated and will be removed in March 2017.
This will be strictly enforced in March 2017. Use 'gcloud beta docker' to see new behavior.

これを

sudo gcloud docker push {reponame}


こうする

sudo gcloud docker -- push {reponame}

コマンドの引数に--だけを渡すなんてことしたことなかったから、メッセージを読んでもどうしたらいいかわからなかった。