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

scope🌐
created at
toc
[]
histories
[...]

#Mackerel

Fedora CoreOSのようなディストリを使っていると、ホストのメトリクスもコンテナで動かしているmackerel-agentで取得したくなる

一応適当に動かすだけである程度のメトリクスは取れるんだけれども、ちゃんとホスト情報を取得させたいなら一工夫をすると良い

以下は#Podman#Quadletを使う時の例

[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やらをホスト側のを見せるようにすればホスト側に直接入れるのと遜色なくなる