Azureのサービスでは「診断設定」でログ保管を行うが、ログの転送先は以下3つ
・Log Analytics ワークスペース
・Azure Event Hubs
・Azure ストレージアカウント
今回はこれらを中継して、Front Door→BLOBストレージ→Syslogサーバのログ転送手順を実施する。
Front Doorの転送設定
リソースの「監視」→「診断設定」から

「+診断設定を追加する」を選択

診断設定の名前を入力し、ストレージアカウントへのアーカイブで対象のBLOBストレージを選択して保存で完了

BLOBストレージでログの確認
BLOBストレージのリソースから「ストレージブラウザ」→「BLOBコンテナー」で見るとlogっぽいのがちらほら。いけてそう?

SyslogサーバーでAzCopy
1.Az Copy v10を入れる > 作業場所:Syslogサーバー
wget https://aka.ms/downloadazcopy-v10-linux -O azcopy.tgz && tar -xzf azcopy.tgz && sudo mv azcopy_linux_*/azcopy /usr/local/bin/
<参考>

AzCopy v10 を使用して Azure Storage にデータをコピーまたは移動する
AzCopy は、ストレージ アカウント間のデータ コピーに利用できるコマンドライン ユーティリティです。 この記事は、AzCopy をダウンロードし、ストレージ アカウントに接続し、データを転送する際に役立ちます。
VMでシステム割り当てマネージドIDを有効化 > 作業場所:Azure ポータル
VMのリソースから「セキュリティ」→「ID」→システム割り当て済みの状態を「オン」にして保存
有効化されるとAzureロールの割り当ての画面が出てくるので設定

ストレージ BLOB データ閲覧者ロールを割り当て
スコープはリソースで対象のストレージを選択する(サブスクリプションやリソーススコープだとうまく動かない)

Azure 組み込みロール - Azure RBAC
この記事では、Azure ロールベースのアクセス制御 (Azure RBAC) の Azure 組み込みロールについて説明します。 Actions、NotActions、DataActions、NotDataActions を一覧表示します...
AzCopyのログイン設定
通常AzCopyでAzureリソースに接続する時はテナントへのログインが求められるが、今回はログを継続してコピーし続ける必要があるので、ログインを自動化する。
sudo vi /etc/systemd/system/blob-sync.service
[Unit]
Description=Sync Blob logs to local Syslog
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
# ここで MSI ログインを自動化
Environment=AZCOPY_AUTO_LOGIN_TYPE=MSI
# 実際に動かすスクリプト
ExecStartPre=/usr/local/bin/azcopy login --identity
ExecStart=/usr/local/bin/blob2syslog.sh
# ログを journal に残す
StandardOutput=journal
StandardError=journal
同期スケジュールの設定
sudo vi /etc/systemd/system/blob-sync.timer
[Unit]
Description=Run blob-sync.service every 30 minutes
[Timer]
OnCalendar=*:0/30
Persistent=true # VM 再起動後も「経過分」を即実行
[Install]
WantedBy=timers.target
systemd に読み込ませる
sudo systemctl daemon-reload
タイマーを有効化&即起動
sudo systemctl enable --now blob-sync.timer
同期スクリプトを作成して実行権を付ける
sudo vi /usr/local/bin/blob2syslog.sh
#!/usr/bin/env bash
# --- Blob 上のログをローカルへ同期し、Syslog に取り込む ---
set -euo pipefail
SRC="https://<ストレージ名>.blob.core.windows.net/insights-logs-frontdooraccesslog"
TMP="/var/tmp/bloblogs"
# ① Entra ID (Managed Identity) で自動ログイン
# systemd 環境変数に AZCOPY_AUTO_LOGIN_TYPE=MSI を設定済みなので不要
# ② Blob から差分だけ取得
/usr/local/bin/azcopy sync "$SRC" "$TMP" --recursive --output-level=quiet
# ③ 直近 30 分以内にコピーした *.json を Syslog へ 1 行ずつ送信
find "$TMP" -name '*.json' -mmin -30 -print0 |
xargs -0 jq -c '.[]' |
logger -p local0.notice
※ストレージ名はAzureポータルのBLOBストレージリソースから「設定」→「エンドポイント」→「Blob service」で確認
実行権を付与
sudo chmod +x /usr/local/bin/blob2syslog.sh
動作確認
タイマーが登録されているか
systemctl list-timers --all | grep blob-sync

手動で1回実行
sudo systemctl start blob-sync.service
直後にログを確認
journalctl -u blob-sync.service -n 30
Syslogに取り込まれているか
sudo tail -n 20 /var/log/syslog
# または rsyslog の環境によって /var/log/messages

それっぽいのが出たので転送できてそう。
終わりに
systemctl start blob-sync.serviceで一生エラーが出続けたが、RBACのターゲットがリソースを指定せずリソースグループを指定していたからだった。
コメント