nabeo がピーしているブログ (仮)

どーも、nabeop です

コードの書き納めと書き初めで mackerel plugin を作った

2018年から2019年の年末年始は 1/4(金) を有給にして、12/29 から 1/6 までガッツリと休みを確保したので、チマチマとコードを書いていた。

Linuxproc/net 以下に出ている情報をなんとかして、mackerel で表示できたら便利だよなーと思っていたんだけど、ちょうど時間がガッツリとれたので、年末年始の書き納めと書き初めという体で以下の3つのプラグインを作ってみた。

github.com github.com github.com

mackerel-plugin-proc-net-ip_vs_stats_percpu

2018 年のコードの書き納めとして作りました。

/proc/net/ip_vs_stats_percpu を情報源に CPU コアごとに処理したパケットの統計情報が取れる。LVS-HOWTO の 33. LVS: Monitoring では /proc/net/ip_vs_stats でいい感じな情報が取れる、ということだったけど、僕が確認した kernel 3.6 系だと real server ごとの統計情報が表示されていなかった。そのかわり /proc/net/ip_vs_stats_percpu では CPU コアごとに処理したパケット数とバイト数が取れるようだったので、こっちを使うことにした。 /proc/net/ip_vs_stats_percpulinux/ip_vs_ctl.c at master · torvalds/linux · GitHub を見る限り、意図した情報が取れそうな気配です。

mackerel-plugin-proc-net-ip_vs_stats_percpu では引数に -cpus で CPU コア数を明示できるようにしていますが、内部で runtime.NumCPU() で CPU コア数を取得するようにもしています。なんでこんなことをしているか、というと仮想化されたホストで LVS を使っていると /proc/net/ip_vs_stats_percpu で表示される CPU コアが実際のコア数よりも多くなっているケースがあるからです。runtime.NumCPU() に任せれば良えやんという話もあるかもしれませんが、なんとなくオプションで渡してあげると便利かも、と思ってつけました。

mackerel-plugin-proc-net-arp

2019 年のコードの書き初めとして作りました。

/proc/net/arp を情報源にホストの ARP テーブルのサイズが取れます。本当は Flags ごとの統計も取れたら便利かなーと思ったんですけど、とりあえずテーブルサイズだけでも取っておけば、ARP テーブル溢れとかに気付けるかと思って、最小限の機能だけにしました。

mackerel-plugin-proc-net-ip_vs

mackerel-plugin-proc-net-ip_vs_stats_percpu を作っているときに LVS-HOWTO や linux/net/netfilter/ipvs at master · torvalds/linux · GitHub を眺めていて、 ipvsadm -nL 相当の情報を /proc/net/ip_vs から取得できそうだったので作りました。

ipvsadm -nL の出力を情報源にする、というアプローチもあると思いますが、個人的には ipvsadm という cli ツールに頼らずに procfs から情報が取れるなら、procfs を利用したほうが依存関係がスッキリしていいんじゃないかと思っています。

というわけで

今年も健やかにコードが書けることを祈念して、書き初めをしてました。今年も良い年でありますように。