Windows
Linux
batch
TeraTermマクロ

Windows端末からリモートでログ取得

【まえがき(困ってたこと)】

運用の現場ではサーバから様々なログを取得する機会があると思います。

私の現場では赴任当初、わざわざ目当てのログを取得するのに
FFFTPでサーバへログインしてダウンロードしていました。

オペレータ業務であれば確実性を重視して、
FFFTPやSSHでログインするのは適していると考えますが、
運用業務では多数のサーバから同じディレクトリに存在するログデータを
取得する機会が多いため、手動での工数がかさみ困っていました。

運用チームの定常業務としてログ取得する場合、
取得しに行くサーバ、取得するログは決まっていますので、
すぐ取得できるようにツールを作成してみました。

【動作環境】

◆機器
 ・サーバ:CentOS 7.4/Linux Mint 18.2
 ・クライアント:Windows10

◆その他の特記事項
 ・サーバ側はFTP設定済み

FTPでの取得なのでセキュリティには注意してください。

【ツール(雛形)】

現場ではWindows10運用端末からTeraTermやFFFTPでリモートログインする
体制なので、今回はbatchコマンドでFTP接続するツールを作成しました。
以下が雛形です。

LogDownload.bat
@echo off
setlocal enabledelayedexpansion
COLOR 2F

rem 読み込み用FTPファイルを変数に格納
set CONF_FILEPATH="C:\Log\★ログダウンロードツール\ftp_filedownload.conf"

rem 取得するサーバ側のログファイルのフルパスを変数に格納
set LOG_FILE1=/home/ToolAdmin/Logs/UserInfoGet.log

rem 後ほどファイルリネーム用に使用するファイル名を変数に格納
set FILE1=UserInfoGet.log

:CHECK1

rem CALL :TITEL

rem 対象サーバを選択式で指定する
SET CHECK1=
ECHO A : 対象のサーバを指定してください。
ECHO    1. Zabbixサーバ(192.168.42.133)
ECHO    2. LinuxMint(192.168.42.128)
echo+
SET/P CHECK1="Input No[1-2]  『Q:中止』:"

IF /i !CHECK1! == 1 GOTO zbs01
IF /i !CHECK1! == 2 GOTO lmc01
IF /i !CHECK1! == Q GOTO end

GOTO CHECK1

rem FTPコマンドを読み込み用FTPファイルにリダイレクト
:zbs01
setlocal enabledelayedexpansion
set SERVER=192.168.42.133
set SERVER2=zabbixs01
echo open %SERVER% > %CONF_FILEPATH%
echo use username password >> %CONF_FILEPATH%
echo ascii >> %CONF_FILEPATH%
rem echo BINARY >> %CONF_FILEPATH% バイナリで落とすならこちらを使用
echo prompt >> %CONF_FILEPATH%
echo get %LOG_FILE1% >> %CONF_FILEPATH%
echo close >> %CONF_FILEPATH%
echo bye >> %CONF_FILEPATH%
setlocal enabledelayedexpansion
goto download

:lmc01
setlocal enabledelayedexpansion
set SERVER=192.168.42.128
set SERVER2=LinuxMint01
echo open %SERVER% > %CONF_FILEPATH%
echo use username password >> %CONF_FILEPATH%
echo ascii >> %CONF_FILEPATH%
rem echo BINARY >> %CONF_FILEPATH%
echo prompt >> %CONF_FILEPATH%
echo get %LOG_FILE1% >> %CONF_FILEPATH%
echo close >> %CONF_FILEPATH%
echo bye >> %CONF_FILEPATH%
setlocal enabledelayedexpansion
goto download

:download

rem CALL :TITLE

echo A: [%CHECK1%. %SERVER2%]を選択
echo+

rem ダウンロード開始するかの確認窓を出す
SET CHECK3=
ECHO ダウンロードを開始しますが、よろしいですか?
echo+
SET/P CHECK3="Input [Y] 『Q:中止 / B:戻る』:"

IF /i !CHECK3! == Y GOTO YES
IF /i !CHECK3! == B GOTO CHECK1
IF /i !CHECK3! == Q GOTO end

GOTO download


:YES

CALL :TITLE

echo +++++++++++ファイルダウンロード開始+++++++++++
echo+

set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
rem TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
set NOWTIME=%time:~0,2%%time:~3,2%

set NWTIME=%NOWTIME: =0%
rem ↑↑空白対策↑↑

cd /d "C:\Log\User"
setlocal enabledelayedexpansion

ftp -n -s:%CONF_FILEPATH%

ren %FILE1% %TODAY%_%NOWTIME%_UserInfoGet_%SERVER2%.txt

echo+
echo ファイルのダウンロードが終了しました。
echo 『C:\Log\User』以下に保存されています。
echo ファイルがあるフォルダを開きます。
echo+
pause

explorer C:\Log\User

:end

exit

:TITEL
cls
echo #############################################################################
echo #               ログダウンロードツール(FTPサーバからのDL)                   #
echo #############################################################################

