muninまわりの話

もう動かし始めて1年ぐらい経つのだけど、最近また構成を変えたのでリソース監視システムmuninの話を備忘録代わりに記録しておく。 muninはperlで書かれた監視システム debianではmuninという中央の集計システムと、監視対象側で動くmunin-nodeというパッケージに別れている。この2者はtcp/4949ポートで独自のテキストプロトコルで通信する。

munin

muninはcronから5分に一回起動し、データ収集とrrdへの反映(munin-update)、監視閾値の適用(munin-limit)、htmlの生成(munin-html)、グラフの生成(munin-graph)をやる。私の設定では後半2つはcronからは実行しない。 設定ファイルは /etc/munin/munin.conf にまとまっている。各種ファイルのあるディレクトリやrrdの出力先などはそのままで、以下の3行のみ追記した。

graph_strategy cgi
cgiurl_graph /cgi-bin/munin-cgi-graph
html_strategy cgi

意味としては、htmlとグラフの生成をcronからの実行時には行なわないという事と、htmlに表示するグラフのパスを変更するもの。

nginx

htmlの表示にはnginxを使った。標準のvhostの設定に以下を追記する。

        location /munin/static/ {
                alias /etc/munin/static/;
        }

        location /munin/ {
                fastcgi_split_path_info ^(/munin)(.*);
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_pass unix:/var/run/munin/fcgi-html.sock;
                include fastcgi_params;
        }
        location ^~ /cgi-bin/munin-cgi-graph/ {
                fastcgi_split_path_info ^(/cgi-bin/munin-cgi-graph)(.*);
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
                include fastcgi_params;
        }

それぞれ、htmlから参照する静的なcssやロゴなどを/etc/munin/static以下を参照させるもの。2つめのブロックは/munin/以下のパスについてmunin-cgi-htmlへと渡すための設定。cgiとの間はunix domain socket経由のfcgi プロトコルで行なう。最後のブロックがグラフの画像生成をmunin-cgi-graphへ行なわせるためのもの。/cgi-bin/munin-cgi-graph以下へのアクセスをfcgiに投げる。 この設定ではもちろん、cgi自体はnginxとは独立して上げる必要があるので以下のような内容をシェルスクリプトなどに記述して実行する。

sudo spawn-fcgi -s /var/run/munin/fcgi-graph.sock -U www-data -u www-data -g www-data -F 1 /usr/lib/munin/cgi/munin-cgi-graph
sudo spawn-fcgi -s /var/run/munin/fcgi-html.sock -U www-data -u www-data -g munin -F 1 /usr/lib/munin/cgi/munin-cgi-html
start-fcgi

いずれもプロセスはひとつだけしか上げていないが、マルチプロセッサなどで余裕がある場合は複数上げることも可能です。

munin-node

主な設定は /etc/munin/muni-node.conf だが、これ自体はアクセス制限やタイムアウトプラグインのパターンぐらいしか書くことはない。 デーモンとして動作するので、設定変更は都度上げ直す必要があります。

munin-plugins

パッケージ名としてはmunin-plugins-coreやmunin-plugins-extra、munin-plugins-cなど どのpluginを使うかは/etc/munin/plugins/以下にシンボリックリンクを張ることで、有効にできる。pluginの中身はシェルスクリプトだったりするので見ればわかるが、configという引数で実行されたらどのようなグラフとして描画されたいかを答えたり、通常の結果は

user.value 558034
nice.value 394002
system.value 162008
idle.value 6494120
iowait.value 33914
irq.value 2
softirq.value 7757
steal.value 0
guest.value 0

みたいなラベルと数値のスペース区切りを行指向で返すだけでよい。 パッケージを入れるだけで多くのプラグインが自動的に配置されているが、追加でシンボリックリンクを張ることで項目を増やすこともできる。 シンボリックリンクの名前で監視対象を表現することもできる。例えばif_というプラグインをif_eth0とするとeth0についての監視項目となる。 シンボリックリンクの名前だけでは与えられない設定については/etc/munin/plugin-conf.d/munin-node.confに記述する。例えば監視対象がデータベースであったとき接続ユーザとパスワードが必要になるがそういう情報はここに記載する。[]をラベルとして実行ユーザやプラグインに渡す環境変数を書く。パスワードなどを書く関係上、rootとmuninグループでしか読めないようになっている。

