Mackerel

【Mackerel】mackerel-plugin-muninを使ってMuninのプラグインが動かない時!その2

はじめに

こんにちは!

突然ですが、腹筋ローラーってご存知でしょうか。

あれで腹筋をいじめすぎた結果、腰に負担が回り、先週は腰痛を起こしていたのですが、テレワークの有難みを感じる機会となりました。

腹筋ローラー大好きエンジニア森屋でございます!(もう使うのやめます)

今回は、前の記事にてうやむやになっていた、Muninプラグインでエラーが出る件の解決編となっています。

前回も解決編ちゃうかったんかい!という感じですが、その後わかったことがあるので報告させてください。

前回のおさらい

  • Muninをyumで入れた際に入ったプラグインを、「mackerel-plugin-munin」を使ってMackerelに転用したところ、いくつかメトリックが取れなかった
  • シバン(スクリプトの頭に書くやつ)を「#!/bin/sh」から「#!/bin/bash」に変えたら動いた

今回の発見に至った経緯

後日、Muninプラグインの頭の方で「set -e」が宣言されている場合、シバンを変えてもエラーが出るということに気が付きました。

なお、シェルスクリプト中で「set -e」が入っていると、些細なものでも異常が出た時点で処理が停止します。

そこで、スクリプトの中身を改めて精査したところ、以下の行における「$MUNIN_LIBDIR」の環境変数の部分でエラーとなっていました。

$MUNIN_LIBDIR/plugins/plugin.sh

環境変数を無視し、以下のコマンドでMackerelの動作を再現した場合、エラーとなります。

mackerel-plugin-munin -plugin=/etc/munin/plugins/vmstat -plugin-conf-d=/etc/munin/plugin-conf.d
---------------------------------------
2020/MM/DD hh:mm:ss exit status 1:
---------------------------------------

そこで、以下の様に環境変数を与えてやると、ちゃんと動くことを確認しました。

MUNIN_LIBDIR=/usr/share/munin mackerel-plugin-munin -plugin=/etc/munin/plugins/vmstat -plugin-conf-d=/etc/munin/plugin-conf.d
---------------------------------------
munin.vmstat.sleep      0       XXXXXXXXXX(Unixtime)
munin.vmstat.wait       1       XXXXXXXXXX(Unixtime)
---------------------------------------

トラブルシュート

前の記事で解説した部分は省略してますので、本記事だけでは説明不足な部分があると思います)

前回の解消法からして、環境変数が無くとも問題なく動いていそうではあるものの、放ってもおけないので対処法を検討しました。

要は、Mackerelエージェントに環境変数を渡せばミッションクリアです。

しかし記法がわからず、色々周り道をした結果、以下の情報に辿り着くことができました。

https://mackerel.io/ja/docs/entry/spec/agent (まさかの公式ヘルプページ!)

すっかり見落としていたのですが、「env」行について言及されていましたね…さすがMackerel。

というわけで、mackerel-agent.confを編集し、以下の様にenv行を足すことで、無事グラフが表示されてエラー解消です!

[plugin.metrics.vmstat]
command = ["mackerel-plugin-munin", "-plugin=/etc/munin/plugins/vmstat", "-plugin-conf-d=/etc/munin/plugin-conf.d"]
env = { "MUNIN_LIBDIR" = "/usr/share/munin" }

まとめ

困ったときは、ちゃんとヘルプを見ないとですね!

当たり前のことなのですが、疎かになっちゃう時もあります。

一通り悩んで席を立ち、トイレから戻る時に「はっ!ちゃんとヘルプ見よう!」てなり解決しました。

以上です。お読みくださり、ありがとうございました。

ではまた!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA