muninのapache_accessesプラグインがSSL対応になったサーバステータスページへアクセスできない問題に対応

OS: Ubuntu 18.04.1 LTS
Apache 2.4.35
munin-node 2.0.37-1ubuntu0.1

ApacheにSSLサーバ証明書を導入して以来、muninのapache_accessesプラグインの調子が頗る良くない。munin-run --debug apache_accesses を実行してもaccesses80.value Uとなるばかりでちっとも数値をひらえない。

$ sudo vi /usr/share/munin/plugins/apache_accesses
154         my $response = $ua->request(HTTP::Request->new('GET',$url));
155 print $response->message;

埒が明かぬのでapache_accessesプラグインの155行目に print $response->message;を挿入しても少し具体的な手がかりを得ようと試みたところこういう始末であった。

$ sudo munin-run --debug apache_accesses
(snip)
Can't connect to 127.0.0.1:80 (SSL connect attempt failed error:1408F10B:SSL routines:ssl3_get_record:wrong version number)accesses80.value U

SSL3.0での接続が具合悪いように見えるけれどもそも80番ポートへアクセスしているの為に処理がわやになっているのかと思うから設定ファイルでURLとポートを指定して伝えた。

$ sudo vi /etc/munin/plugin-conf.d/munin-node
[apache_*]
env.url https://127.0.0.1:%d/server-status?auto
env.ports 443

改めてmunin-runコマンドで以ってデバッグをおこなうと今度はこういう有様である。hostname verification failedという事は詮ずればサーバ証明書のCommon Nameは127.0.0.1とはぜんぜんチグハグであることが原因であろうと思う。

$ sudo munin-run --debug apache_accesses
(snip)
Can't connect to 127.0.0.1:443 (hostname verification failed)accesses443.value U

LWP::UserAgentの手引きを紐解くとデフォルトではホストネームの検証が実施される模様であるから此れを無理に取りやめる為の記述をapache_accessesプラグインの150行目にしたためる。

$ sudo cp -av /usr/share/munin/plugins/apache_accesses{,.orig}
$ sudo vi /usr/share/munin/plugins/apache_accesses
148 my $ua = LWP::UserAgent->new(timeout => 30,
149                 agent => sprintf("munin/%s (libwww-perl/%s)", $Munin::Common::Defaults::MUNIN_VERSION, $LWP::VERSION));
150 $ua->ssl_opts(verify_hostname => 0);

あとはmunin-nodeを再起動して様子を伺っているとどうやら宜しく動作しているようである。

