トップ 最新

ただのにっき

2019-02-05(火) [長年日記]

fluentdのDockerイメージにプラグインを雑に追加する

IDCFクラウドからCloud Garageに引っ越したものの*1、新居には付加サービスがほぼないから、ログ管理や監視は自分でやらねばならぬ。必然的にFluentdmackerelの世話になる。いずれも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