〜【番外編1】ログの定期取得マクロ〜ベルさて、Pythonの続きと言いたいところですが、前回の記事の際に、しれっと取得ログを使いましたが、そもそもどうやって定期的にログ取得するんだ!という質問を受けましたので、ちょっと番外編として、『ログ取得と定期実行について』授業をしておきたいと思います。前回までのPython授業を受けていない方は、こちらから読んでもらえれば、なぜ定期実行のマクロを作ろうとしているのかがわかってもらえると思います。~ログの読み込みからCSVファイルの作成まで~これだけです。これさえあれば、マクロの定期実行は可能です。まとめteratermマクロとは?定期実行マクロを学ぶ前に、そもそもteratermマクロをご存知ですか?通常、ネットワーク機器やサーバなどにターミナル接続する際に、手動でアクセスしていると思いますが、それを自動でアクセスさせたりログを自動取得させたりするマクロのことです。これを作り込むことで設定変更すら自動で行うことが出来るんです。(※リスクもあるので、あまりオススメは出来ませんが。)以前の授業でteratermマクロを紹介していますので、よかったら、こちらも見てくださいね。定期実行マクロの作成それでは定期実行マクロの作成をしていきましょう!ログイン情報の入力まずは、以下のように事前にログイン先を指定しておきましょう。複数のログイン先にアクセスする必要がある場合は、テキストファイルなどに記載して、繰り返し読み込ませることも出来ますが、今回は1つの決められたアドレスだけにします。‘cisco’最初の『HOSTADDR』は、パソコンから直接telnet接続するアドレスになります。次の『USERNAME』と『PASSWORD』は、アクセスした機器に設定された際に使用するユーザ名とパスワードになります。ユーザ名を使用していない場合、なくても問題ありません。ログインコマンドの作成それでは、先程のログイン情報を使ってログインコマンドを作成していきましょう。/T=1’先程作成したログイン情報の中で、まず先に使用するのが、『HOSTADDR』です。ログイン先アドレスを代入していたと思いますが、それをまた、『COMMAND』という変数に入れ替えます。次に、この『COMMAND』とログインパラメータをつなげます。今回は、sshではなくtelnetを使用するので、このような書き方になります。ログインの実行ここまで入力してきた内容を使ってTelnetアクセスしていきましょう。今回はCiscoルータにTelnet接続する応答結果をベースに作成していますが、使用する機器の応答内容に合わせて修正してくれればと思います。PASSWORD『connect』でログインを開始します。ログイン先は、先程指定して『10.1.1.1』になります。その後は、ログイン応答を想定してコマンドを投入していくわけですが、最初は『wait』で『Password:』と表示されるのを待ちます。表示されたら『sendln』で先程指定した『cisco』を投入します。ユーザ名を使っている機器であれば、『Username:』などと表示されるのを待ち、先程指定したユーザ名を投入するように修正してもらえれば問題ないと思います。一時ログファイルの作成ログインが完了したら、ログを取得していきましょう。複数のファイルに分割してログ保存する場合、同じファイル名してしまうと、上書きになるかログが混ざるかしてしまうので別名保存をおすすめします。最初は同一ファイル名(log)に保存し、ログが全て取り終えた後に、ログを取得した時間と取得した機器のホストをファイル名に入れておくことでファイル名が被ることを防げます。初めから時間とホスト名を入れたファイルでログを取得しないのは、ログインしてみないとホスト名を取得できないからです。複雑になってしまう部分もあるかもしれませんが、お付き合いください。Termマクロのファイルを基準にするように変更しています。Termマクロの保存先のパスを代入しています。Termマクロが保存されているディレクトリを基準になってしまい、ログの保存先がわからなくなってしまうことがあるので、ご注意を!次に、『getdate』で現在の時間を取得します。Termマクロの保存先フォルダを作成する準備をします。md』コマンドでWindowsのコマンドプロンプトを立ち上げ先程のディレクトリを作成し、コマンドプロンプトを閉じてくれます。その後、同ディレクトリに『log』ファイルを作成します。これが一時ログ保存するファイルになるのです。最後に『log』ファイルはリネームするので、覚えておいてくださいね!ログ取得準備ログインができたら、ログ取得の事前準備をしていきます。0』を入れて、ログが途中で切れないようにしておきましょう。500』を入れていますが、これは500msecを待ってから次の処理をするようにする指示になります。この後にも出てくることがありますが、同じような意味となります。これは処理が速すぎてコケてしまう場合などに入れますが、入れてもうまくいかな場合は値を変えたりしてみてください。作業しているパソコンやLAN環境によってチューニングする必要が出てきたりするので、うまくいかない時は試してみてください。‘(.+)\#’』で、「ホスト名#」が表示されるのを待ちます。これは正規表現を利用しており、「任意の複数の文字列」+「#」という意味になっています。次に表示された文字列(ホスト名+#)を「HOSTNAME」と「#」に『strsplit』で分割しています。その分割した1番目の値を、『groupmatchstr1』で取り出し、変数(HOST_MANE)に代入します。このようにホスト名だけを抽出しておき、後でログファイルに使用します。0』でログ取得を開始します。ちなみに最後に『1』と『0』の数字がありますが、最初の『1』はバイナリモードでの記録を意味します。最後の『0』は、上書きモードでの書き込みを意味しており、追記モードで書き込みたければ『1』に変更してもらえればと思います。コマンド投入それでは取得したいコマンドを入れていきましょう。今回は、以下のコマンドを取得したいと思います。上記のコマンドを1秒間隔で10回取得します。これにより10秒間のデータが取得することができます。1000logclose今回は、for文を使ってログの繰り返し取得を実施していきます。10』と書かれている部分を注目してもらいたいのですが、意味としては、『変数(i)』に初期値『1』を入れて、以下のコマンドを実行したらプラス1ずつしていき、『10』になったらループを終了することになります。1000』と記載されていますので、「1000msec=1秒」で実行するようにしていますので、取得したい間隔に合わせて使用してください。そこまでいったら、ログファイルを閉じます。ファイル名のリネームこの状態では、拡張子のない「log」ファイルのままになってしまうので、リネームしてわかりやすい名前にしていきます。MACRO_DIR先程も使用した『getdate』で現在時刻を取得し、『変数(DATESTR)』に代入するのですが、その際に『_%Y%m%d_%H%M%S.txt』のフォーマットに合わせます。『%Y%m%d_%H%M%S』とは、年月日と時分秒を組み合わせたフォーマットになります。2018年1月1日の12時34分56秒にログ取得していたら、「20180101_123456」と表記されます。『FILE_HOST_NAME』に、先程取得したホスト名(『HOST_NAME』)を代入し、その後、日時(『DATESTR』)をつなげてファイル名にします。したら、変数(『MACRO_DIR』)に『\』と変数(『FILE_HOST_NAME』)をつなげて、この『log』の保存先までのパスとファイル名をつなげて完成です。Termマクロの保存先から見て以下のようになっているはずです。それでは、『filerename』で、『LOG_DIR』から『MACRO_DIR』にファイルをリネームしておしまいですね。マクロの終了それでは、マクロを終了していきましょう。‘exit’end500msec待った後に、『exit』を入力してtelnetから抜けたら、『end』でマクロを終了します。サンプル今回、使用したマクロを載せておきます。ここまでに解説させてもらった内容となりますので、コピペして使ってもらえればと思います。‘exit’endまとめベルWindowsのタスクスケジューラまで書きたかったのですが、長くなってしまったので、今回はここまでにします。次回は、この続きを教えていこうと思いますので、ここまでをしっかり覚えておいてくださいね!次の授業ができましたよ。〜【番外編2】ログの定期取得マクロ〜商品紹介ネットワークエンジニアとして仕事していく上で、必要となる商品を紹介させていただいています。よかったら、こちらも読んでみてください。対して1件のコメントがあります。コメントをキャンセルメールアドレスが公開されることはありません。technology.%d人のブロガーが「いいね」をつけました。