mackerel-agentをコンテナ内で動かす

created at
updated at

Mackerel

Fedora CoreOSのようなディストリを使っていると、ホストのメトリクスもコンテナで動かしているmackerel-agentで取得したくなる
一応適当に動かすだけである程度のメトリクスは取れるんだけれども、ちゃんとホスト情報を取得させたいなら一工夫をすると良い

以下はPodmanQuadletを使う時の例

systemd
[Unit]
Description=mackerel-agent is an agent program to post your hosts' metrics to mackerel.io.

[Container]
ContainerName=mackerel-agent
Environment=HOST_ETC=/rootfs/etc
EnvironmentFile=/etc/mackerel-agent.env
HostName=%H
Image=docker.io/mackerel/mackerel-agent:0.81.0
Network=host
PodmanArgs=--ipc host
PodmanArgs=--pid host
Volume=/:/rootfs:ro
Volume=/dev/disk:/dev/disk:ro
Volume=/sys:/sys:ro
Volume=mackerel-agent:/var/lib/mackerel-agent

[Install]
WantedBy=multi-user.target default.target

ミソはHOST_ETC=/rootfs/etcという環境変数で、mackerel-agentはホスト情報を取得するのに https://github.com/shirou/gopsutil を使っていて、特定の環境変数を設定する事で別なパスを見せる事ができる

ホストの/をコンテナ内の/rootfsにマウントしつつHOST_ETC=/rootfs/etcを指定することで、mackerel-agentがホスト情報を取得する時にコンテナ側ではなくホスト側と取ってくれるというワケ

あとはIPCやらPIDやらネットワークやら/dev/diskやらをホスト側のを見せるようにすればホスト側に直接入れるのと遜色なくなる