$ sudo systemctl restart munin-node
$ systemctl status munin-node
● munin-node.service - Munin Node
   Loaded: loaded (/lib/systemd/system/munin-node.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-10-22 04:28:32 JST; 3s ago

参考:
LWP::UserAgent – Web user agent class – metacpan.org

MySQL関連のMuninプラグインを動作させる際に使用されるmysqladminのパスワードを別ファイルへ記載

OS: Ubuntu Server 18.04.1 LTS
Munin 2.0.37

Muninがデフォルトで準備して呉れたMySQLに関係するプラグインのうちmysqladminを内部で実行しているものはパスワードが必要であるから設定ファイルに直接書きつけると、プラグインの処理は進むものの mysqladmin: [Warning] Using a password on the command line interface can be insecure. として不用心である旨、表示されるからこれを正す。パスワードは /etc/munin/.my.cnf へ記載するよう手配する。

$ sudo vi /etc/munin/plugin-conf.d/munin-node
[mysql*]
user root
#env.mysqlopts -uguro -pavava
env.mysqlopts --defaults-file=/etc/munin/.my.cnf
env.mysqladmin /usr/local/mysql/bin/mysqladmin

[client]セクションにユーザとパスワードを書き付けてrootユーザ以外はもはや誰も閲覧できないようパーミッションも併せて設定する。

$ sudo vi /etc/munin/.my.cnf
[client]
user=guro
password=avava

$ sudo chmod 600 /etc/munin/.my.cnf

そうしたらプラグインが正常に動作するかどうか munin-run --debug で確かめる。mysql_queriesプラグインは内部でmysqladminを使用しているからテストに適しているとおもう。

$ sudo munin-run --debug mysql_queries
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
(snip)
# Environment mysqlopts = --defaults-file=/etc/munin/.my.cnf
# Environment mysqladmin = /usr/local/mysql/bin/mysqladmin
# Environment mysqluser = guro
# About to run '/etc/munin/plugins/mysql_queries'
delete.value 111
insert.value 729
replace.value 0
select.value 34614
update.value 3245

エラーメッセージは表示されず問題はなさそうであるからあとはmunin-nodeを再起動して終いである。

$ sudo /etc/init.d/munin-node restart
[ ok ] Restarting munin-node (via systemctl): munin-node.service.

グラフも恙無く描画され続けている模様である。

参考:
MySQL :: MySQL 8.0 Reference Manual :: 6.1.2.1 End-User Guidelines for Password Security

Muninのグラフの文字化けに対応

OS: Ubuntu Server 18.04 LTS
Munin 2.0.37

Muninサーバが生み出すグラフが文字化けして見た目がたいへん酷い。時刻の隣に四角で囲まれた4桁の数字が並ぶばかりで一体何なのかと思う。

6728や91D1といった数値は果たしてどういった意味を持つのかしらと思って調べると文字をUnicodeで表すときの符号位置(code point)が16進数で表示されている模様である。対応するフォントが見当たら無い為にこういう有様となるようである。

此れには打つ手が二つあり、一つは日本語での表示を諦めて英語表記にして茶を濁す方針である。その為には /etc/cron.d/munin の編集を余儀なくされる。/usr/bin/munin-cron を実行する前に LANG=C; を挿入してデフォルトのロケールで表示するよう設定するとよかった。今後のmuninパッケージの更新によって上書きされる恐れもあるから決して気を抜けない措置である。

$ sudo vi /etc/cron.d/munin
#*/5 * * * *     munin if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi
*/5 * * * *     munin if [ -x /usr/bin/munin-cron ]; then LANG=C; /usr/bin/munin-cron; fi

もう一方は日本語にも対応できるフォントを導入する方策である。Googleが開発を進めていると言われるNoto(No more tofu)というフォントに注目してみると、此れは良さそうである。fonts-notoパッケージをインストールするだけで終いであるから気軽であるし豆腐が名称の由来というのも健康的で大変よろこばしいとおもう。

Tofu (豆腐) is Japanese jargon for unicode replacement character “?”
(U+FFFD) often displayed as replacement for unassigned or unknown
characters.

ストレージの容量がシビアな環境なら日中韓の文字をカバーしているfonts-noto-cjkパッケージだけでも事足りるようである。

$ sudo apt install fonts-noto
(snip)
以下のパッケージが新たにインストールされます:
  fonts-noto fonts-noto-cjk fonts-noto-hinted fonts-noto-mono fonts-noto-unhinted

あとはグラフが更新されるのを待つか手動で更新すると文字化けが解消している。

参考:
誰でも使えるオープンソース フォント システム
Google Noto Fonts
Unicode一覧表

Muninのsensor_プラグインでグラフに表示したくない項目を設定

OS: Ubuntu Server 18.04.1 LTS
munin-node 2.0.37

sensorsコマンドの出力結果から得られるファンの回転数をMuninのsensor_プラグインでグラフ化しているけれども、常に0回転しか示さない幻か幽霊みたようなfan1とfan2の結果も併せてひらってしまうから此れをグラフに現れないようにしたいものである。

$ sensors
(snip)
fan1:           0 RPM  (min =   10 RPM)  ALARM
fan2:           0 RPM  (min =   18 RPM)  ALARM
fan3:        1457 RPM  (min =   10 RPM)

sensors_プラグインの説明によるとこういう具合である。

[sensors_*]
env.sensors – Override default sensors program path
env.ignore_temp<n> – Temperature <n> will not be plotted
env.ignore_fan<n> – Fan <n> will not be plotted

env.ignore_fanに表示したくないファンの番号をくっつけてやれば良いように見えるからプラグインの設定ファイルをそのように編集する。

# vi /etc/munin/plugin-conf.d/munin-node
[sensors_*]
env.ignore_fan1
env.ignore_fan2

そうしてmunin-nodeを再起動するとログがこの有様であった。

$ less /var/log/munin/munin-node.log
Line is not well formed (env.ignore_fan1) at /usr/share/perl5/Munin/Node/Service.pm line 110.

どうにも設定が適切でない様子である。説明どおりに記述したのに変梃りんな話である。エラーメッセージを手掛かりに /usr/share/perl5/Munin/Node/Config.pm のサブルーチン _parse_line_parse_plugin_line を眺めたり、改めてmunin-nodeの設定ファイルを確認してみると、設定項目とその値がセットになって記述されていなければならないようである。

# less /etc/munin/plugin-conf.d/munin-node
(snip)
# env.<variable> <value> # Sets <variable> in the plugin's environment, see the
#                       individual plugins to find out which variables they
#                       care about.

値<value>についての指定がないので果たしてこれでよいのか悩んだけれどもひとまず適当な文字列を奔放に放り込んだ。

[sensors_*]
env.ignore_fan1 guro
env.ignore_fan2 guro

munin-nodeを再起動したあと様子をうかがうと恙無く受諾されているようである。

けれども長い時を経て後、この設定を見つけたときに一体どういう意図か必ずや困惑するし何より格好が悪いのでyesやtrueなどの洒落た横文字で飾るのがぜったいによいと思う。

[sensors_*]
env.ignore_fan1 yes
env.ignore_fan2 yes

参考:
Munin Dokumentation

Ubuntu Server 18.04.1 LTSでaptによるmunin-nodeのインストールを敢行する

OS: Ubuntu Server 18.04.1 LTS

Ubuntu Server 18.04.1 LTSをクリーンインストールしたあと続けざまにaptコマンドでmunin-nodeのインストールを試みたところこうである。

$ apt search munin-node
ソート中... 完了
全文検索... 完了

見当たらない様子であった。馬鹿なと思ってsources.listを見るとmainのリポジトリのみである。

$ cat /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu bionic main
deb http://archive.ubuntu.com/ubuntu bionic-security main
deb http://archive.ubuntu.com/ubuntu bionic-updates main

munin-nodeのリポジトリはuniverseということであるから此れを追加する必要がある。

$ apt show munin-node
Package: munin-node
Version: 2.0.37-1ubuntu0.1
Priority: optional
Section: universe/net

直接編集するかsedで置換するなどしてuniverseリポジトリを加えてやると宜しい。sedで置換するなら sudo sed -i'.orig' 's/main/main universe/g' /etc/apt/sources.list としてsources.list.origにバックアップを取りながら併せて内容を置換するワンライナーが簡便で良さそうな情勢である。

$ cat /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu bionic main universe
deb http://archive.ubuntu.com/ubuntu bionic-security main universe
deb http://archive.ubuntu.com/ubuntu bionic-updates main universe

これで無事、aptコマンドからmunin-nodeをインストールすることができた。

$ apt search munin-node
(snip)
munin-node/bionic-updates,now 2.0.37-1ubuntu0.1 all
  network-wide graphing framework (node)

参考:
行っとけ! Ubuntu道場! ― 第3回 ~師範! Ubuntuインストールしようと思います!~