munin-node-c

pluginがシェルスクリプトperlで書けのは楽だけど、単純な処理一つでも結構なCPU時間を食う。これは非力なnodeは辛い。 perlのlwpで書かれていたのをfurlに書き変えたりgolangにしたりチマチマ直していたのだが、munin-nodeと主要なpluginをCで再実装された方が居た。 もちろん完全互換ではないが、munin-nodeが何をやっているかはこちらの実装を読んだ方が速いかもしれない。

Google Compute Engine本読んだ

Google Compute Engine入門 (アスキー書籍)

Google Compute Engine入門 (アスキー書籍)

現時点では恐らく唯一のGCPに関する日本語書籍。 内容の多くの部分がgcloudのコマンドの説明に費やされていたりするが、AWSとの対比はやや有益かもしれない。

しかし本を買ってまで読むほどかと言われたら、かなり疑問な内容だった。

Android Wearを買ったけど、まだ今ひとつだった

買ったのはLGのG Watch。買って10日ほどしか経過したが、今のところ微妙だという感想。

普段使いのスマートフォンはNexus5とiPhone5sで、もちろん前者と組み合わせて使っている。割と何でもGoogleに預けてしまう生活をしているので、比較的いいユーザーだと思う。

現状において、この端末は結局何であるのかと言ったら「Google Cardの出先」

Google Cardを便利と感じるなら、それなりに使い物になると思う。しかし、個人的にはGoogle Card自体も情報量がやや不足していると思うし、スマートフォン本体であればそのままブラウザを起動して情報の本体が乗っているウェブにアクセスできたりするが、Wearではそれができない。あくまで提供されるのがとっかかりでしかないので単体で閉じないため不便である。

当初期待していたのは、自転車に乗っている時のナビや周辺地図を見るという用途。しかし、実際に使ってみるとナビは本体での表示よりも情報が不足しているし、連携もなんだかおかしい。音声コマンドでナビをリクエストすると本体で検索は始まるが、実際にWear側に表示されるまでにひどくタイムラグがある。通信帯域が狭いのか、消費電力を抑えるために間欠的にしか同期をしないようになっているのか、わざわざ音声コマンドで入力するぐらいなのですぐにほしい情報が表示されないというのはかなり不満。

現在のメニュー構造はGoogl CardをUIの中心にしようとしている意図が強くあるようで、アプリの起動はかなり深い場所にあって使いにくい。これはサードパーティのランチャーで代替できるのだけど、そもそもアプリがまだまだどういった作りにすればいいかというノウハウが不足している感じが強い。物理的に小さいので文字入力は基本的に無理で、上下左右のスワイプを主要な操作方法としているのだけど、これだけで操作を完結するには知見がもう少し溜まっていく必要を感じる。

今のところ、Androidの通知が飛んでくるだけのゴツイ時計として使っている。

ロブ・パイクによるプログラミングの5つのルール

出典 http://users.ece.utexas.edu/~adnan/pike.html

  • ルール1 プログラムのどこで時間を使うようになるかを事前に知ることはできない。 ボトルネックは意外な場所に発生するので、どこにボトルネックがあるかを証明するまで、とやかく言ったり速度にハックしないように

  • ルール2 測定せよ。 測定し終えるまで速度のチューニングをしないこと、さらにコードの一部が他の部分よりも圧倒的であるときを除いて。

  • ルール3 凝ったなアルゴリズムはnが小さいときは遅い、そして大抵の場合でnは小さい。凝ったアルゴリズムは大きな定数を持つ。頻繁にnが大きくなると分るまでは、凝ったことをしないこと。(そしてnが大きくなる場合でもルール2をまず適用すること)

  • ルール4 凝ったアルゴリズムは単純なものよりバグが入りがち、そして実装難易度が高い。 単純なアルゴリズムだけでなく単純なデータ構造を使うこと。

  • ルール5 データが最も重要である。 正しいデータ構造と編成を選択すれば、アルゴリズムは自明のものとなります。アルゴリズムではなく、データ構造こそがプログラミングの中心です。

