これらもGoで書かれており、RPM/debパッケージも提供しています。 識者を募集しています
パッケージング周りのコードとかは、各リポジトリの packaging/
以下にあります。(本来は分けたほうが良さそう)
古いOSのサポートを停止し、後方互換を気にしなくて良くなったお陰で、様々な問題が解消可能に
/usr/bin
に配置すべき/usr/local/bin
に配置してしまっていた→ 新パッケージでは /usr/bin
のみに配置することで解決
→ 新パッケージでは x86_64 ビルドのみ提供
→ SHA256にしました(astj++)
→ Unitファイルちゃんと書いた(astj++)
本題
→一個一個は数MBでも数多くなると容量が大変なことに
こうなってる
mackerel-plugin*
mackerel-plugin-accesslog@ -> mackerel-plugin
mackerel-plugin-apache2@ -> mackerel-plugin
mackerel-plugin-aws-cloudfront@ -> mackerel-plugin
mackerel-plugin-aws-dynamodb@ -> mackerel-plugin
mackerel-plugin-aws-ec2-cpucredit@ -> mackerel-plugin
mackerel-plugin-aws-ec2-ebs@ -> mackerel-plugin
mackerel-plugin-aws-elasticache@ -> mackerel-plugin
mackerel-plugin-aws-elasticsearch@ -> mackerel-plugin
mackerel-plugin-aws-elb@ -> mackerel-plugin
mackerel-plugin-aws-kinesis-streams@ -> mackerel-plugin
mackerel-plugin-aws-lambda@ -> mackerel-plugin
mackerel-plugin-aws-rds@ -> mackerel-plugin
mackerel-plugin-aws-ses@ -> mackerel-plugin
mackerel-plugin-conntrack@ -> mackerel-plugin
mackerel-plugin-docker@ -> mackerel-plugin
mackerel-plugin-elasticsearch@ -> mackerel-plugin
mackerel-plugin-fluentd@ -> mackerel-plugin
mackerel-plugin-gostats@ -> mackerel-plugin
...
BusyBox は、Coreutilsなど標準UNIXコマンドで重要な多数のプログラムを単一の実行ファイルに「詰め込んで」提供する、特殊な方式のプログラムである(その詰め込み方法を指して呼ぶこともある)。
Nagiosのcheck_tcpとかもそうなってる。(check_smtpなどはcheck_tcpへのシンボリックリンクになっている)
go build
で単体バイナリをビルドできる状態は保ちたいmackerel-plugin-uptime/
└── uptime.go
mackerel-plugin-uptime/
├── lib/
│ └── uptime.go
└── main.go
Do()
関数を呼び出すだけhttps://github.com/mackerelio/mackerel-agent-plugins/blob/master/mackerel-plugin.go
//go:generate sh -c "perl tool/gen_mackerel_plugin.pl > mackerel-plugin_gen.go"
func run(args []string) int {
var plug string
f, _ := exec.LookPath(args[0])
fi, _ := os.Lstat(f)
base := filepath.Base(f)
// ここで処理を分岐している
if fi.Mode()&os.ModeSymlink == os.ModeSymlink && strings.HasPrefix(base, "mackerel-plugin-") {
// if mackerel-plugin is symbolic linked from mackerel-plugin-memcached, run the memcached plugin
plug = strings.TrimPrefix(base, "mackerel-plugin-")
...
type Log struct {
VirtualHost string `ltsv:"vhost"`
Host string
User string
Time time.Time `ltsv:"-"`
TimeStr string `ltsv:"time"`
Request string `ltsv:"req"`
...