Muninプラグインを作る その2

暑さでなかなか寝付けず、睡眠不足気味なyukiinu2ndです。
間が空いてしまいましたが、前回のMuninのプラグインを作るの続きになります。
実際に作ったプラグインと、プラグインの登録&削除について紹介します。
※投稿が遅くなって申し訳ありませんでした……。

プラグインサンプル


今回作成したものは「Apacheのプロセス数を調べる」プラグインです。
実は、「apache_processes」というMuninプラグインが既に存在するのですが、mod_statusというモジュールを使う必要があるようです。
そのため、Apacheのmod_statusとapache_processesプラグインを使わずに、シェルスクリプトでpgrepというプロセスを検索するコマンドを使い、カウントする方法にしました。
以下、ソースです。

#!/bin/sh

APACHEUSER="apache"

if [ "$1" = "autoconf" ]; then
        if [ -x /usr/bin/pgrep ]; then
                echo yes
                exit 0
        else
                echo no
                exit 1
        fi
fi

if [ "$1" = "config" ]; then

        PROCESSESWARNING=20

        echo 'graph_title Apache Processes'
        echo "graph_args -l 0"
        echo 'graph_vlabel process'
        echo 'graph_info This graph shows Apache Process Count'
        echo 'graph_category Processes'

        echo 'approc.label Apache Process'
        echo 'approc.draw LINE2'
        echo "approc.warning $PROCESSESWARNING"
        echo "approc.info Apache Processes Count"


        exit 0
fi

        echo -n "approc.value "
        pgrep -u $APACHEUSER | wc -l

プロセスのカウント方法ですが、「pgrep -u $APACHEUSER」でApacheユーザのプロセスを出力し、出力を「wc -l」に渡すことで行数を数えています。


設定系の変数ですが、下記の通りです。

APACHEUSER
Apacheプロセスのユーザを指定します。これはApacheの導入方法によって異なるので、環境に合わせて変更します。
PROCESSESWARNING
プロセス数がこの値以上になるとMunin上でWarning表示を出します。


グラフの種類は「approc.draw LINE2」を設定することで線グラフにしています。
また、「graph_args -l 0」を設定することで下限値を0にしています。

プラグインの登録と削除

まず、プラグインの実体は「/usr/share/munin/plugins/」以下に存在します。
Muninで使用する・しないに関わらずここには全プラグインを入れておきます。


登録は「/etc/munin/plugins/」以下にシンボリックリンクを置き、削除は作成したシンボリックリンクを消すことで可能となっています。
先程作ったApacheプロセスを数えるプラグイン(ここではapache_proc_countとする)を登録する場合、

# cp /home/yukiinu2nd/apache_proc_count /usr/share/munin/plugins/
# ln -s /usr/share/munin/plugins/apache_proc_count /etc/munin/plugins/apache_proc_count
# service munin-node restart

となります。
登録後にmunin-nodeというMuninがデータを収集しているデーモンがあるのですが、再起動する必要があるようです。(もしかしたら不要かもしれません……。)


逆に削除は

# rm /etc/munin/plugins/apache_proc_count

としてシンボリックリンクを消すことではずすことができます。

今日のVim

今回はセッションです。
開いているファイルや設定等を記録し、必要な時に呼び出すことで作業環境を維持することができます。

セッション

セッションの保存
:mks <セッションファイル名>

現在の作業状態を保存します。
ファイル名がなかった場合はカレントディレクトリにSession.vimという名前で作られます。
また、「:mks! <ファイル名>」とすることで既にファイルがある場合でもエラーとせず、強制的に上書きします。

セッションの展開
:so <セッションファイル名>

現在開いているVimに作業状態を展開します。
また、コマンドラインからでもセッションの展開は可能で、

vim -S <セッションファイル名>

で同様のことができます。




……何でも、セッションとは別にビュー(View)というのも存在するようです。
使ったことがないのでどのようなものかはわかりませんが、Vimネタに困ったら使ったりしてみようと思います。

IEでJavaScriptのデバッグ

