ヘルプ

初めての方へ

手順/howto

アラート通知/alerts

仕様/specification

進んだ使い方/advanced

なにかお困りですか?

このヘルプサイトの内容だけでは解決できない問題を抱えている場合はMackerelサポートチームへご連絡ください。

サポートチームへ連絡

このページについて/about

このページにはMackerel <https://mackerel.io> 及び、KDDIクラウドプラットフォームサービス(略称:KCPS)を対象に構築された <https://kcps-mackerel.io> に関するヘルプを記載しています。

概要

Mackerelはロール(役割)の概念を用いて、ホストの運用・管理を簡単かつ便利に行えるようにするサービスです。あなたが管理するホストでmackerel-agentというプログラムを動かすことで、ウェブ上やAPI経由で複数のホストを管理し、また、さまざまな側面からホストやアプリケーションの状況を可視化できます。

Mackerel(ウェブ)

ウェブ上(https://mackerel.io/)では、以下のようなことが行えます:

  • 登録済ホストの一覧
  • ホスト情報の編集
  • サービスおよびロールによるホストの分類
  • ロールごとのホストのリソース情報の可視化
  • ホスト個別のリソース情報の可視化

mackerel-agent

mackerel-agentはお使いのホストにインストールするプログラムです。mackerel-agentがMackerelにホストの情報や定期的に計測されるメトリックを送信し、ウェブ上でホストの管理やリソース情報の可視化などが行えるようになります。

対応環境

Mackerelおよびmackerel-agentは、以下の環境で動作確認を行っています。

  • Mackerel(ウェブ)
  • mackerel-agent
    • Linux
      • Red Hat Enterprise Linux 8/9、CentOS 7、MIRACLE LINUX 8/9、AlmaLinux 8/9、Rocky Linux 8/9、Oracle Linux 7/8/9
      • CentOS Stream 8/9
      • Ubuntu 20.04LTS/22.04LTS、Debian 10/11/12
      • Amazon Linux 2、Amazon Linux 2023
      • x64 アーキテクチャおよび AWS Graviton シリーズを含む Arm v8 アーキテクチャをサポートしています。
      • その他、一般的なLinux環境(カーネルバージョン 2.6.23以降)や、上記以外のRed Hat Enterprise Linux派生ディストリビューションでも動作すると思われますが、現在のところサポート対象外です。
    • Windows
      • Windows Server 2016, 2019, 2022 (LTSC) の x64 ベースシステム
    • またAmazon Web ServicesやMicrosoft Azure、Google Compute EngineなどのパブリックIaaSクラウド全般を動作対象としています。(ネットワーク環境が特殊なクラウドなどでは全ての機能が正常に動作しない可能性はあります。)

メトリックの保持について

Mackerelはメトリックを時系列データベース上に保存しています。 メトリックデータは1分間隔で保存され、以下の表の期間保持します。

間隔 保持期間
1分 460日
1日 460日以降

これはデータの保持期間であり、グラフの表示期間とは異なります。グラフの表示期間は、ご利用のプランに基づきます。

エージェントをインストールする

Mackerelにユーザー登録、オーガニゼーションを作成すると、エージェントをインストールしてホストを登録することができるようになります。「Mackerelエージェントをインストールする」からお使いのOSに合わせたパッケージをダウンロードし、指示に従ってインストールします。

エージェントがインストールされ、正しく動きはじめると、Mackerelにホストとして登録されます。ダッシュボードなどでご確認ください。

エージェントの設定

エージェントの設定ファイルは、デフォルトで /etc/mackerel-agent/mackerel-agent.conf(KCPS用エージェントの場合は/etc/mackerel-agent-kcps/mackerel-agent-kcps.conf) が読み込まれます。

詳細はmackerel-agent仕様をご覧ください。

設定ファイルを利用して、以下のことを実現できます:

KCPS外のホストをKCPS版mackerelで監視する場合

設定ファイルの一番上の行に以下の設定を記述して下さい。

apibase = "https://kcps-mackerel.io/"

エージェントのアンインストール

エージェントのアンインストールは、お使いのパッケージングシステムにあわせて行ってください。

またその際、デフォルトでは /var/lib/mackerel-agent/id (KCPS用エージェントの場合は /var/lib/mackerel-agent-kcps/id)にホストIDの記録されたファイルが残っているため、これを削除してください。

用語集

Mackerel で使用されている用語とその解説です。

サービス

Mackerelにおいて、サービスとはホストを運用する上でもっとも大きな単位です(例: 「はてなブックマーク」「社内システム(勤怠管理)」など)。通常、複数のホストがそれぞれの「役割」(→ ロール)を担当し、協調しあってひとつのサービスを形づくります。関係しあうホストをひとつのサービスに属するものとしてまとめることで、ホストの管理・監視が容易になります。Mackerel における「サービス」については、「サービス」「ロール」とは - Mackerel ヘルプも参照してください。

ロール

ロールはサービスに所属するホストをさらにその「役割」(アプリケーション、データベース、etc…)によって分類する概念です。Mackerelではホストの状況をロールごとにまとめて可視化できます。Mackerel における「ロール」については、「サービス」「ロール」とは - Mackerel ヘルプも参照してください。

ホスト

エージェントが動く OS インスタンスひとつ(仮想化されたものを含む)に対応します。ひとつのホストには複数のロール(およびサービス)を割り当てられます。Mackerel における「ホスト」については、「ホスト」とは - Mackerel ヘルプも参照してください。

ステータス: ホストは standby/maintenance/working といった、ホストの状況を管理するためのステータスを持ちます。運用の際にこのステータスを更新することで、新規ホストのセットアップ〜サービスへの投入〜ホストの撤退というフローをMackerel上で実現できます。

ホストID: Mackerelは各ホストをホストIDで識別します。ホストIDはmackerel-agentが動作しているホスト上のファイル/var/lib/mackerel-agent/idに保存されています。そのため、/var/lib/mackerel-agent/idが別ホストにコピーされると実際は複数のホストがMackerel上では同一のホストと認識され、メトリックの投稿や監視が正しく動作しなくなりますので注意してください。

オーガニゼーション

Mackerelを利用する会社・組織・個人を指します。Mackerelのユーザーアカウントはいずれかのオーガニゼーションに所属します。ホストやサービスの情報がオーガニゼーションの枠を越えて共有されることはありません。

1つのオーガニゼーションに複数のユーザーが所属したり、1人のユーザーが個人用と会社用といった複数のオーガニゼーションに所属することができます。

オーガニゼーション名に関する制限

他のオーガニゼーションで使用されている名前では作成できません。

メトリック

mackerel-agent が定期的に収集するホストの状況です。CPU・メモリの利用状況や、IOの量などが計測され、Mackerelのサーバに自動的に送信されます。ウェブ上でこれらの値をグラフィカルに確認できます。

sensuプラグイン互換のシンプルなプロトコルで、ユーザー定義のメトリックを登録することも可能です。

メトリクスとも表記されますが、Mackerelではメトリックで統一しています。

ラベル付きメトリック

ラベル付きメトリックは OpenTelemetry の仕様に準拠した機能です。OpenTelemetry のエコシステムを利用してメトリックを Mackerel に投稿できます。

Mackerel に投稿されたラベル付きメトリックは PromQL クエリ言語を用いてグラフに表示・監視することができます。

2024 年 2 月時点では、この機能はパブリックベータ版として提供されています。

サービス、ロールを作成する

サービスを作成する

サービスを作成すると、協調してはたらく複数のホストをまとめて管理できるようになります。サービス内のホスト群はさらにロール(役割)によって分類されます。

サービスを作成するには、Mackerelにログイン後、サイドバーからサービス一覧にアクセスし、右上の「サービスを追加」ボタンをクリックしてサービス作成画面を開きます。サービスの名前を入力してフォームを送信すると、サービスが新規作成されます。

サービスにホストを追加するには、サービス内に1つ以上のロールを作成する必要があります。

ロールを作成する

ロールはサービス内におけるホストの役割をあらわすものです。ロールによって、サービス内において同じ役割を持つホストをひとつにまとめられます。グラフによる可視化もロール単位で確認できるようになります。

ロールはかならず1つのサービスに所属します。

ロールの作成は、ホストにロールを割り当てる際に行えます。Mackerelにログイン後、ホスト一覧にアクセスし、ロールを割り当てたいホストのサービス / ロール欄をクリックすると、ダイアログが開きます。ここで "新規ロールを作成" をクリックするとロールを作成できます。ロールの所属するサービスを選び、ロール名を入力してください。

f:id:mackerelio:20190222134626p:plain

ホストへのロールの割り当て

ホストにロールを割り当てることで、ホストをサービス内で分類できます。詳しくはホストにロールを割り当てるをご覧ください。

ホストにロールを割り当てる

ウェブから

作成したロールをホストに割り当てるには、Mackerelにログイン後、サイドバーの「Hosts」からホスト一覧にアクセスし、対象ホストの「SERVICE / ROLE」列をクリックします。このホストに割り当てるロールを選択できるフォームが表示されますので、一覧から選んで「Update」をクリックしてください。

エージェントから

エージェントの設定ファイルを編集して、エージェントの起動時に自動でサービスおよびロールを割り当てられます。詳しくはエージェントのヘルプをご覧ください。

mackerel-agent仕様

この項ではmackerel-agentの最新バージョンについて解説します。

Usage

mackerel-agent [-conf <config-file>] [options]

概要

mackerel-agent はフォアグラウンドで動作し、

  • ホストの情報をMackerelに登録、
  • ホスト上で定期的(1分毎)にリソース情報を収集し、Mackerelに投稿、
  • また、定期的(1時間毎)にホストの情報を更新します。

投稿されたホスト情報、リソース情報はMackerelのウェブインターフェースで確認できます。

設定ファイル

設定ファイルはデフォルトで /etc/mackerel-agent/mackerel-agent.conf が参照されます。記述例としては以下のようになります。

apikey = "APIKEY"
pidfile = "/path/to/pidfile"
root = "/var/lib/mackerel-agent"

cloud_platform = "ec2"

verbose = false
silent = false

display_name = "My Host"

roles = [ "My-Service:app", "Another-Service:db" ]

http_proxy = "http://localhost:8080"

diagnostic = true

include = "/etc/mackerel-agent/conf.d/*.conf"

[host_status]
on_start = "working"
on_stop  = "poweroff"

[filesystems]
ignore = "/dev/ram.*"
use_mountpoint = true

[disks]
ignore = "loop"

[interfaces]
ignore = "bond.*"

[plugin.metrics.vmstat]
command = ["ruby", "/etc/sensu/plugins/system/vmstat-metrics.rb"]

[plugin.metrics.mysql]
command = ["ruby", "/path/to/your/plugin/mysql.rb"]
env = { MYSQL_USERNAME = "USERNAME", MYSQL_PASSWORD = "PASSWORD" }

[plugin.checks.heartbeat]
command = ["heartbeat.sh"]
env = { "ES_HOSTS" = "10.45.3.2:9220,10.45.3.1:9230" }
action = { command = "cardiac_massage", user = "doctor", env = { SAMPLE_KEY_1 = "VALUE_1", SAMPLE_KEY_2 = "VALUE_2" } }

[plugin.checks.ssh]
command = ["ruby", "/path/to/check-ssh.rb"]

[plugin.metadata.packages]
command = ["perl", "/path/to/packages.pl"]

設定ファイルの書式について

設定ファイルの書式には[TOML]形式を採用しています。そのため、このページで記載している点以外の一般的な記述の仕方については、[TOML]形式に準じます。

ファイルエンコーディングについて

設定内容にマルチバイト文字を含む場合は、ファイルエンコーディングが UTF-8 である必要があります。

設定ファイル編集時の注意点について

設定ファイルはエージェントの起動時に読み込まれます。そのため、編集後にその内容を反映させるためにはエージェントを再起動する必要があります。

各設定項目について

apikey 以外の設定項目はオプショナル項目です。そのため、デフォルト値のままでよい場合は明示的な指定は必要ありません。

apikey

エージェントが Mackerel サービスとの通信の際に用いる API キーを指定します。APIキーは、APIキー設定タブから新たなAPIキーを発行したり、発行済のAPIキーを失効させられます。

pidfile

mackerel-agent の pidfile を出力する場所を指定できます。指定しない場合、/var/run 以下に出力されます。

root

mackerel-agent のルートディレクトリを指定できます。このディレクトリ内に、Mackerelがホストを一意に識別するためのホストIDが記録されたファイルが出力されます。

cloud_platform

Amazon EC2やAzure Virtual Machine、Google Compute Engine上でmackerel-agentを実行する場合、mackerel-agentは自身が実行されているIaaS環境を自動的に検出します。これらのIaaS環境にあることを識別できた場合、mackerel-agentはIaaSのメタ情報を収集するほか、AWSインテグレーションやAzureインテグレーションとの連携に必要な識別子(custom_identifier)をホストに対して適用します。

通常、この検出は自動的に行われますが、設定ファイルに cloud_platform オプションを指定することで明示的にプラットフォームを指定できます。有効な値は、 "auto"(デフォルト) "ec2" "gce" "azurevm" "none" の5種類です。

Dockerコンテナを利用する場合など、一つのIaaSインスタンス上で複数のmackerel-agentを起動して別々のホストとして認識させたい場合は、インスタンス本体に対応するmackerel-agent以外の設定ファイルではこのオプションを "none" にする必要があります。

verbose

verbose = true とすることで、DEBUGログの出力を有効にできます。

silent

silent = true とすることで、WARNレベル以下のログ出力を抑制できます。

display_name

設定ファイルによる指定で、ホストに対して任意の別名を設定することが出来ます。すでに管理名が設定されているホストの場合は新しい名前に更新されます。

また、設定ファイルから指定を削除した場合も管理名は設定されたままとなります。ホスト設定ページ(各ホスト詳細画面内、ホスト名右の歯車アイコン)から削除することが出来ます。

roles

ホストのサービス、ロールを設定できます。エージェント起動時、設定ファイルで指定されたサービスやロールが存在しない場合は、新たに作成されます。また、ウェブ画面側での変更がエージェントの設定ファイルに同期されることはありません。

例: My-ServiceサービスのappロールおよびAnother-Serviceサービスのdbロールを紐付けたい場合

# /etc/mackerel-agent/mackerel-agent.conf
roles = [ "My-Service:app", "Another-Service:db" ]

proxy

このオプションを指定することで、エージェントが通信に利用する HTTP/HTTPS Proxy を設定できます。このオプションを利用することにより、監視対象サーバーが直接のインターネット通信をおこなえないようなネットワーク環境でも、プロキシサーバーを経由してのサーバー監視をおこなうことが可能です。

例: 経由させたいプロキシサーバーが localhost:8080 で提供されている場合

# /etc/mackerel-agent/mackerel-agent.conf
http_proxy = "http://localhost:8080"

環境変数 HTTP_PROXY にも対応しています。詳しくは環境変数を適用するをご確認ください。

また、設定ファイル内に http_proxy と同様の形式で、 https_proxy と記述することで、HTTPとHTTPSのプロキシサーバーの設定を分離することができます。なお、こちらも同様に環境変数 HTTPS_PROXY に対応しています。

例: 経由させたいプロキシサーバーが localhost:8080, localhost:8081 で提供されている場合

# /etc/mackerel-agent/mackerel-agent.conf
http_proxy = "http://localhost:8080"
https_proxy = "http://localhost:8081"

http_proxy / https_proxy の設定とエージェントが通信に利用するプロキシの対応は以下のようになります。

http_proxy https_proxy HTTP のプロキシ HTTPS のプロキシ
設定しない 設定しない なし なし
設定しない 設定する なし https_proxy の値
設定する 設定しない http_proxy の値 http_proxy の値
設定する 設定する http_proxy の値 https_proxy の値
設定する direct http_proxy の値 なし
  • http_proxy のみ設定ファイルに記述していた場合、 https_proxy としてもその値を利用します。
  • HTTPSプロキシを利用しない場合は https_proxydirect を指定します。

diagnostic

このオプションを指定することで、エージェント自身のメモリ使用状況を収集しカスタムメトリックとして投稿します(診断モード。デフォルトは false )。

エージェントの起動時オプションとしても指定可能です。

mackerel-agent -diagnostic

診断モードを有効にすることにより、以下のメトリックの収集が行われます。

  • custom.agent.memory.alloc
  • custom.agent.memory.sys
  • custom.agent.memory.heapAlloc
  • custom.agent.memory.heapSys
  • custom.agent.runtime.goroutine_num

取得できる値の詳細は以下のドキュメントをご参照ください。

include

mackerel-agent 設定項目を他の設定ファイルに記述し、それを include オプションを指定することにより読み込ませることが可能です。

  • /etc/mackerel-agent/conf.d/*.conf のように、ファイルグロブを指定できます。
  • 文字列、真偽値、配列の設定項目(verboseroles)に関して、後から読み込まれた設定ファイルに値が存在する場合、上書きされます。
  • 複数の設定ファイルがマッチするとき、それらが読み込まれる順序は不定です。
  • 読み込まれた設定ファイル中の include 設定項目は、無視されます。

host_status

エージェント起動時の、そのホストのステータスを設定できます。エージェントの起動時、終了時で別々のステータスを指定できます。

例えば以下のように指定することで、エージェントが起動したときに、ホストのステータスが working に設定され、エージェントが正常終了した際に poweroff に設定されます。

# /etc/mackerel-agent/mackerel-agent.conf
[host_status]
on_start = "working"
on_stop  = "poweroff"

指定できるステータスは、working standby maintenance poweroff です。ホストステータスによる監視や通知の仕様については、監視・通知を設定するを参照してください。

filesystems

ignore

特定のファイルシステムからのメトリック収集を除外できます。

以下のように正規表現を用いて指定することで、指定されたファイルシステムからのメトリックは収集されなくなります。

# /etc/mackerel-agent/mackerel-agent.conf
[filesystems]
ignore = "/dev/ram.*"
use_mountpoint

設定ファイルに以下のように指定することで、マウントポイントごとに filesystem メトリックを取得することが可能です。

# /etc/mackerel-agent/mackerel-agent.conf
[filesystems]
use_mountpoint = true

disks

ignore

特定のディスクデバイスからのメトリック収集を除外できます。

以下のように正規表現を用いて指定することで、指定されたディスクデバイスからのメトリックは収集されなくなります。

# /etc/mackerel-agent/mackerel-agent.conf
[disks]
ignore = "loop"

interfaces

ignore

特定のインターフェイスからのメトリック収集を除外できます。

以下のように正規表現を用いて指定することで、指定されたインターフェイスからのメトリックは収集されなくなります。

# /etc/mackerel-agent/mackerel-agent.conf
[interfaces]
ignore = "bond.*"

Windows の場合、インターフェース名は Windows の デバイスマネージャー で表示されるインターフェース名に対応する正規表現を指定してください。

[plugin.metrics.{name}]

plugin.metrics.{name} セクションで、任意のメトリックを取得、投稿するための設定を記述できます。

command で指定されたコマンドをエージェントが実行し、その結果を標準出力としてエージェントが受け取り、Mackerelサービスに投稿します。 そのための仕組みとして、任意のユーザースクリプトの他、プラグインを利用することが可能です。詳しくはユーザー定義のメトリックを投稿するを参照してください。

[plugin.checks.{name}]

plugin.checks.{name} セクションで、任意のチェック監視処理を実行、結果を投稿するための設定を記述できます。 「チェック監視処理」とは、「特定のプロセスが起動しているかどうか」「監視対象のログファイル内に問題のある出力がされているかどうか」といった種類の監視です。この設定により投稿された結果はグラフとして描画はされません。

そのための仕組みとして、任意のユーザースクリプトの他、プラグインを利用することが可能です。詳しくはチェック監視項目を追加するを参照してください。

[plugin.metadata.{name}]

plugin.metadata.{name} セクションで、任意の処理を実行しその結果をメタデータに登録するための設定を記述できます。詳しくはメタデータを利用するを参照してください。

起動オプション

以下の起動オプションが指定できます。設定ファイルを同じ項目を指定した場合、起動オプションが優先されます。

  • -apikey=API_KEY Mackerelのウェブ上で確認できるAPIキーです。この値で、ホストがどのオーガニゼーションに所属するかを識別します。(非推奨。バージョン0.5.1より設定ファイルに記述することを推奨しています。)
  • -conf=/etc/mackerel-agent/mackerel-agent.conf 設定ファイルへのパスです。未指定の場合、デフォルトで/etc/mackerel-agent/mackerel-agent.confが読み込まれます。
  • -pidfile=/var/run/mackerel-agent.pid PIDファイルへのパスです。
  • -root=/var/lib/mackerel-agent mackerel-agentの状態を記録するディレクトリへのパスです。現在はホストを識別するidファイルのみが置かれます。
  • -role=<service>:<role> ホストに割り当てるロールおよびサービスを指定します。
  • -diagnostic エージェント自身のメトリックを収集して投稿します。

環境変数を適用する

mackerel-agentのプロセスに環境変数を適用できます。OSごとの設定方法をご確認ください。

Linux環境

規定のファイルに環境変数の設定を追記することで適用できます。

ご利用のOSのパッケージマネージャーに応じて設定してください。

パッケージマネージャー 設定ファイル
yum/rpm /etc/sysconfig/mackerel-agent
apt/deb /etc/default/mackerel-agent

以下は設定例です。

  • 自動退役を有効にするためAUTO_RETIREMENT=1を設定する
  • プロキシサーバー経由で通信させるためHTTP_PROXY=http://localhost:8080/を設定する
AUTO_RETIREMENT=1
HTTP_PROXY="http://localhost:8080/"

Windows環境

システムのプロパティ > 詳細設定 > 環境変数 > システム環境変数 より設定してください。

対応した環境変数

mackerel-agentが対応している環境変数です。これら以外の環境変数を指定することでプラグインから参照することも可能です。

OTHER_OPTS

mackerel-agentに追加したいオプションを指定します。例えば OTHER_OPTS="-diagnostic -verbose" のように指定すると診断モードが有効になるとともにDEBUGログが出力されます。

HTTP_PROXY / HTTPS_PROXY

mackerel-agentは指定されたプロキシサーバーを経由して通信を行います。詳細についてはproxyをご確認ください。

AUTO_RETIREMENT (Linux環境)

この変数に0以外の文字列を指定すると、OSシャットダウン時(正確には /etc/init.d/mackerel-agent stop などによるサービス停止時)にホストが自動的に退役されます。

注意 手動で /etc/init.d/mackerel-agent stop などを実行した場合でも、この指定がされていた場合にはホストは退役されてしまいます。エージェントのバージョンアップ時など、エージェントをstop/startさせたい場合には、/etc/init.d/mackerel-agent reload のようなリロードコマンドを環境に合わせて実行して下さい。

[TOML]: https://github.com/mojombo/toml

MACKEREL_AUTO_RETIREMENT (Windows環境)

Windowsのシステム環境変数で、この変数に0以外の文字列を指定すると、OSシャットダウン時にホストが自動的に退役されます。サービスの停止では退役処理は実行されません。

FAQ

エージェントはどうやってホストを判別していますか?

/var/lib/mackerel-agent/id にホストIDが保存されており、このIDでどのホストか判別します。ホスト名は判別に利用されません。(設定ファイルは起動オプションでrootを変更している場合、そのroot以下にidファイルが作成されます。)

エージェントが起動しません

/var/lib/mackerel-agent/id に正しくないIDが保存されている場合、正しく起動しません。/var/lib/mackerel-agent/id を削除してから起動してみてください。(新規ホストとして認識されます)(設定ファイルは起動オプションでrootを変更している場合、そのroot以下にidファイルが作成されます。)

設定に日本語(マルチバイト文字)は使用可能ですか?

使用可能です。ただし、conf ファイルの文字コード(エンコーディング)が UTF-8 である必要があるので注意してください。

サブコマンド

エージェントはいくつかのサブコマンドを持ちます。

retire

mackerel-agent retire [-conf <config-file>] [-force] [options]

ホストを退役させます。実行時に確認プロンプトが表示されます。 -force オプションをつけることで、確認プロンプトを出さずに退役処理を行えます。

configtest

mackerel-agent configtest

設定ファイル( mackerel-agent.conf )のシンタックスチェックをおこなえます。

once

mackerel-agent once

一度だけメトリックの収集を実行して標準出力に表示します。投稿は行われません。

Capistrano 2.x と連携する

Mackerelに登録しているホストの情報を、Capistrano 2.xのデプロイ対象ホスト群として利用するサンプルです。

mackerel-client Gem を利用します。

Gemfileに追記:

gem 'mackerel-client'

Capistrano から利用する

config/deploy.rb (Capfile):

load 'deploy'

require 'mackerel/client'

set :mackerel_api_key, MACKEREL_API_KEY
set :service, SERVICE_NAME

@client = Mackerel::Client.new(mackerel_api_key: mackerel_api_key)

def host_ip_addrs(role)
  hosts = @client.get_hosts(service: service, roles: role).select do |host|
    host.status === 'standby' || host.status === 'working'
  end.map do |host|
    interface = host.interfaces.find { |i| /^eth/ === i['name'] }
    interface['ipAddress'] if interface
  end.select {|ipaddr| ipaddr != nil }
end

role :app do
  host_ip_addrs(:app)
end

role :db do
  host_ip_addrs(:db)
end

SERVICE_NAMEにはMackerelに登録しているサービスの名前を指定してください。

Capistranoのロールとして、Mackerelでサービスに所属しているホスト群を指定できます。

  • ステータスが working または standby になっているホストが一覧できます。
  • ホストのIPアドレスはエージェントが収集したものが使用されます。

ここでタスクを定義します。

desc "Mackerel integration test"
namespace :deploy do
  desc "echo message"
  task :echo , roles => :app do
    run "echo \"Integration Test\""
  end
end

このタスクを実行すると次のような結果となります。

# bundle exec cap deploy:echo
  * 2014-09-23 21:36:28 executing `deploy:echo'
  * executing "echo \"Integration Test\""
    servers: ["127.0.0.1"]
    [127.0.0.1] executing command
 ** [out :: 127.0.0.1] Integration Test
    command finished in 435ms

ホストのカスタムメトリックを投稿する

ホストごとのメトリックには「loadavg5」や「cpu.user」などエージェントが自動で投稿するメトリックに加えて、任意の値(カスタムメトリック)を定期的にエージェントから投稿できます。

後述のsensuプラグイン互換のフォーマットで計測値を出力するコマンドを登録すると、その出力がデフォルトのメトリックと共にMackerelに送信され、別個のグラフに可視化されるようになります。

公式のプラグイン集も提供しています。公式プラグインの使い方などについては公式プラグイン集を使うを参照してください。

また、公式プラグインで利用している、ヘルパーライブラリである、github.com/mackerelio/go-mackerel-plugin を利用したプラグインの開発方法については、go-mackerel-pluginを利用してカスタムメトリックプラグインを作成する をご覧ください。

設定

エージェントの設定ファイルに、以下のような項目を追加します(例):

[plugin.metrics.vmstat]
command = [ "ruby", "/path/to/vmstat-metrics.rb" ]
user = "SOME_USER_NAME" # optional
custom_identifier = "SOME_IDENTIFIER" # optional
include_pattern = 'cpu' # optional
exclude_pattern = 'waiting$' # optional
timeout_seconds = 45 # optional
env = { SAMPLE_KEY = "VALUE" } # optional

1行目の [] で囲まれた設定項目名は "plugin.metrics." で始まっている必要があり、含まれるドットの数はちょうど2である必要があります。プラグインを複数指定する場合は、プラグインごとに別の名前を指定して下さい。

2行目以降の各設定項目の説明は以下の通りです。 command のみが必須の項目で、他の項目は全て optional です。

  • command: エージェントが定期的に実行し、その標準出力を計測結果として使用するコマンドです。コマンドは後述する仕様に沿って動作する必要があります。
    • command には文字列を渡すことも可能です。上記の例の場合、command = "ruby /path/to/vmstat-metrics.rb" のように指定できます。
      • 文字列を渡した場合、シェル経由での実行になり、エスケープが必要になります。
      • 配列を渡した場合、シェル経由での実行にならず、エスケープも不要になります。
  • user: command で指定したコマンドの実行ユーザーを指定できます。指定しない場合は mackerel-agent の実行ユーザーがコマンドの実行ユーザーとなります。Windows環境には未対応のため、利用できません。
  • custom_identifier: 実行結果のメトリックを、 agent が動作しているホストではなく指定した識別子のホストのメトリックとして送信します。
  • include_pattern / exclude_pattern: 実行結果のメトリックのうち特定のものだけを Mackerel に投稿するために正規表現を記述できます。
    • include_pattern が指定されていた場合、メトリック名が指定された正規表現にマッチするメトリックのみを投稿します。
    • exclude_pattern が指定されていた場合、メトリック名が指定された正規表現にマッチしないメトリックのみを投稿します。
    • include_pattern と exclude_pattern の両方にマッチするメトリック名の場合、そのメトリックは投稿されません。
  • timeout_seconds: プラグインの処理におけるタイムアウト時間を秒で指定します。デフォルト値は30秒です。各プラグイン実行の多重起動の制御はされませんので、プラグインの実行間隔を超えないような設定をすることを推奨します。
  • env: commandに渡す環境変数を指定できます。TOMLのTableもしくはInline Tableで指定します。

注意: PowerShell スクリプトを利用する場合

Windows PowerShell スクリプトの実行ポリシーによっては PowerShell スクリプトで書かれたプラグインが実行できないことがあります。 そのような場合、下記のような バッチファイルを用意してプラグインのコマンドに指定すると実行することが出来ます。

@echo off
cd %~dp0

powershell Set-ExecutionPolicy RemoteSigned
powershell .\sample-plugin.ps1

メトリックの投稿

設定ファイルで指定するコマンドは、標準出力の各行に以下のフォーマットの出力をすることが期待されます(\t はタブ文字です):

{metric name}\t{metric value}\t{epoch seconds}
  • 名前の最後のドットまでが共通するメトリックがひとつのグラフにまとめられ、ホスト詳細で閲覧できます。
  • メトリック名の先頭には自動的に"custom."という文字列が付与されます。
  • メトリック名に使える文字は英数字もしくはハイフン(-)、アンダースコア(_)、ドット(.)のいずれか(/[-a-zA-Z0-9_.]/)です。

例: example.fooexample.bar という名前のメトリックを投稿した場合

custom.example.* と名付けられたグラフがホスト詳細に現れます。このグラフには example.fooexample.bar の系列データが描画されます。

グラフ定義を指定する

ユーザー定義メトリックを投稿することで作られるグラフの表示設定を、実行されるコマンドから JSON で指定できます。

mackerel-agent は起動時に、設定ファイルで指定されたコマンドを MACKEREL_AGENT_PLUGIN_META 環境変数を "1" に設定した状態で起動します。この時、当該コマンドの出力が以下のフォーマットに従っていると、mackerel-agent はプラグインのメタ情報として解釈し、グラフ定義を Mackerel に送信します。これによって、ユーザー定義メトリックの表示設定をウェブ上で行わずにあらかじめ指定できます。

出力は、必ず以下の行から始めてください。最初の行がこの内容でなかった場合、mackerel-agent はこのプラグインがメタ情報を出力しないものとして、グラフ定義の設定を行いません。

# mackerel-agent-plugin

続けて、以下のような設定を JSON フォーマットで出力します。

{
  "graphs": {
    {graph}: {
      "label": GRAPH_LABEL,
      "unit": UNIT_TYPE
      "metrics": [
        {
          "name": METRIC_NAME,
          "label": METRIC_LABEL
        },
        ...
      ]
    },
    GRAPH_NAME: ...
  }
}
…

それぞれの項目は、以下のような意味を持ちます。

項目 説明
graphs.{graph} ユーザー定義メトリック {graph}.* に対応するグラフ名。{graph} にはドット(.)を含むことができます。また、ワイルドカード#, * を使用することもできます。詳しくは API仕様(v0)/ グラフ定義の投稿 を参照してください。
graphs.{graph}.label ユーザー定義メトリック {graph}.* に対応するグラフの表示名。
graphs.{graph}.unit ユーザー定義メトリック {graph}.* に対応するグラフの値の種類。可能な値は "float", "integer", "percentage", "seconds", "milliseconds", "bytes", "bytes/sec", "bits/sec", "iops" のいずれか。
graphs.{graph}.metrics ユーザー定義メトリック {graph}.* に対応するメトリック定義の配列。

メトリック定義は以下のようなキーを持ちます。

キー 説明
name このメトリックがユーザー定義メトリック {graph}.{name} に対応することを表す。この値にドット(.)を含むことはできません。使用できる文字は英数字もしくはハイフン(-)、アンダースコア(_)のいずれか(/[-a-zA-Z0-9_]/)です。
labal ユーザー定義メトリック {graph}.{name} に対応する時系列の表示名。
stacked ユーザー定義メトリック {graph}.{name} に対応する時系列を積み上げ表示するかどうか。false なら線分で表示する。

Ruby によるサンプル

6面ダイスおよび20面ダイスの値を Mackerel に投稿するプラグインです。

if ENV['MACKEREL_AGENT_PLUGIN_META'] == '1'
  require 'json'

  meta = {
    :graphs => {
      'super.dice' => {
        :label   => 'My Dice',
        :unit    => 'integer',
        :metrics => [
          {
            :name  => 'd6',
            :label => 'Die (d6)'
          }, {
            :name  => 'd20',
            :label => 'Die (d20)'
          }
        ]
      }
    }
  }

  puts '# mackerel-agent-plugin'
  puts meta.to_json
  exit 0
end

puts [ 'super.dice.d6',  rand( 6)+1, Time.now.to_i ].join("\t")
puts [ 'super.dice.d20', rand(20)+1, Time.now.to_i ].join("\t")

このプラグインで、以下のようなグラフを生成できます。

f:id:mackerelio:20171017113656p:image