前回、「while,endwhile」の制御コマンドを使用し、複数ホストの機器情報を自動で取得する事が出来るテラタームマクロをご紹介させていただきました。
⇒ Tera Termマクロ-機器情報を自動収集するMACRO
ここでは、接続先ホストの機器情報の取得では無く、ホスト上で記録されているログからある特定のキーワードのログを抜き出してくるマクロをご紹介したいと思います。
ホスト一覧ファイルから順番にホスト情報(IPアドレス等)を読み込み、各ホストへ自動接続を行います。接続が完了すると、接続ホスト上で指定のコマンドを実行し、そのコマンド実行結果をTeraTerm側のログファイルに記録します。
今回「grep err /var/log/massages」コマンドを実行しています。 このファイルは、最新のRedHat系OSで一般ユーザに読み込み権限が付与されていません。接続するユーザの読み込み権限が必要になりますのでご注意ください。
またここでは、マクロ側でログ取得を制御ています。「設定」メニューから「その他の設定」を選択し、「ログ」タブより「自動的にログ採取を開始する」のチェックを外してください。
その他の機能の特徴としては、以下のようになっています。
①接続するホスト情報はファイルから読み込み
②接続ユーザ/パスワードは固定で設定
③各機器のログを単一ファイルに保存
SSH自動ログ取得マクロ
;=========================================================== ; Filename : ssh_connect-14.ttl ; Description : SSH Auto login ; Author : JUNZOU ; Created : 2011/04/17 ; modified : ;=========================================================== ;; ホスト一覧ファイル指定 HOSTFILE = 'C:\work\test.txt' ;; ユーザ名/パスワード設定 USERNAME = 'ユーザ名' PASSWORD = 'パスワード' ;; ログ保存先指定 LOGSPATH = 'C:\logs\' ;=========================================================== ;; ①ログファイル名の設定 getdate LOG_NAME '%Y%m%d_%H%M%S.log' FULLPATH = LOGSPATH strconcat FULLPATH LOG_NAME ;; ②ホスト一覧ファイルオープン fileopen HOSTLIST HOSTFILE 0 ;; ③ホスト一覧ファイルから接続ホスト(一行)読み込み filereadln HOSTLIST HOSTNAME ;; ④ホスト一覧ファイルのEOFまで繰り返し実行 while result = 0 ;; ⑤空白行の場合、次の行を読み込む strlen HOSTNAME if result = 0 goto END ;; ⑥先頭行がコメント(#)の場合、次の行を読み込む strmatch HOSTNAME '^#' if result <> 1 CALL SETSUZOKU :END ;; ⑦ホスト一覧ファイルからホスト名を読み込む filereadln HOSTLIST HOSTNAME endwhile ;; ⑧ホスト一覧ファイルクローズ fileclose HOSTLIST ;; ⑨マクロ終了 end ;=========================================================== ;; *****サブルーチン***** :SETSUZOKU ;; コマンド組立て COMMAND = HOSTNAME strconcat COMMAND ':22 /ssh /2 /auth=password /user=' strconcat COMMAND USERNAME strconcat COMMAND ' /passwd=' strconcat COMMAND PASSWORD ;; 接続 connect COMMAND ;; 接続判定(接続出来ない場合はメッセージを表示しマクロ終了) if result <> 2 return ;; ログ取得開始 logopen FULLPATH 1 1 logwrite #13#10 logwrite '************************************************'#13#10 logwrite '■ホスト名 : ' logwrite HOSTNAME logwrite #13#10 logwrite '************************************************'#13#10 ;; 情報取得 wait '$' '#' sendln 'grep err /var/log/massages' wait '$' '#' mpause 500 closett return ;; *****サブルーチン終わり*****
マクロ内容の解説
①ログファイル名の設定
ログファイル名の設定部分では、保存するログファイル名の文字列、及び保管するファイルのフルパスを作成しています。
[getdate]コマンドで、その時点の日付・時刻を取得し、「YYYYMMDD_HHMMSS.log」の形式で変数「LOG_NAME」に格納してます。
また[strconcat]コマンドを使用し、変数「LOG_FILE」にログファイルのフルパスを指定しています。最終的に以下のようになります。
C:\logs\YYYYMMDD_HHMMSS_ホスト名.log
フルパスを指定しない場合は[changedir]コマンドを使用し、書き込むディレクトリに移動してログ取得を開始する事も可能です。
②ホスト一覧ファイルオープン
[fileopen]コマンドで接続先ホスト一覧ファイルを開いています。
[fileopen]コマンド書式(△はスペース)
fileopen△<file handle>△ホストリストファイル名△<append flag>
■解説
<file handle>
ファイルが正しくオープンされた場合、ファイルハンドルが整数変数<file handle> に格納されます。
<append flag>
0の場合、ファイルポインタの位置はファイルの始めにセットされます。0以外の場合、ファイルポインタはファイルの最後にセットされます。
③ホスト一覧ファイルから接続ホスト(一行)読み込み
[filereadln]コマンドで、ホスト一覧ファイルからホスト情報(一行)を読み込み変数「HOSTNAME」に格納しています。
[filereadln]コマンド書式(△はスペース)
filereadln△<file handle>△<strvar>
ファイルハンドル <file handle> で指定されるファイルから一行読み込む。読み込まれた行は、文字列変数 <strvar> に格納されます。
ホスト一覧ファイルは、1行に1ホスト記述してください。
C:\hostlist.txt 記述例)
=====================================
111.111.111.111
222.222.222.222
333.333.333.333
#444.444.444.444 ← コメント行の場合は、次の行を読み込みます
555.555.555.555
=====================================
④ホスト一覧ファイルのEOFまで繰り返し実行
[while]コマンドで、ホスト一覧ファイルのEOFまで繰り返し処理を行います。
行を読んでいる間にファイルポインタがファイルの最後に達した場合、システム変数「result」に 1 が格納されます。それ以外の場合は 0 が格納されます。
改行のみの場合は、文字列変数は空となり、result には 0 が格納されます。
⑤空白行の場合、次の行を読み込む
[strlen]コマンドで、読み込んだ一行が空白(改行のみ)でないかを確認しています。[strlen]コマンドは、文字列の長さを返すコマンドです。
戻り値がゼロ(空白)の場合は、次の行を読み込む処理に進みます。
⑥先頭行がコメント(#)ではない場合、サブルーチン「SETSUZOKU」を実行
[strmatch]コマンドで先頭文字がコメント「#」ではないか確認しています。[strmatch]は、正規表現によるパターンマッチングを行うコマンドです。
先頭文字が#(コメント)の場合は次の行を読み込む処理に進みます。
コメントで無い場合は、サブルーチン「SETSUZOKU」を実行します。
⑦ホスト一覧ファイルから接続ホスト(一行)読み込み
[filereadln]コマンドで、ホスト一覧ファイルから接続ホスト情報を読み込んでいます。
⑧ホスト一覧ファイルクローズ
[fileclose]コマンドでホスト一覧ファイルを閉じる処理を行います。
⑨マクロ終了
[end]コマンドでマクロを終了させます。
サブルーチン「SETSUZOKU」部分
ホスト一覧ファイルから読み込んだ情報でサーバにログインし「grep err /var/log/messages」の実行結果をTeraTerm側のログファイルに記録しています。