パイクのルール1と2はトニー・ホーアの有名な格言「早まった最適化は諸悪の根源である」の言い換え。ケン・トンプソンの「疑わしい場合は力技でいけ」はパイクのルール3と4の言い換え。 ルール3、4はデザイン哲学KISSの例。ルール5は以前フレッド・ブルックスが「人月の神話」で述べた。 ルール5はよく「スマートオブジェクトを使う愚かなコードを書く」と略される。


ロブ・パイクって誰やねん、という人はWikipediaの彼のページをどうぞ。最近だとgolangを作った人です。

UNIXプログラミング環境 (海外ブックス)

UNIXプログラミング環境 (海外ブックス)

プログラミング作法

プログラミング作法

最近買ったものとか

Amazon BasicsのBluetoothスピーカー。こんな物までBasicsで提供されるとはという感じだ、コモディティになるにはスペックの標準化が足りない気がする。 全世界共通であろうパッケージと配送用の梱包が一体だったり、マニュアルが多言語でかなり簡素な内容だったりするのは好感が持てる。

前面と背面が対称性が高いデザインだったのでしばらくは反対にして使ってしまっており、なんかおかしいなーとおもったら後ろ向きだったという。音質はさほど良いとは思わないけど、こういう機器に求められるのは音質でないのでとりあえずは問題ない。起動時に結構な音量でビープ音がなるところなどは割と無神経な作りだと思った。

AndroidiPhoneのどちらからもペアリング可能だけど、後者の方が安定して動作するし心無しか音質も良いように感じた。

SONY ワイヤレスステレオヘッドセット MDR-AS700BT/L ブルー

SONY ワイヤレスステレオヘッドセット MDR-AS700BT/L ブルー

これの前に使っていたBluetoothヘッドフォンがボロボロになってきたので購入。しかし、かなり失敗 だった。装着感とかNFCでのペアリングはよいのだけど、音質がありえない水準だった。

あまり音質とかうるさくない方だと自認しているのだけど、これはちょっと耐えられなかった。防水性のためにイヤーパッドの素材が特殊なのだろうか。こもった音でとても使う気にならない代物だった。

1万円を切る破格の値段につられて購入。値段の割には使い物になると思った。

スペック通りの解像度はそれなりに見られる画質だけど、発色はややおかしい。リモコンが付属していて、便利なのだけど本体の裏側に受光部があるのが辛い。これもスペック通りだけど、安いなりでかなり暗い。部屋を完全に暗くしないと実用にはならないと思った。

これに限らないがプロジェクタは普通の家庭で動かすと冷却ファンの音がうるさいですね。オフィスとかで使っているときには気にならないですけど。

PS3につないで長辺が1.5mぐらいの大きさに投影して使っている。

【国内正規品】AKG 密閉型オンイヤーヘッドホン ブラック Q460BLK

【国内正規品】AKG 密閉型オンイヤーヘッドホン ブラック Q460BLK

スマホ対応のリモコン付きヘッドフォンが欲しくて購入。ケーブル交換可能なタイプだし、リモコンも期待通り使えるし、音質もまあまあ良い。

Zaimという家計簿アプリを使って1年ぐらいになるけどわりと良い

前提

  • 私はZaimの利害関係者じゃないです
  • 記録回数1200回ちょっと、記録日数1年弱の時点での感想です
  • 他の家計簿アプリを使ったことがないので比較はできません
  • 利用環境はAndroidiOSを併用

感想

という前提で、ここ1年ぐらい使ってきたけど三日坊主になると思っていたが割とマメにつけている。最近はオンラインバンキングやクレジットカードの利用情報をウェブ経由で同期する機能も実装されたので、私個人のお金の出入りはほぼ95%以上の精度で捕捉できていると思う。 家計簿自体は学生の頃から付けなきゃなーと思っていたが、紙で記録するのはもちろんPCに記入するのも習慣づけるのが難しいだろと思っていたけど、スマートフォンで記入するアプリになってからは、お金を使った直後にちゃちゃっと記録するようになった。自分が実際にどれ位の出費を毎月しているのか、エンゲル係数がどれぐらいで推移しているのかを把握出来て非常に良い。

