作業メモです。
Docker を動かしている OS は WindowsServer 2019 になります。
背景
IIS のコンテナを動かした所、docker logs
でアクセスログなどが表示されなかった。
# 起動
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 logs コマンドは、Linux アプリケーションの標準のアプリケーションログの保存場所である STDOUT/STDERR からコンテナーのログをフェッチします。 Windows アプリケーションは通常、STDOUT/STDERR には記録されません。代わりに、ETW、イベントログ、またはログファイルに記録されます。
Microsoft がサポートしているオープンソースツールであるLog Monitorは、github で入手できるようになりました。 ログモニターは、Windows アプリケーションログを STDOUT/STDERR にブリッジします。 ログモニターは、構成ファイルを使用して構成されます。
上記を試したときのメモ。
最終的に確認出来たもの
以下のような感じです。
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
{
"LogConfig": {
"sources": [
{
"type": "File",
"directory": "c:\\inetpub\\logs",
"filter": "*.log",
"includeSubdirectories": true
}
]
}
}
docker build
の際の構成は以下
tree /f
Folder PATH listing
Volume serial number is E8C7-77A7
C:.
│ Dockerfile
│
└───LogMonitor
LogMonitor.exe
LogMonitorConfig.json
これを docker build
して確認。
設定ファイルは以下のものから抜粋
LogMonitor.exe
は以下から 1.1 をダウンロードした
microsoft /windows-container-tools
使ってみる
# 起動
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>