Mackerelの公開リポジトリ全部見る 2024年スペシャル

こんにちは、Mackerel CREの id:kmuto です。本記事はMackerel Advent Calendar 2024 5日目の記事です。

昨日の記事はMackerelプロダクトマネージャー id:RyuGoo さんの「PdM 目線で見た Mackerel の面白さ」でした。

さて、「過去9年のAdvent Calendarエントリーから、『今あらためて読みたい』記事をピックアップ紹介!」でも少し触れましたが、MackerelはGitHubのMackerel (mackerelio) OrganizationおよびMackerel Labs (mackerelio-labs) Organizationでオープンソースソフトウェア(OSS)を公開しています。

本記事ではそれぞれのリポジトリを示しながら、どのようなものか紹介していきます。

Mackerel(mackerelio)内

mackerelio Organizationの下には、Mackerelが公式にサポート対象としているソフトウェアのリポジトリが置かれています。

ただし、サポートレベルについてはMackerelチームで基準を設けており、特にプラグインについてはmackerel-agent-pluginsやmackerel-check-plugins(go-check-plugins)から利用頻度が低く分離されたものや、そもそも収録していなかったものについての扱いは低くなっています(アナウンス)。

手元で表示してみたところ、public & 非archivedなものだけで「49 repositories」と出ています。すでに後悔の念に駆られていますが、がんばって紹介していきましょう。

ansible-mackerel-agent

構成管理ツールのAnsibleでmackerel-agentおよびメトリックプラグイン・チェックプラグインをインストールするためのロールを提供します。

コンテナがモダンとは言われるものの、VMなサーバーを立てて同じ設定を反映していくというのは今後も十分に需要はあるでしょう。

check-aws-cloudwatch-logs-insights

Amazon CloudWatch Logsのログに対してのパターンマッチでアラートを出すチェックプラグインです。これはご利用されているユーザーさまも多いですね。

過去のcheck-aws-cloudwatch-logsプラグインではタイムアウトを起こしてしまうような、流量の多いロググループのログ監視にも対応すべく開発したとのことでした。

mackerel.io

checkers

チェックプラグインのヘルパーライブラリです。

チェック結果を差し替えるStatusMapという機能(たとえばunknownをokにするといった指定ができる)が昨年追加されて、たとえばcheck-tcpプラグインのstatus-asオプションなどで利用されています。

cookbook-mackerel-agent

構成管理ツールのChef向けに、mackerel-agentのインストール・設定レシピを提供します。

create-release-action

mackerelio Organizationのリリースフローに使っているGitHub Actionです。一応ほかの場所から使っても困らないようにはしているつもりです。

docker-mackerel-agent

mackerel-agentの公開Dockerイメージの構成です。

2015年6月のmackerel-agent 0.27.1から作り続けており歴史がありますが、コンテナの監視としてはmackerel-container-agentをご利用いただくほうがよいでしょう。

docker-mackerel-rpm-build

mackerel-agentなどのrpmパッケージを生成するためのDocker設定を格納しています。

ブランチでビルドOSを分けていて、今の最新はRed Hat Universal Base Image 9を使うu9です。

documents

MackerelのヘルプドキュメントおよびAPIドキュメント(日本語・英語)を公開リポジトリとしています。Mackerelチーム内レビュー等が完了した後の最終成果物を同期反映しているだけなので経緯等の面白みには欠けるかもしれませんが、掘ってみると意外な機能の発見があるかも……!?

fluent-plugin-mackerel

fluentdを使ってMackerelにサービスメトリックやカスタムメトリックを投稿するメトリックプラグインです。

詳細な利用ドキュメントも用意しています。

mackerel.io

fluent-plugin-webhook-mackerel

MackerelからのイベントWebhookをfluentdの入力とするfluentd向けプラグインです。Rubyのgemファイルでリリースしていますが、先月に動作しないというご連絡を受けて更新しました。

こちらも詳細ドキュメントを用意しています。

mackerel.io

go-check-plugins

