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のデバッグというと、FirefoxのFireBugが真っ先に挙がると思います。
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のデバッグをするには十分な機能を持っています。
というか、これがないとIEでJavaScriptをデバッグするのに苦労します……。
インストールは
コントロールパネル→プログラムの追加と削除→Office〜のところで「変更」ボタンを押す
↓
「機能の追加/削除」選んで次へ
↓
「アプリケーションごとにオプションを指定してインストール」にチェックを付けて次へ
↓
「Office ツール」の中の「HTML ソース編集」で「マイコンピュータからすべて実行」を選択して「更新」
↓
インストールが完了したら「インターネットオプション」を開く
↓
詳細設定タブの「スクリプトのデバッグを使用しない」を両方外す。
↓
利用したいページに来たらメニューバーの
表示→スクリプトデバッガ→開く
↓
デバッガの選択では「新しいインスタンス Microsoft Script Editor」を選んで「はい」
↓
次にウィンドウが開くが気にせず「OK」ボタンを押す
これで利用可能です。
Visual Studioに慣れた人は大体わかるかもしれないですが、そうでない方には少しきついかもしれません。
というのも、デフォルトでは変数確認できるウィンドウが出ていないと思います。
メニューバーのデバッグ→ウィンドウ→ローカルを出しておけばローカルスコープの変数が表示されます。
イミディエイトウィンドウがFireBugでいうコンソールのようなものですが、まだ今ひとつ使い方がわからずにいます……。
色々個別にコマンドを実行できたりするようですが……。
イミディエイトウィンドウはメニューバーからデバッグ→ウィンドウ→イミディエイトで開くことができます。
スクリプトデバッガはもう少し活用できるようにならないといけないなぁと思いつつ、IEのJavaScriptデバッグツールの紹介でした。
今日の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
- 直前のデータの上に積み重ねる形で描画します。グラフの種別は直前のグラフと同じ種別になります。
今日の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<折り返し |
- 左へカーソル移動
- h
- 右へカーソル移動
- l
- 下へカーソル移動(改行単位)
- j
- 上へカーソル移動(改行単位)
- k
挿入モード中の操作
いずれも挿入モード時の操作になります。- 次の入力を標準モードでのコマンド入力とする
- <Ctrl>+o
- 編集中ファイル内の単語で入力補完(カーソル位置から前方へ単語検索)
- <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となっています。
なお、文字コードや改行コードの変更を行うと表面上は変化がありませんが、実データは変化しているのでファイルの保存を忘れないようにしてください。