思考時間: 2 ~ 3 秒
サーバー上のアクセスログやエラーログを、自動でローカルに取得し日付ごとに保存する方法を詳解します。WinSCP スクリプトから動的にファイル名を付与し、Windows タスクスケジューラでスケジュール実行するフローをご紹介します。
1. 概要とメリット
- 目的:サーバー上のログ(例:
access.log
、error.log
)を毎朝自動でダウンロードし、
ローカルに YYYYMMDD の日付付きファイル名で保存。 - メリット
- 手動コピペ不要で取りこぼしゼロ
- 日付ごとに整理され、トラブル解析やアクセス傾向分析が容易
- バックグラウンド実行で運用負荷を軽減
2. 前提条件
- WinSCP がインストール済み
- SFTP/FTP 接続情報(ホスト名/ユーザー/パスワードまたはキー)
- ログ保存用フォルダをローカルに作成
- 例:
C:\ServerLogs\Access
- 例:
- Windows タスクスケジューラ でスクリプト実行可能なユーザー権限
3. スクリプト構成のポイント
- 変数の外部化:バッチファイルで「今日の日付」を環境変数に設定
- WinSCP スクリプト:
get
コマンドでファイル取得 - リネーム:ローカル側でダウンロード後にファイル名を変更
- ログ:実行ログを残し、エラー時に把握
4. サンプルスクリプト:日次ログ取得
(1) バッチファイル (download_log.bat
)
@echo off
REM 今日の日付を YYYYMMDD 形式で取得
for /f "tokens=2-4 delims=/- " %%a in ('date /t') do set LOGDATE=%%c%%a%%b
REM WinSCP スクリプト呼び出し
set WINSCP="C:\Program Files (x86)\WinSCP\WinSCP.com"
set SCRIPTFILE="C:\scripts\getlog.txt"
set LOGDIR="C:\ServerLogs\Access"
set REMOTELOG="/var/log/access.log"
%WINSCP% /script=%SCRIPTFILE% /log="C:\scripts\getlog_%LOGDATE%.log"
REM ダウンロード後にファイル名を日付付きにリネーム
move "%LOGDIR%\access.log" "%LOGDIR%\access_%LOGDATE%.log"
(2) WinSCP スクリプト (getlog.txt
)
option batch on
option confirm off
open sftp://user:pass@example.com/ -hostkey="ssh-rsa 2048 xx:xx:xx:xx"
lcd "C:\ServerLogs\Access"
get "/var/log/access.log"
close
exit
- ポイント
- バッチ側で日付変数
LOGDATE
を生成 - WinSCP は常に同名(
access.log
)として取得し、後処理でリネーム /log
オプションで詳細ログを残す
- バッチ側で日付変数
5. タスクスケジューラ登録手順
taskschd.msc
でタスクスケジューラを開く- 基本タスクの作成 → 名前例:「日次アクセスログ取得」
- トリガー:毎朝 6:00 AM(必要に応じて調整)
- 操作:
- プログラム/スクリプト:
C:\scripts\download_log.bat
- プログラム/スクリプト:
- 実行ユーザー:適切な権限のユーザーを選び、「最上位の特権で実行」にチェック
- 完了 → 一度「実行」をテスト
6. トラブルシュート
- ファイルが取得できない
- スクリプト中のパスや
open
の接続情報を再確認
- スクリプト中のパスや
- 日付変数が空
for /f
の日付取得フォーマットが Windows 言語設定に依存するため、powerShell -Command "(Get-Date).ToString('yyyyMMdd')"
を利用する方法も
- ログファイル名衝突
- 既存の同日ファイルがあれば上書きされる。意図しない上書きを防ぐにはリネーム前に存在チェックを追加
7. セキュリティ上の注意
- パスワード平文保存の回避
- SSH 鍵認証を設定し、WinSCP スクリプトで
-privatekey
を利用
- SSH 鍵認証を設定し、WinSCP スクリプトで
- スクリプトのアクセス制御
C:\scripts
フォルダは実行ユーザーのみ読み書き可にする
- ログの管理
- 転送ログに機密情報(パスワード)が出力されないよう
/loglevel=0
等で制御
- 転送ログに機密情報(パスワード)が出力されないよう
8. まとめ
- 日次ログ取得 を自動化することで、運用時の証跡やアクセス解析用データが確実に手元に蓄積される
- バッチ + WinSCP スクリプト + タスクスケジューラ の組み合わせが汎用的で設定も容易
- 日付取得方法やファイル保存先の命名規則、パスワード管理に注意し、安全かつ継続的 に運用しましょう
▶️ 次は バッチファイル・PowerShell入門 のページで Windows スクリプトの基本を学び、運用自動化をさらに広げていきましょう。