書き途中の原稿を引っ張り出したところ、なぜか原稿が巻き戻っていて少しへこんでいたyukiinu2ndです。
へこんでばかりいられないので、新ネタで書きます。

JavaScriptデバッグというと、FirefoxFireBugが真っ先に挙がると思います。
FireBugはそれくらい便利です。これがないと自分は仕事の効率が相当下がってしまいます。
ところが、IEはそういったデバッグツールがあまりありません。ただ、0ではないのでそのツールを紹介したいと思います。

IE Developer Toolbar

DOMインスペクタ+α程度の機能を持っています。Microsoft公式ツールです。
ドメインCookie削除ができたりCookieの確認ができるのでそこは意外と便利。
スタイルをその場で変更することもできるようです。*1
ただ、JavaScriptデバッグという点ではあまり有用ではないかも。


インストール方法は
http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en
からインストーラーをダウンロードし、インストールしたらIEを再起動すれば使えるようになります。
起動するには<>の中にマウスカーソルな矢印があるアイコンをクリックすると画面下部に開かれます。
IE7の場合はメニューのツールの右にあるシェブロン(>>)をクリックするとあるはずです。

スクリプトデバッガ

OfficeについているVisual StudioのようなUIを持つデバッガです。
FireBugに比べると起動や動作が重い気がするのと、Visual Studioに慣れていない人はUIが気になるかもしれません。
しかし、JavaScriptのステップ実行や変数の確認等、JavaScriptデバッグをするには十分な機能を持っています。
というか、これがないとIEJavaScriptデバッグするのに苦労します……。


インストールは
コントロールパネル→プログラムの追加と削除→Office〜のところで「変更」ボタンを押す

「機能の追加/削除」選んで次へ

「アプリケーションごとにオプションを指定してインストール」にチェックを付けて次へ

「Office ツール」の中の「HTML ソース編集」で「マイコンピュータからすべて実行」を選択して「更新」

インストールが完了したら「インターネットオプション」を開く

詳細設定タブの「スクリプトデバッグを使用しない」を両方外す。

利用したいページに来たらメニューバーの
表示→スクリプトデバッガ→開く

デバッガの選択では「新しいインスタンス Microsoft Script Editor」を選んで「はい」

次にウィンドウが開くが気にせず「OK」ボタンを押す


これで利用可能です。
Visual Studioに慣れた人は大体わかるかもしれないですが、そうでない方には少しきついかもしれません。
というのも、デフォルトでは変数確認できるウィンドウが出ていないと思います。
メニューバーのデバッグ→ウィンドウ→ローカルを出しておけばローカルスコープの変数が表示されます。
イミディエイトウィンドウがFireBugでいうコンソールのようなものですが、まだ今ひとつ使い方がわからずにいます……。
色々個別にコマンドを実行できたりするようですが……。
イミディエイトウィンドウはメニューバーからデバッグ→ウィンドウ→イミディエイトで開くことができます。


スクリプトデバッガはもう少し活用できるようにならないといけないなぁと思いつつ、IEJavaScriptデバッグツールの紹介でした。

*1:要素を選択後、Attributeにある+ボタンを押し、nameに〜(css)と付いている物を選択すればよいみたいです。

今日のVim

今回は画面分割です。
ソースのある部分を見ながら編集作業をすることができます。

画面分割

画面を上下に分割する
:sp
画面を左右に分割する
:vsp

このコマンドで画面を上下、または左右に分割できます。
現在カーソルのある画面を分割することができるので、やろうと思えば上下で分割し、下の画面はさらに左右で分割する、ということも可能です。

画面を閉じる
:clo

現在カーソルがある画面を閉じます。

画面間を順番に移動
<Ctrl>+ww

カーソルを画面の順番に移動します。
最後まで行くと始めに戻ります。

現在画面から上に移動
<Ctrl>+wk
現在画面から下に移動
<Ctrl>+wj
現在画面から左に移動
<Ctrl>+wh
現在画面から右に移動
<Ctrl>+wl

カーソルを現在の画面から上下左右の画面に移動します。
hjklの代わりにカーソルキーでも構いません。

