[Windows]IIS コンテナのログを LogMonitor を使って docker logs で見れるようにした

作業メモです。
Docker を動かしている OS は WindowsServer 2019 になります。

# 背景

[IIS](https://hub.docker.com/_/microsoft-windows-servercore-iis) のコンテナを動かした所、`docker logs`でアクセスログなどが表示されなかった。

```powershell

# 起動
docker run -d -p 8888:80 mcr.microsoft.com/windows/servercore/iis
1b1cff21fc3e7f3029c9158afe887486f3fb601fdda441179a7adb6cc71137c8

# IE を開いて http://localhost:8888 にアクセス出来ることを確認

# 何も出ない
docker logs 1b1cff21fc3e

# powershell を起動
docker exec -it 1b1cff21fc3e powershell

# アクセスログは記録あり
cd .\inetpub\logs\LogFiles\W3SVC1\
cat .\u_ex200618.log
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2020-06-18 00:44:25
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status
sc-substatus sc-win32-status time-taken
2020-06-18 00:44:25 172.17.224.172 GET / - 80 - 172.31.20.83 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+rv:11.0)+
like+Gecko - 200 0 0 169
2020-06-18 00:44:25 172.17.224.172 GET /iisstart.png - 80 - 172.31.20.83 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.
0;+rv:11.0)+like+Gecko http://localhost:8888/ 200 0 0 3
2020-06-18 00:44:25 172.17.224.172 GET /favicon.ico - 80 - 172.31.20.83 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0
;+rv:11.0)+like+Gecko - 404 0 2 12
```

Docker では標準出力・標準エラー出力をコンテナのログと判断する為、上記だと検知できないよう。

これについてどうするかと調べていたら MS のドキュメントに以下を確認

[Docker コンテナーログ](https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/troubleshooting#docker-container-logs)

>docker logs コマンドは、Linux アプリケーションの標準のアプリケーションログの保存場所である STDOUT/STDERR からコンテナーのログをフェッチします。 Windows アプリケーションは通常、STDOUT/STDERR には記録されません。代わりに、ETW、イベントログ、またはログファイルに記録されます。
>Microsoft がサポートしているオープンソースツールであるLog Monitorは、github で入手できるようになりました。 ログモニターは、Windows アプリケーションログを STDOUT/STDERR にブリッジします。 ログモニターは、構成ファイルを使用して構成されます。

上記を試したときのメモ。

# 最終的に確認出来たもの

以下のような感じです。

```Dockerfile
FROM mcr.microsoft.com/windows/servercore/iis
COPY LogMonitor/ C:/LogMonitor
WORKDIR /LogMonitor
SHELL ["C:\\LogMonitor\\LogMonitor.exe", "powershell.exe"]
ENTRYPOINT C:\\ServiceMonitor.exe w3svc
```

```LogMonitorConfig.json
{
  "LogConfig": {
    "sources": [
      {
        "type": "File",
        "directory": "c:\\inetpub\\logs",
        "filter": "*.log",
        "includeSubdirectories": true
      }
    ]
  }
}
```

`docker build` の際の構成は以下

```powershell
 tree /f
Folder PATH listing
Volume serial number is E8C7-77A7
C:.
│   Dockerfile
│
└───LogMonitor
        LogMonitor.exe
        LogMonitorConfig.json
```

これを `docker build ` して確認。

設定ファイルは以下のものから抜粋

[Authoring a Config File](https://github.com/microsoft/windows-container-tools/wiki/Authoring-a-Config-File)

`LogMonitor.exe` は以下から 1.1 をダウンロードした

[ microsoft /windows-container-tools ](https://github.com/microsoft/windows-container-tools/releases)

# 使ってみる

```powershell
# 起動
docker run -d -p 8888:80 toshihirock/iis-with-log-monitor

# ブラウザからアクセス

# アクセス後、すぐではないが少し待てばログが見える
docker logs 0367ef142bc7
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2020-06-18 00:53:57
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2020-06-18 00:53:57 172.17.231.229 GET /aaaaa - 80 - 172.31.20.83 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko - 404 0 2 128
2020-06-18 00:53:57 172.17.231.229 GET /favicon.ico - 80 - 172.31.20.83 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko - 404 0 2 11
2020-06-18 00:54:15 172.17.231.229 GET /aaaaaaaaaa - 80 - 172.31.20.83 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko - 404 0 2 0
2020-06-18 00:55:05 172.17.231.229 GET /aaaaaaaaaaccccc - 80 - 172.31.20.83 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko - 404 0 2 0
PS C:\Users\Administrator\docker-iis>
```