exit /B


以上の雛形を取得したいログに合わせて修正していきます。

以下は修正後の自宅で使用しているツールです。

【ZabbixとMySQL関連のログを取得】

Zabbixのエージェント/サーバーログと、
MySQLのスロウクエリログとシステムログを
取得するのが面倒だったので作りました。

LogDownload01.bat
@echo off
setlocal enabledelayedexpansion
COLOR 1F

set CONF_FILEPATH="C:\Log\★ログダウンロードツール\ftp_filedownload.conf"

set LOG_FILE1=/var/log/zabbix/zabbix_server.log
set FILE1=zabbix_server.log

set LOG_FILE2=/var/log/zabbix/zabbix_agentd.log
set FILE2=zabbix_agentd.log

set LOG_FILE3=/var/log/mysql/slow_query.log
set FILE3=slow_query.log

set LOG_FILE4=/var/log/mysql/mysqld.log
set FILE4=mysqld.log

:CHECK1

CALL :TITEL

SET CHECK1=
ECHO A : 対象のサーバを指定してください。
ECHO    1. Zabbixサーバ(192.168.42.133)
echo+
SET/P CHECK1="Input No[1]  『Q:中止』:"

IF /i !CHECK1! == 1 GOTO zbs01
IF /i !CHECK1! == Q GOTO end

GOTO CHECK1

:zbs01
setlocal enabledelayedexpansion
set SERVER=192.168.42.133
set SERVER2=zabbixs01
echo open %SERVER% > %CONF_FILEPATH%
echo use username password >> %CONF_FILEPATH%
echo ascii >> %CONF_FILEPATH%
rem echo BINARY >> %CONF_FILEPATH%
echo prompt >> %CONF_FILEPATH%
echo get %LOG_FILE1% >> %CONF_FILEPATH%
echo get %LOG_FILE2% >> %CONF_FILEPATH%
echo get %LOG_FILE3% >> %CONF_FILEPATH%
echo get %LOG_FILE4% >> %CONF_FILEPATH%
echo close >> %CONF_FILEPATH%
echo bye >> %CONF_FILEPATH%
setlocal enabledelayedexpansion
goto download

:download

rem CALL :TITLE

echo A: [%CHECK1%. %SERVER2%]を選択
echo+

SET CHECK3=
ECHO ダウンロードを開始しますが、よろしいですか?
echo+
SET/P CHECK3="Input [Y] 『Q:中止 / B:戻る』:"

IF /i !CHECK3! == Y GOTO YES
IF /i !CHECK3! == B GOTO CHECK1
IF /i !CHECK3! == Q GOTO end

GOTO download


:YES

CALL :TITLE

echo +++++++++++ファイルダウンロード開始+++++++++++
echo+

set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
set NOWTIME=%time:~0,2%%time:~3,2%

set NOWTIME=%NOWTIME: =0%
rem ↑↑空白対策↑↑

cd /d "C:\Log\Zabbix"
setlocal enabledelayedexpansion

ftp -n -s:%CONF_FILEPATH%

ren %FILE1% %TODAY%_%NOWTIME%_zbserverlog_%SERVER2%.log
ren %FILE2% %TODAY%_%NOWTIME%_zbagentlog_%SERVER2%.log
ren %FILE3% %TODAY%_%NOWTIME%_mysqlslowquerylog_%SERVER2%.log
ren %FILE4% %TODAY%_%NOWTIME%_mysqlerror_%SERVER2%.log

echo+
echo ファイルのダウンロードが終了しました。
echo 『C:\Log\Zabbix』以下に保存されています。
echo ファイルがあるフォルダを開きます。
echo+
pause

explorer C:\Log\Zabbix

:end

exit

:TITEL
cls
echo #############################################################################
echo #               ログダウンロードツール(FTPサーバからのDL)                   #
echo #############################################################################
echo+
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo !注意、実行中はDOS窓を右上の[×]ボタンで終了させないで下さい。 注意       !
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo+
echo+

exit /B


コマンドプロンプト画面を閉じると
以下の通りに取得できているかと思います。

キャプチャ.PNG

【ユーザ情報をCSV形式で取得】

もう一つ例文を。
ユーザ棚卸の時などに全サーバのユーザ情報を取得するのが
面倒なので、作成しました。今回はTeraTermマクロも使用しています。

LogDownload02.bat
@echo off
setlocal enabledelayedexpansion
COLOR 2F

set CONF_FILEPATH="C:\Log\★ログダウンロードツール\ftp_filedownload.conf"

set LOG_FILE1=/home/ToolAdmin/Logs/UserInfoGet.log

set FILE1=UserInfoGet.log

:CHECK1

CALL :TITEL

SET CHECK1=
ECHO A : 対象のサーバを指定してください。
ECHO    1. Zabbixサーバ(192.168.42.133)
ECHO    2. LinuxMint(192.168.42.128)
echo+
SET/P CHECK1="Input No[1-2]  『Q:中止』:"