名前からは想像がつきにくいのですが、皆さんがよく使われているであろうチェックプラグイン集、mackerel-check-pluginsパッケージの開発リポジトリです。

一番新しいのはcheck-dns、一番古いのはcheck-httpでした!

go-mackerel-plugin

メトリックプラグインのヘルパーライブラリです。

グラフ定義などのややこしいところをカバーしてくれて、メトリックプラグインを書くときに便利でしょう。

go-mackerel-plugin-helper

こちらもメトリックプラグインのヘルパーライブラリですが、歴史的に残しているもので、現在はgo-mackerel-pluginを使うことを推奨しています。archive化してもいいのかもしれないですね。

go-osstat

OSからシステム情報を取得するライブラリです。

CPU負荷やメモリなど、mackerel-agentのシステムメトリックの源泉となっています。

golib

mackerel-agentなどに向けて、ロガーの機構やプラグイン情報保持フォルダを返す関数などが提供されています。

今となっては名前がだいぶ大仰な感はあります。

homebrew-mackerel-agent

macOSのHomebrew向けにtapファイルを提供します。現在macOS向けにはmackerel-agentとmkrのみを提供しており(ただしOSとしてはサポート対象外)、リリースに合わせて自動更新されています。

itamae-plugin-recipe-mackerel-agent

構成管理ツールItamae向けのmackerel-agentレシピです。Chef版とおおむね同等になっています。

mackerel-agent

皆さんご存じmackerel-agentもOSSですので、当然ここで提供しています。

安定性を旨としているので革新的機能というほどのものはそうそうないのですが、古びないように依存ライブラリなどにはきちんと更新を続けています。

Linux版ではプラグインは別のパッケージにしていますが、Windows版のmackerel-agentインストーラでは一部のプラグインをビルド済みの状態で同梱しています。最新のWindows版mackerel-agent v0.83.0インストーラにはcheck-ping.exeとmackerel-plugin-snmp.exeも追加しましたので、Windows Server中心の環境でのネットワーク監視にもぜひご活用ください!

mackerel-agent-plugins

公式メトリックプラグイン集mackerel-agent-pluginsのリポジトリです。たくさんありますね〜。

MackerelのOpenTelemetry対応によりOpenTelemetry CollectorとそのReceiverを使ったメトリック取得のほうを推奨していくことは今後あり得ますが、現時点ではこれらのメトリックプラグインがまだまだ第一線の主力です。

mackerel-client-go

Mackerel APIサーバーと接続するクライアント部分のライブラリです。

mackerel-agentやmkrなどで使われており、Mackerelの機能強化に合わせて更新されています。

mackerel-client-ruby

こちらはRuby版のクライアントライブラリです。

mackerel-container-agent

ECSやKubernetesなどのサイドカーとして利用できるエージェントです。

利用方法については詳細なドキュメントがあります。

mackerel.io

ただ、このエージェントでは、モダンなコンテナオーケストレーション監視としては十分とは言えないのは確かです。今後OpenTelemetryを軸としたオブザーバビリティプラットフォームとして、コンテナオーケストレーションの状態の洞察に役立つ機能を提供していく予定です。

mackerel-create-release-pull-request-action

mackerelio Organizationのリリースフローに使っているGitHub Actionです。

mackerel-handson

Mackerel CREがハンズオンを開催する際に利用している手順ドキュメントです。ハンズオン当日だけでなく、後から読み返すのにも利用できます。

ちょっと今となっては記述が古いかなという箇所や、もっとここをユーザーさまにアピールすべきでは?という機能も増えているので、いつかはリニューアルを目指したいところです。

mackerel-plugin-aws-batch

AWS Batchのメトリックプラグインです。今となってはAWSインテグレーションで代替できます。

mackerel.io

mackerel-plugin-aws-ec2

Amazon EC2のメトリックプラグインです。これもAWSインテグレーションのほうがより多様なメトリックを取得できます。

mackerel.io

mackerel-plugin-aws-ecs

Amazon ECSのメトリックプラグインです。AWSインテグレーションで代替されます。

mackerel.io

mackerel-plugin-aws-kinesis-firehose

