- 🔑 Simple and secure way to access logs of any Docker containers without server/SSH connection
- 🏗️ Built with Golang & Svelte.js to extract maximum performance and keep the image and RAM footprint as small as possible. Logs storage implemented on top of lightweight LevelDB
- 🧸 Installation is easy as docker runs command/compose snippet. HTTP port exposed and could be routed from Nginx/Traefik/Directly
- 🖱 Get every service realtime logs stream with 1 click

- 📱 Check logs from your smartphone (insane, but we know it happens that you need it)
- 🧾 Open-source, commercial-friendly MIT license
- 💾 Small size of Docker image (~ 13 MB)
- 👥 Share access to logs with team members, revoke any time
- 💻 One host can be used to view logs from all other hosts in case you are running Cluster
- 🔗 Share log messages to colleagues via link

- 💽 Clear original docker logs to keep your storage size.
- 📊 Error/Info/Debug Statistics
- 🔎 Search through logs (configurable case sensitivity)
- 👁 View parameters (parsing JSON, showing local/UTC time for every logline)
- 🔴 Realtime logs updating
- 🗂 Grouping hosts
- 🏷 Search and filter by tags (log status, time)
- 🔌Plugins and internal ability to notify about some event (e.g. notify when Error happens)
- 📊 Improved statistics
onlogs:
image: devforth/onlogs
restart: always
environment:
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=<any password>
- PORT=8798
# - ONLOGS_PATH_PREFIX=/onlogs if want to use with path prefix
labels:
- "traefik.enable=true"
- "traefik.http.routers.onlogs.rule=Host(`<your host>`)" # if using on subdomain, e.g. https://onlogs.yourdomain.com
# - traefik.http.routers.onlogs.rule=PathPrefix(`/onlogs`) # if want to use with a path prefix, e.g. https://yourdomain.com/onlogs
- "traefik.http.services.onlogs.loadbalancer.server.port=8798"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers:/var/lib/docker/containers # if you want to delete duplicating logs from docker
- /etc/hostname:/etc/hostname
- onlogs-volume:/leveldb
volumes:
onlogs-volume:docker run --restart always -e ADMIN_USERNAME=admin -e PASSWORD=<any password> -e PORT=8798 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /var/lib/docker/containers:/var/lib/docker/containers \
-v /etc/hostname:/etc/hostname \
-v onlogs-volume:/leveldb \
--label traefik.enable=true \
--label traefik.http.routers.onlogs.rule=Host\(\`<your host>\`\) \
--label traefik.http.services.onlogs.loadbalancer.server.port=8798 devforth/onlogsOnce done, just go to and login as "admin" with .
By default the app will connect using the raw unix socket. But this can be overriden via the ENV variable DOCKER_HOST. That way you can specify fully qualified URL to the socket or URL of an docker socket proxy.
In compose-socket-proxy.yml you can see a sample compose file for starting the socket proxy. To use it in the app set DOCKER_HOST=http://localhost:2375 in the ENV.
Use the local test compose to run onlogs + socket-proxy + logprinter together:
cd application
docker compose -f compose-local-test.yml up --buildOpen http://localhost:2874 and login with:
- Username:
admin - Password:
admin
Stop containers:
docker compose -f compose-local-test.yml downStop and remove volumes too (clean state):
docker compose -f compose-local-test.yml down -v