現在画面を広げる
<Ctrl>+w+
現在画面を狭める
<Ctrl>+w-

現在カーソルがある画面を広げたり狭めたりします。
数値を入力してから上記コマンドを実行すれば数値分拡縮できます。
※上記コマンド表現だとわかりにくいですが、<Ctrl>+wのあとに+か-を押すという意味です。

Muninプラグインを作る

今日はエイプリルフールでしたが、仕様変更の話は嘘ではなくて修正作業をしていたyukiinu2ndです。
今回はMuninのプラグインを作ってみたので簡単に紹介したいと思います。
まず、Muninとは何かですが、CPU使用率・メモリ使用量などなど、マシンの状態を簡単にグラフ化してくれるソフトです。
プラグインで拡張することができるため、やろうと思えば何でもグラフ化することができます。


なお、今回Muninのインストール、プラグインの追加と削除等については省略します。
また、まだ動く物が完成していないため、ソース等は完成した段階で公開します。ごめんなさい。

プラグイン

プラグインは思った以上にシンプルで、引数に応じて標準出力へテキストで値を返す、これだけです。
そのため、標準出力へ出力ができ、実行できさえすればBashでもPerlでもOKです。

引数は

  • autoconf
  • config
  • なし

の3種類となっています。

autoconf

プラグインがデータを作成するために必要なモジュールが揃っているかを確認し、「yes」か「no」のみを返し、終了します。

config

グラフ描画に必要な設定情報(ラベルやグラフの形)を出力します。
色々設定があるのですが、ここでは必要最低限だけ紹介します。
以下はグラフ全体の設定です。以下の項目名に続いてスペース一つ入れた後に値を記述します。

graph_title
グラフのタイトルを設定します
graph_args
グラフのパラメータを追加します。rrdtoolのgraphコマンドと同じ引数が使えるようです。
graph_vlabel
縦軸のラベルを設定します
graph_category
結果出力HTMLにてどのカテゴリに所属させるかを指定します
graph_info
グラフの説明を指定します


以下はグラフ項目(1つの折れ線や棒)毎の設定です。

項目名.設定名 値

のように標準出力を行ってください。下記リストは設定名のみ書いてあります。

label
項目名を設定します
draw
グラフ種別を選択します(種別は後述)
info
項目の説明を設定します
warning/critical
項目の値が設定した値を越えた場合ワーニング/クリティカルメッセージを出力します


グラフ種別については以下の通りです。

LINEn
指定したデータを線で描画します。nには1〜3の数字が入り、数値が大きいほど線が太くなります
AREA
指定したデータを面で描画(値と0の間を塗りつぶす)します。
STACK
直前のデータの上に積み重ねる形で描画します。グラフの種別は直前のグラフと同じ種別になります。
引数なしの場合

Muninへ渡すデータ(結果)を出力します。
形式は

項目名.value

で出力します。


流石にこれだけではわかりにくいので、次回は実例を出す予定です。……多分。

今日のVim

今回は技術ネタを書ききれなかった(まとめられませんでした……)ので今日のVimのみです。
それも、小ネタの集合体です。その代わり量が多め……のはず。
普段はあまり使わないかもしれないけれどもある場面では役に立つ機能、紹介し忘れた機能で便利そうなものをピックアップしてみました。

編集系

やり直し(リドゥ)
<Ctrl>+r もしくは :redo

何気に大事な操作を紹介していませんでした……。元に戻す「u」の逆に当たる操作です。

カーソル位置からカーソル移動後位置の範囲に対する切り取り/コピー
dもしくはyの後に<カーソル移動操作>

現在のカーソル位置から移動した範囲に対して切り取りやコピーを行えます。
例えば、現在位置から行末までをコピーしたければコピーの「y」の後に行末移動の「$」を合わせた「y$」コマンドになります。
カーソル移動操作であればどのようなものでも効くようです。文章の先頭「gg」や文章の末尾「G」も効きます。

カーソル上の1文字を次に入力した文字で置き換える
r

