メタデータを利用する

ホストメタデータ

各ホストに任意のJSONデータを登録できます。運用上の管理データやパッケージのバージョンなど、様々な情報を登録してご利用いただけます。

mackerel-agentに設定を追加してメタデータを投稿する方法と、APIから投稿する方法があります。 APIから投稿したり取得する方法は、以下のAPIドキュメントを参照してください。 mackerel.io

設定

この項ではmackerel-agentからメタデータを投稿する方法を説明します。 mackerel-agentの設定ファイルに、以下のような項目を追加します。 このサンプルは、インストールされているDebianパッケージのバージョンとアーキテクチャをホストのメタデータとして登録するものです。

[plugin.metadata.packages]
command = ["perl", "/path/to/packages.pl"]
execution_interval = 60
env = { SAMPLE_KEY = "VALUE" }
  • 項目名: plugin.metadata.で始まっている必要があります。上のサンプルでpackagesに該当する部分はユーザーが任意に決めることができ、ホストメタデータAPIのネームスペース (namespace) に該当します。
  • command: mackerel-agentから実行されるコマンドを指定します。このコマンドは標準出力にJSONを出力する必要があります。
  • execution_interval: コマンドを実行する間隔を分で指定します。エージェントのバージョンがv0.67.0以降であれば"10m""1h"のような表現でも記述できます。この設定は省略可能で、省略した場合は10分間隔で実行します。最小実行間隔は10分です。
  • env: commandに渡す環境変数を指定できます。TOMLのTableもしくはInline Tableで指定します。

packages.plのサンプルです。

#!/usr/bin/env perl
use 5.014;
use warnings;
use utf8;
use JSON::PP qw/encode_json/;

my @lines = split /\n/, `dpkg --list`;
my %packages;
for my $line (@lines) {
    my ($name, %info) = parse_package($line);
    next unless %info;
    $packages{$name} = \%info;
}
say encode_json \%packages;

sub parse_package {
    my $line = shift;
    my @items = split /\s+/, $line;
    return unless $items[0] eq 'ii';
    return $items[1], (
        version      => $items[2],
        architecture => $items[3],
    );
}

投稿したJSONデータは、APIを用いて取り出せます。上記のサンプルでは<namespace>のところがpackagesとなります。

curl -XGET https://api.mackerelio.com/api/v0/hosts/<hostId>/metadata/<namespace> -H 'X-Api-Key:<APIKEY>'

詳しくはホストメタデータAPIを参照してください。