Perl で Ping 監視

第1引数のIPアドレスにPingを5回実行して、全てNGだったらSlackにPostし、さらに任意の宛先にメールを送信するPerlスクリプト。メールは日本語に対応。ちなみに、Ping実行時にRTTを取得といてMRTGでグラフ化して満足する。状況に応じて監視対象除外を設定することも想定。 Ping監視対象IPを記述したファイル /etc/mrtg/all-address.csv(カンマ区切りで IP,名称\n(改行) という形式で対象IPの数だけ複数行に渡って記述) Ping監視除外IPを記述したファイル /etc/mrtg/exception-address.csv(上記と同じ形式) スクリプト内容

要素の個数を出力するperlスクリプト

このスクリプトが可能にすること カンマ区切りの数字が羅列されたファイルを読み込んで、カンマで区切られた要素数を合計して出力に表示する。その際、重複した要素はいくつ重複していても1個としてカウントする。 使い方 第1引数にカンマ区切りの数字が羅列されたファイル名を入力して実行する。 スクリプト内容 スクリプトの説明 1行目:シェバン。警告スイッチを一応つける。 2行目: コマンドライン引数の1個目のファイルを読み込み 3行目: 1行取り出してデフォルトスカラ変数に代入 4行目: ファイルハンドラクローズ 5行目: デフォルトスカラ変数の改行コード除外 6行目: デフォルトスカラ変数$_をカンマ区切りで分割してできた配列のそれぞれの要素に対してmaoで処理を実行。処理内容は配列の要素をキーに、値を1にしたハッシュを生成して配列変数%uniqに代入するというもの。 7行目: %uniqのキーを取り出してできた配列を昇順で並び替えてデフォルト配列変数に代入 8行目:前作業でできた配列の最後の要素を「$#_」でとりだして1加算したものを$numに代入 実行結果 対象の要素が文字列の場合は数値ソートでエラー吐くけど要素数を知るという目的だけは達成できた。エラーが恥ずかしいのでもう少し改良の余地はあると思う。

dig要求と応答を抽出するperlスクリプト

スクリプトを作った経緯 作業フォルダ内にdigコマンドの結果を出力したテキストファイル(拡張子log)がたくさんある状況で、それぞれのファイル内のdigクエリとレスポンスを(必要な文字列だけを抜き取って)一つのテキストファイルにまとめたかった。 抽出する文字列 以下のようなパターンの行を抽出してresult.txtに書き出す。 [root@root ~]# dig @localhost yahoo.com;; QUESTION SECTION:(クエリパターン);; ANSWER SECTION:(dig結果) スクリプト内容 内容はまぁまぁ雑なので、もっと簡略化できると思う。

perlで文字列の置換

単行の置換 複数行の置換 複数行の場合「-0」オプションを使い、オプション修飾子に「m」をつけて実行すれば良い。 オプションの説明 -p -eで受け取る引数を1行ずつ評価する。 -0 セパレータがヌル文字(\0)になり、ファイル全体を一気に読み込む。ファイル全体を1行をみなすようなもの。サイズが大きいファイルに対してはこのオプションをつけない方が良い。 //m 複数処理モード。パターンマッチしたもの全てを置換対象にする。 オプションの説明

perl 配列に改行を付与して出力

perlで配列変数のそれぞれの要素をprintで出力する際にそれぞれの配列要素を改行区切りで表示させる方法(2通り)。 他にもあると思うけど、今のところjoin関数を使うとシンプルで(・∀・)イイ!!。

perlアップデート

CentOSのperlのバージョンが古かったのでUpdateした。 公式から最新perlをcurlやwgetで入手する。 ダウンドードしたら解凍してビルドしてコンパイルする。以下はバージョン5.18.1の例。 インストール先を指定する場合は以下。 指定しない場合はおそらく「/usr/local/bin/perl」になる。 最後にperlのバージョンを確認する。

perlのcpanでLWPをインストール

perlのモジュールでwwwアクセスのために便利に使えるLWPがある。こちらをインストールする手順。 CPANをインストール(CentOS) CPAN で LWPをインストール LWPのバージョン確認

差分取得

NW機器に設定変更を施す際、作業前と後のコンフィグ差分を取得する必要があり、対象機器が大量になるとすこぶる面倒くさい。なので、その作業を簡略化するperlを書いてみた。といっても複雑なことをしているわけではなく、Windowsのコマプロで実行する差分取得ファイルの引数をperlで指定して実行するだけだったりする。