アプリの出来は、必要な機能を利用するのに戸惑いを感じることなく素直に使って目的の機能が利用できるという点でよく出来ている。よくクラッシュするとか遅いとかそういう機能以前の問題は全くない。シンプルに使えすぎて拍子抜けするほど。 この種のアプリは日々の利用記録をいかに迅速につけられるかが使い勝手を決めると思うけど、アプリ起動からカテゴリ選択、金額入力、決定と慣れれば数秒で終わるので続けることが出来た。

最近は上記の通りウェブバンクなどの情報を自動的に取得する機能が実装された。ウェブバンクなどではログイン用のID・パスワードと決済時に確認される乱数表の2段階踏むところがあるが、情報を取ってくるだけなので前者を登録するだけで良い。私は銀行の情報同期の必要を感じなかったのでそちらは利用しておらず、クレジットカードの利用明細を同期対象にしている。前月の利用明細が発行されたあとのタイミングで同期処理がされて、先月分の出金記録に追記される感じだ。

現状不満があるとすれば、Suicaとの連携ができない点か。Android端末ならNFCSuicaのデータを読み込めるので、適当なタイミングで読ませると出金記録に追記してくれると便利だと思った。私の場合はSuicaオートチャージで使っているのでクレジットカードの利用履歴からオートチャージを捕捉されているので、それで帳尻は合ってはいる。Suicaの内容を読み込めるようになると、逆にオートチャージ分を消す必要が出てくるかもしれない。

Apple StoreでCMのようにスムーズに買い物してきた

久しぶりにApple Storeの店頭で買い物をしたのだけど、非常に気持ち良く買えたので改めてAppleの恐しさを実感した。

きっかけはMacbook Airをリプレースしたこと。Core2のモデルからHaswellなのでかなり大幅に代替わりするのだけど、この際自宅と出先に配備していたACアダプタが問題になる。どちらもMagsafeではあるが、後者はMagsafe2という新型のコネクタ形状になった。

変換アダプタが1000円ほどで販売されているのだけど、Amazonで売っているのはどうにも怪しい、勝手に再販業者が薄利を乗せて転売しているようなのだ。値段はともかく出自が怪しいのはちょっと嫌。

ということでApple Storeの店頭で買ってみた。どうせならまともになってきたiPhoneのマップアプリで場所を検索して、と。ロケーション情報に付随してApple Storeの公式アプリをお薦めされる。これを入れておくと商品検索と決済もできるようだ。店までの道中ポチポチやって必要な商品を検索しておく。決済はApple IDとそこに登録してあるクレジットカードで行なうようだ。

いざ店頭についてMacなどの高額商品を展示してある一階をスルーして二階へ。平日の午前中なのに結構な盛況っぷり、二階は特に混雑している。壁際の小物の展示の中から必要なアイテムを探す。必要な品は純正品のオプションパーツのコーナーに並んでいた。

Apple Storeにはそもそも固定のレジカウンターが無く、決済を頼むと展示用の机の一角に仕込んであるのだけど、iPhoneアプリの決済機能はそれすらいらず商品の裏のバーコードをスキャンしてApp Storeでアプリを買うときのように認証を行なうだけ。商品が高額になる場合があるためか、クレジットカードのセキュリティコードを求められた。

Storeのアプリでの決済は初めてだったので手間取っていると美人のスタッフが助けてくれた。商品の注意点などをやりとりしつつ決済完了。袋が欲しいときはスタッフに頼んでという表示が出たが不要だったのでそのまま持ち帰る。 取り扱っている商品がAppleとその関連製品だけというのもあるが、どのスタッフを掴まえても商品に関する知識が豊富で凄い。

店頭でアプリによるセルフ決済というのは初めてだったのだけど、本来であればスタッフの手を全く使わずに買うことができるので何か変な感じ。日本ではセルフレジがほとんど普及していないので経験が少ないだけかもしれないが、万引でもしている感覚