メタデータを利用する
ホストメタデータ
各ホストに任意のJSONデータを登録できます。運用上の管理データやパッケージのバージョンなど、様々な情報を登録してご利用いただけます。mackerel-agentに設定を追加してメタデータを投稿する方法と、APIから投稿する方法があります。 APIから投稿したり取得する方法は、以下のAPIドキュメントを参照してください。 [https://mackerel.io/ja/api-docs/entry/metadata:embed:cite]
設定
この項ではmackerel-agentからメタデータを投稿する方法を説明します。 [mackerel-agentの設定ファイル](/ja/docs/entry/spec/agent#config-file)に、以下のような項目を追加します。 このサンプルは、インストールされているDebianパッケージのバージョンとアーキテクチャをホストのメタデータとして登録するものです。toml
[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のサンプルです。
perl
#!/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となります。
sh
curl -XGET https://api.mackerelio.com/api/v0/hosts/<hostId>/metadata/<namespace> -H 'X-Api-Key:<APIKEY>'詳しくはホストメタデータAPIを参照してください。