Amazon Kinesis Data Firehoseのメトリックプラグインです。AWSインテグレーションで代替されます。

mackerel.io

mackerel-plugin-aws-rekognition

Amazon Rekognitionのメトリックプラグインです。これはAWSインテグレーションでは対応していないんですね。

RequestCount、ResponseTime、DetectedCountのグラフができます。

mackerel-plugin-aws-step-functions

AWS Step Functionsのメトリックプラグインです。AWSインテグレーションで代替されます。

mackerel.io

mackerel-plugin-aws-waf

AWS WAFのメトリックプラグインです。AWSインテグレーションで代替されます。

mackerel.io

mackerel-plugin-flume

ログ収集・集約・送信システムのFlumeからメトリックを取得するプラグインです。

リリースは2017年のことでした。

mackerel.io

mackerel-plugin-gcp-compute-engine

Google CloudのCompute Engineのメトリックプラグインです。Google Cloudインテグレーションで代替されます。

mackerel.io

mackerel-plugin-gearmand

ジョブキューサービスGearmanのサーバーgearmandからメトリックを取得するプラグインです。キューのavailable、running、totalを取得します。

mackerel-plugin-graphite

TSDBのGraphiteからメトリックを取得するプラグインです。

MackerelのTSDBももともとGraphite、プラグインのメトリックはCarbon形式、といろいろ縁が深かったりしますね。元はてなでMackerelの開発にたずさわったゆううきさんの記事が面白いです(「Mackerelを支える時系列データベース技術」「時系列データベースという概念をクラウドの技で再構築する」)。

mackerel-plugin-json

JSONをダウンロード取得して解析し、値をメトリック化して投稿するプラグインです。

癖は強そうですが、うまく扱えるとなかなか面白い利用ができるのではないでしょうか。

mackerel-plugin-mongodb

MongoDBのメトリックを取得するプラグインです。MongoDBはNoSQLの知名度を引き上げた立役者ですが、今はマネージドサービスを使うことも多そうですね。

mackerel-plugin-murmur

MumbleのVoIPサーバーからメトリックを取得するプラグインです。ユーザーさまからのコントリビュート物で、過去にmackerel-agent-pluginsに収録していました。

mackerel-plugin-mysql

MySQLのメトリックを取得するプラグインです。

MySQLの各バージョンに対応するため、条件分岐の嵐になっています。InnoDBまわりなどで互換性がないため、MariaDBでは利用できません。なんとかしたいなとはずっと思っています。

mackerel-plugin-nvidia-smi

NVIDIAのGPUの情報をメトリックとして取得するプラグインです。

nvidia-smiコマンドの実行結果をパースしてGPU利用率、温度、ファン速度、メモリ利用率をメトリック化するシンプルめなものではありますが、Linux環境であれば気軽かつ便利に使えるプラグインではないでしょうか。

mackerel-plugin-sample

メトリックプラグインのサンプル実装です。GitHub Actionsを使ったCI/CDの設定までひととおり揃っており、これを適当に書き換えながら独自のプラグインを作成できます。

私もこれを使ってmackerel-plugin-pinglatencyというプラグインを作ってみました。

mackerel-plugin-xentop

準仮想化環境Xenのxentop実行結果を解析してメトリック化するプラグインです。

Mackerel-ReleaseUtils

なぜこのリポジトリだけキャメルケース…?と思ったら、Perlで実装されたmackerelio Organizationリリースツールでした。現在は利用していません。

mkr

mkrは、Mackerel APIサーバーと交信してデータや設定をやりとりできるCLIツールです。

ほかのプログラムと組み合わせてさまざまなことができるため、Mackrelをさらに活用いただく上で、ぜひご利用いただきたいツールの1つです。

mackerel.io

ブログヘルプをmkrで検索した結果もご参照ください。

plugin-registry

Mackerelの公開プラグインレジストリです。

ここに登録されているプラグインは、mkr plugin installでインストールする際に、プラグイン名だけでインストールできるようになります。

