Я запускаю Windows 10 Pro 1909 (18363.657) и хотел бы передать стандартный вывод контейнеров на локально установленный монитор журнала, принимающий GELF через UDP (в моем случае это seq). Я протестировал свою локальную установку seq, отправив вручную созданное сообщение udp в формате GELF с помощью powershell:
function Send-UdpDatagram
{
Param ([string] $EndPoint,
[int] $Port,
[string] $Message)
if (!$Message) {
$Message = '{"version": "1.1","host":"test.net","short_message":"A short message that helps you identify what is going on","full_message":"Backtrace here\n\nmore stuff","level":1,"_user_id":9001,"_some_info":"foo","_some_env_var":"bar"}'
}
$IP = [System.Net.Dns]::GetHostAddresses($EndPoint)
$Address = [System.Net.IPAddress]::Parse($IP)
$EndPoints = New-Object System.Net.IPEndPoint($Address, $Port)
$Socket = New-Object System.Net.Sockets.UDPClient
$EncodedText = [Text.Encoding]::ASCII.GetBytes($Message)
$SendMessage = $Socket.Send($EncodedText, $EncodedText.Length, $EndPoints)
Write-Output "Send Message:" $SendMessage
$Socket.Close()
}
Вызов этой функции с помощью Send-UdpDatagram --EndPoint 127.0.0.1 --Port 12201
работает, т.е. сообщение приходит в seq.
Затем я обновил конфигурацию Docker для Windows следующим образом:
{
"registry-mirrors": [],
"insecure-registries": [],
"debug": true,
"experimental": true,
"log-driver": "gelf",
"log-opts": {
"gelf-address": "udp://127.0.0.1:12201"
}
}
После перезапуска выводится информация докера:
Client:
Debug Mode: false
Server:
Containers: 23
Running: 3
Paused: 0
Stopped: 20
Images: 125
Server Version: 19.03.5
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: gelf
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.19.76-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 6
Total Memory: 3.846GiB
Name: docker-desktop
ID: PJYX:ZQ7D:4Y3O:3LZR:YCXL:KHUG:WEOT:R2AA:RDPH:TYRL:KWEU:NWXG
Docker Root Dir: /var/lib/docker
Debug Mode: true
File Descriptors: 56
Goroutines: 65
System Time: 2020-03-02T22:37:13.800351765Z
EventsListeners: 4
Registry: https://index.docker.io/v1/
Labels:
Experimental: true
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
Итак, кажется, все настроено так, как должно, но я все еще не получаю сообщения GELF в seq через udp из любого запускаемого контейнера. Я тестировал следующее:
docker container run -p 8080:80 -d nginx
Посещение http: // локальный: 8080 / Я получаю приветствия от nginx, но в seq нет сообщений журнала. Я знаю, что должен, потому что если я
docker container run -p 8080:80 -it nginx
Я вижу журналы запросов от nginx в выводе консоли.
Я предполагаю, что GELF поддерживается в Docker для Windows, но я не могу понять, как дальше устранять неполадки с потоком UDP. К сожалению, Docker не поддерживает TCP, afaik.