こんにちは、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)内
- ansible-mackerel-agent
- check-aws-cloudwatch-logs-insights
- checkers
- cookbook-mackerel-agent
- create-release-action
- docker-mackerel-agent
- docker-mackerel-rpm-build
- documents
- fluent-plugin-mackerel
- fluent-plugin-webhook-mackerel
- go-check-plugins
- go-mackerel-plugin
- go-mackerel-plugin-helper
- go-osstat
- golib
- homebrew-mackerel-agent
- itamae-plugin-recipe-mackerel-agent
- mackerel-agent
- mackerel-agent-plugins
- mackerel-client-go
- mackerel-client-ruby
- mackerel-container-agent
- mackerel-create-release-pull-request-action
- mackerel-handson
- mackerel-plugin-aws-batch
- mackerel-plugin-aws-ec2
- mackerel-plugin-aws-ecs
- mackerel-plugin-aws-kinesis-firehose
- mackerel-plugin-aws-rekognition
- mackerel-plugin-aws-step-functions
- mackerel-plugin-aws-waf
- mackerel-plugin-flume
- mackerel-plugin-gcp-compute-engine
- mackerel-plugin-gearmand
- mackerel-plugin-graphite
- mackerel-plugin-json
- mackerel-plugin-mongodb
- mackerel-plugin-murmur
- mackerel-plugin-mysql
- mackerel-plugin-nvidia-smi
- mackerel-plugin-sample
- mackerel-plugin-xentop
- Mackerel-ReleaseUtils
- mkr
- plugin-registry
- snowflake
- staging-release-update-action
- winget-pkgs
- workflows
- Mackerel Labs(mackerelio-labs)内
- おわりに
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プラグインではタイムアウトを起こしてしまうような、流量の多いロググループのログ監視にも対応すべく開発したとのことでした。
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にサービスメトリックやカスタムメトリックを投稿するメトリックプラグインです。
詳細な利用ドキュメントも用意しています。
fluent-plugin-webhook-mackerel
MackerelからのイベントWebhookをfluentdの入力とするfluentd向けプラグインです。Rubyのgemファイルでリリースしていますが、先月に動作しないというご連絡を受けて更新しました。
こちらも詳細ドキュメントを用意しています。
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などのサイドカーとして利用できるエージェントです。
利用方法については詳細なドキュメントがあります。
ただ、このエージェントでは、モダンなコンテナオーケストレーション監視としては十分とは言えないのは確かです。今後OpenTelemetryを軸としたオブザーバビリティプラットフォームとして、コンテナオーケストレーションの状態の洞察に役立つ機能を提供していく予定です。
mackerel-create-release-pull-request-action
mackerelio Organizationのリリースフローに使っているGitHub Actionです。
mackerel-handson
Mackerel CREがハンズオンを開催する際に利用している手順ドキュメントです。ハンズオン当日だけでなく、後から読み返すのにも利用できます。
ちょっと今となっては記述が古いかなという箇所や、もっとここをユーザーさまにアピールすべきでは?という機能も増えているので、いつかはリニューアルを目指したいところです。
mackerel-plugin-aws-batch
AWS Batchのメトリックプラグインです。今となってはAWSインテグレーションで代替できます。
mackerel-plugin-aws-ec2
Amazon EC2のメトリックプラグインです。これもAWSインテグレーションのほうがより多様なメトリックを取得できます。
mackerel-plugin-aws-ecs
Amazon ECSのメトリックプラグインです。AWSインテグレーションで代替されます。
mackerel-plugin-aws-kinesis-firehose
Amazon Kinesis Data Firehoseのメトリックプラグインです。AWSインテグレーションで代替されます。
mackerel-plugin-aws-rekognition
Amazon Rekognitionのメトリックプラグインです。これはAWSインテグレーションでは対応していないんですね。
RequestCount、ResponseTime、DetectedCountのグラフができます。
mackerel-plugin-aws-step-functions
AWS Step Functionsのメトリックプラグインです。AWSインテグレーションで代替されます。
mackerel-plugin-aws-waf
AWS WAFのメトリックプラグインです。AWSインテグレーションで代替されます。
mackerel-plugin-flume
ログ収集・集約・送信システムのFlumeからメトリックを取得するプラグインです。
リリースは2017年のことでした。
mackerel-plugin-gcp-compute-engine
Google CloudのCompute Engineのメトリックプラグインです。Google Cloudインテグレーションで代替されます。
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つです。
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の機能としてサービスメトリックについては途切れ監視が可能ですが、ホストメトリックについてはこれができないため、プラグインを実装してみました。
開発経緯の記事もお読みいただければ幸いです。
mackerel-container-agent-sidecar-injector
Kubernetes環境向けにmackerel-container-agentをPodのサイドカーとして注入する作業を簡易化するツールです。
2022年の開発合宿での成果物でした。
mackerel-lambda-extension-agent
Lambda Telemetry APIを使ったLambda監視エージェントです。AWSインテグレーションでのLambdaのメトリックは関数単位になりますが、このエージェントでは実行環境をMackerelのホストとして扱い、Telemetry APIで取得したものをホストメトリックで表現できます。
Mackerel開発チームのid:arthur-1による詳細記事があります。
mackerel-monitoring-modules
IaC系のモジュールを集めるリポジトリ……ではあるのですが、現時点ではcloudwatch-logs-aggregatorのみを格納しています。
cloudwatch-logs-aggregatorは、Amazon CloudWatch Logsに出力されたログを集計し、その結果をMackerelにサービスメトリックとして投稿するもので、活用の幅が広いですね。Mackerelチームでも愛用しているものの1つです。
mackerel-sql-metric-collector
任意のRDBから値を取得してMackerelのサービスメトリックとして投稿するツールです。最近ECR Public Galleryでも公開しました。
これもMackerelチームでは便利に使っています。
mackerel-statsd
軽量なStasDプロトコルで大量に投稿される数値データを受けて、1分内の合計あるいは最大・最小・平均として集約し、カスタムメトリックとして投稿するサービスです。
私が入社後すぐに開発合宿で参加したプロジェクトだったので、思い出深いですね。
terraform-provider-mackerel
MackerelのTerraform Providerです。Labsと名付けてはいるものの、Mackerelの新機能に合わせて随時更新しており、「MackerelのIaC管理といったらこれ!」とアピールしているものです。
おわりに
紹介した各リポジトリのソフトウェアはOSSなので、どなたでも自由にご利用いただけますし、自分好みに改造することもできます。バグ修正や改善の提案なども大歓迎です!
Mackerel Advent Calendar 2024、明日は @benevolent0505 さんです。