1文字だけ直したい時にわざわざ挿入モードにしたり置換処理をする必要がなくなります。

アルファベットの大文字/小文字を変換
~

アルファベットの大文字を小文字に、小文字を大文字に変換する操作です。
範囲選択と合わせて利用することもできます。範囲選択後に「~」を入力すればOKです。

カーソル上にある数値をインクリメント(+1する)
<Ctrl>+a
カーソル上にある数値をデクリメント(-1する)
<Ctrl>+x

地味に便利なのがこの操作。数値を増やすだけであれば挿入モードにする必要はありません。
ちなみに、マイナス記号を認識したり、頭に0があると8進数と見なされる点には注意です。

現在行のインデント
>>
現在行の逆インデント
<<

現在の行のインデントを操作します。
選択範囲も有効であり、選択範囲のインデントを操作することも可能です。

選択系

全選択
ggVG

全選択は見ての通り文章先頭移動→行単位選択→文章末尾移動の組み合わせになっているだけです。

直前に選択した領域を再選択する
gv

領域の再選択は同じ領域に繰り返し処理をしたい場合に便利かもしれません。

移動系

表示行単位で下に移動
g<↓>
表示行単位で上に移動
g<↑>

Vimの折り返し行に対するカーソル移動はあくまで改行単位の移動であるため、折り返した部分にカーソルを移動させようとしても飛び越えてしまいます。
以下の状態から上に移動させようとしても……

AAAAAAAA<折り返し
AAA
BB
こうなってしまいます。
AAAAAAA<折り返し
AAA ←この行に来てほしい! BBB
この挙動を見た目通りにカーソル移動させる操作です。
左へカーソル移動
h
右へカーソル移動
l
下へカーソル移動(改行単位)
j
上へカーソル移動(改行単位)
k
実は、標準モードであればカーソルキーでなくても上記操作でカーソル移動できます。 わざわざホームポジションから手を動かすことなく、カーソル移動ができるので便利です。*1

挿入モード中の操作

いずれも挿入モード時の操作になります。
次の入力を標準モードでのコマンド入力とする
<Ctrl>+o
挿入モード中にこの操作をすると1回分だけ標準モードになります。 ステータス領域を表示している場合、挿入モードを示す部分が「-- 挿入 --」から「-- (挿入) --」に変わることで確認できます。 あらかじめコピーした内容を挿入モード中に貼り付けたい、という場合いちいち挿入モードと標準モードを行き来する必要がないので便利です。
編集中ファイル内の単語で入力補完(カーソル位置から前方へ単語検索)
<Ctrl>+p
編集中ファイル内の単語で入力補完(カーソル位置から後方へ単語検索)
<Ctrl>+n
編集中のファイルから単語を探し、現在入力中の単語を補完するとても便利な操作です。 スクリプトの編集や作成にとても役に立ち、知っていると知らないでは大違いになる操作の一つです。 次回こそはちゃんと技術ネタを書きたいです……。

*1:と書きつつもyukiinu2ndはカーソルキーを使ってしまいます……

今日のVim

今回は文字コードや改行コードの変更・確認について取り上げてみます。

文字コード/改行コード

文字コード
:set fileencoding<=文字コード名>
改行コード
:set fileformat<=右記から一つ(dos,unix,mac)>
文字コード指定再読み込み
:e ++enc=<文字コード名>
改行コード指定再読み込み
:e ++ff=<改行コード名>

文字コードは「:set fileencoding」を実行することで確認できます。
変更を行うにはさらに「=utf-8」のようにイコールと文字コード名をつけてあげれば設定できます。
ちなみに、ShiftJISは「cp932」のようです。注意。

改行コードも文字コードの時と同様に「:set fileformat」を実行することで確認できます。
変更を行う際も「=unix」のようにイコールと改行コードを指定すれば設定できます。
改行コードに関してはunix,dos,macの3種類になっています。
それぞれ、\r,\r\n,\nとなっています。

なお、文字コードや改行コードの変更を行うと表面上は変化がありませんが、実データは変化しているのでファイルの保存を忘れないようにしてください。