mkr plugin installの実行において、通常は「https://github.com/作者/リポジトリ」の「作者/リポジトリ」部分を指定する必要があります。たとえばhttps://github.com/mackerelio-labs/check-mackerel-metricであれば「mkr plugin install mackerelio-labs/check-mackerel-metric」です。レジストリに登録することで、これを「mkr plugin install check-mackerel-metric」という短縮した形でユーザーに提供できるという仕掛けです。

snowflake

Twitter(現X)のSnowflakeリポジトリのフォークです。オリジナルのほうはもうアーカイブされてメンテナンスされていないため、むしろこちらのほうが先端になっています。

staging-release-update-action

mackerelio Organizationのステージングリリースフローに使っているGitHub Actionです。

winget-pkgs

WindowsパッケージマネージャWinGet向けのリポジトリで、実際にはmicrosoft/winget-pkgsからフォークして留め置きにしています。

Windows向けのエージェント更新方法は悩みの種で、WinGetには期待が大きいのですが、MackerelがターゲットにしているWindows ServerでのWinGet対応はリリースされたばかりのWindows Server 2025からということで、これに委ねられる日はまだまだ遠いですね。

workflows

mackerelio Organization内で推奨するGitHubワークフローの置き場所です。ベストプラクティスとしても役立ちそうです。

Mackerel Labs(mackerelio-labs)内

mackerelio-labs Organizationの下には、Mackerelで作ってみた実験的なソフトウェアのリポジトリが置かれています。実験的な性質であるため公式なサポート対象の範囲外ですが、Mackerelチーム内外での利用が多いものもあったりしますね。

check-mackerel-metric

メトリック投稿の途切れ監視をするためのチェックプラグインです(拙作)。Mackerelの機能としてサービスメトリックについては途切れ監視が可能ですが、ホストメトリックについてはこれができないため、プラグインを実装してみました。

開発経緯の記事もお読みいただければ幸いです。

developer.hatenastaff.com

mackerel-container-agent-sidecar-injector

Kubernetes環境向けにmackerel-container-agentをPodのサイドカーとして注入する作業を簡易化するツールです。

2022年の開発合宿での成果物でした。

developer.hatenastaff.com

mackerel-lambda-extension-agent

Lambda Telemetry APIを使ったLambda監視エージェントです。AWSインテグレーションでのLambdaのメトリックは関数単位になりますが、このエージェントでは実行環境をMackerelのホストとして扱い、Telemetry APIで取得したものをホストメトリックで表現できます。

Mackerel開発チームのid:arthur-1による詳細記事があります。

blog.arthur1.dev

mackerel-monitoring-modules

IaC系のモジュールを集めるリポジトリ……ではあるのですが、現時点ではcloudwatch-logs-aggregatorのみを格納しています。

cloudwatch-logs-aggregatorは、Amazon CloudWatch Logsに出力されたログを集計し、その結果をMackerelにサービスメトリックとして投稿するもので、活用の幅が広いですね。Mackerelチームでも愛用しているものの1つです。

mackerel.io

mackerel.io

mackerel-sql-metric-collector

任意のRDBから値を取得してMackerelのサービスメトリックとして投稿するツールです。最近ECR Public Galleryでも公開しました。

これもMackerelチームでは便利に使っています。

mackerel.io

mackerel-statsd

軽量なStasDプロトコルで大量に投稿される数値データを受けて、1分内の合計あるいは最大・最小・平均として集約し、カスタムメトリックとして投稿するサービスです。

私が入社後すぐに開発合宿で参加したプロジェクトだったので、思い出深いですね。

terraform-provider-mackerel

MackerelのTerraform Providerです。Labsと名付けてはいるものの、Mackerelの新機能に合わせて随時更新しており、「MackerelのIaC管理といったらこれ!」とアピールしているものです。

registry.terraform.io

おわりに

紹介した各リポジトリのソフトウェアはOSSなので、どなたでも自由にご利用いただけますし、自分好みに改造することもできます。バグ修正や改善の提案なども大歓迎です!

Mackerel Advent Calendar 2024、明日は @benevolent0505 さんです。