2019-02-05(火) [長年日記]
■ fluentdのDockerイメージにプラグインを雑に追加する
IDCFクラウドからCloud Garageに引っ越したものの*1、新居には付加サービスがほぼないから、ログ管理や監視は自分でやらねばならぬ。必然的にFluentdやmackerelの世話になる。いずれもDockerイメージが公開されているので、導入は楽だ。
で、運用がうまく回ってくると欲が出てきて「fluentdでサービスメトリックを投稿する」みたいなこともやりたくなってくる。でもfluentdのイメージには必要なプラグインが入ってない。fluentd側にはちゃんと改造して使う方法も書かれているんだけど、わざわざDockerfileを書くのも面倒くさい。というか「コードを書かないとプラグインが導入できない」ってなんか納得できなくない?
というわけで、docker commitを使って楽に追加することにした:
# docker run --name build --rm -d fluent/fluentd:v1.3-debian-1 # docker exec -u root build fluent-gem install fluent-plugin-mackerel fluent-plugin-datacounter # docker commit build tdtds/fluentd-mackerel # docker kill build
標準イメージでコンテナを立ち上げて、そこにプラグインをインストールしてからcommitで自前イメージに書き出す。ポイントは「-u root」で、fluentdイメージ内部のデフォルトユーザ「fluent」にはgemをインストールする権限がないからだ。
できた自前イメージにちゃんとプラグインがインストールされていることを確認する:
# docker run --rm tdtds/fluentd-mackerel:latest ls /var/lib/gems/2.3.0/gems ... fluent-plugin-datacounter-1.0.0 fluent-plugin-mackerel-1.1.0 fluentd-1.3.3 ...
しめしめ。こうやって雑に扱えるようになってくると、dockerも「自分のツールになった」って感じがしてくるね。なお肝心のメトリック投稿は、fluentd力が足りなくてまだできていないのであった。fluentd、けっこう難しい……。
*1 ちゃんと1月末日に解約したw