IF /i !CHECK1! == 1 GOTO zbs01
IF /i !CHECK1! == 2 GOTO lmc01
IF /i !CHECK1! == Q GOTO end

GOTO CHECK1

:zbs01
setlocal enabledelayedexpansion
set SERVER=192.168.42.133
set SERVER2=zabbixs01
echo open %SERVER% > %CONF_FILEPATH%
echo use username password >> %CONF_FILEPATH%
echo ascii >> %CONF_FILEPATH%
rem echo BINARY >> %CONF_FILEPATH%
echo prompt >> %CONF_FILEPATH%
echo get %LOG_FILE1% >> %CONF_FILEPATH%
echo close >> %CONF_FILEPATH%
echo bye >> %CONF_FILEPATH%
cd /d "C:\Program Files (x86)\teraterm"
TTPMACRO.EXE "C:\Program Files (x86)\teraterm\ZabbixUserInfoExport.ttl"
setlocal enabledelayedexpansion
goto download

:lmc01
setlocal enabledelayedexpansion
set SERVER=192.168.42.128
set SERVER2=LinuxMint01
echo open %SERVER% > %CONF_FILEPATH%
echo use username password >> %CONF_FILEPATH%
echo ascii >> %CONF_FILEPATH%
rem echo BINARY >> %CONF_FILEPATH%
echo prompt >> %CONF_FILEPATH%
echo get %LOG_FILE1% >> %CONF_FILEPATH%
echo close >> %CONF_FILEPATH%
echo bye >> %CONF_FILEPATH%
cd /d "C:\Program Files (x86)\teraterm"
TTPMACRO.EXE "C:\Program Files (x86)\teraterm\LinuxMintUserInfoExport.ttl"
setlocal enabledelayedexpansion
goto download

:download

rem CALL :TITLE

echo A: [%CHECK1%. %SERVER2%]を選択
echo+

SET CHECK3=
ECHO ダウンロードを開始しますが、よろしいですか?
echo+
SET/P CHECK3="Input [Y] 『Q:中止 / B:戻る』:"

IF /i !CHECK3! == Y GOTO YES
IF /i !CHECK3! == B GOTO CHECK1
IF /i !CHECK3! == Q GOTO end

GOTO download


:YES

rem CALL :TITLE

echo +++++++++++ファイルダウンロード開始+++++++++++
echo+

set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
rem TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
set NOWTIME=%time:~0,2%%time:~3,2%

set NOWTIME=%NOWTIME: =0%
rem ↑↑空白対策↑↑

cd /d "C:\Log\User"
setlocal enabledelayedexpansion

ftp -n -s:%CONF_FILEPATH%

ren %FILE1% %TODAY%_%NOWTIME%_UserInfoGet_%SERVER2%.txt

echo+
echo ファイルのダウンロードが終了しました。
echo 『C:\Log\User』以下に保存されています。
echo ファイルがあるフォルダを開きます。
echo+
pause

explorer C:\Log\User

:end

exit

:TITEL
cls
echo #############################################################################
echo #               ログダウンロードツール(FTPサーバからのDL)                   #
echo #############################################################################


exit /B


FTPファイルへリダイレクトしたあとに、
TeraTermマクロを起動し、/etc/passwdの情報をsedとcutで
編集しています。

TerTermMacro.ttl
username = 'root'
hostname = '192.168.42.133'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

msg = 'Enter password for user '
strconcat msg username
passwordbox msg 'Get password'

msg = hostname
strconcat msg ':22 /ssh /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg inputstr

connect msg

wait '[root@centos74 ~]#'
sendln 'cd /home/ToolAdmin/Logs'
wait '[root@centos74 Logs]#
sendln 'cut -d: -f 1,3,4,6,7 /etc/passwd > Inputfile.log'
wait '[root@centos74 Logs]#
sendln 'sed -e "s/:/,/g" Inputfile.log > Inputfile2.log'
wait '[root@centos74 Logs]#
sendln 'sed -e "s/^/ZabbixServer,/" Inputfile2.log > UserInfoGet.log'
wait '[root@centos74 Logs]#
sendln 'exit'

上記だとログイン時に毎回パスワード入力を求められますが、
不要であれば構文編集して対応できます。

またこのTTLだけだと3つのファイルが残ってしまうので、
気になるのであれば、TTLにrmを入れて削除してからTTLを閉じるように
修正すればOKです。

取得すると以下のように取得できていると思います。
キャプチャ.PNG

あとは複数のtxtファイルをbatchのtypeでマージして終わりです。

AllMergeUser.bat
type *UserInfoGet*.txt > AllMergeUser.csv
del *UserInfoGet*.txt
explorer C:\Log\User\AllMergeUser.csv

以上です。

専用のダウンロードツールなどがない場合で、
FTPが許される環境であれば試してみてください。

ちなみにSolarisサーバでもうまく取得はできましたが、
TeraTermマクロを利用する場合は表示される部分がOSで異なるため、
その点は注意して編集してください。