Semyi is an uptime monitoring platform designed to keep track of your server and services' availability and performance. It leverages roselite as a relay instance to efficiently pass monitoring data. Key features include:
- Real-time monitoring of server uptime and performance metrics.
- Configurable alerting system to notify you of downtime or performance issues.
- Integration with
roselitefor seamless data relay and processing.
To run Semyi, use the pre-built Docker image available at ghcr.io/teknologi-umum/semyi. Use the :edge tag for builds from the master branch and :latest for tagged builds.
services:
semyi:
image: "ghcr.io/teknologi-umum/semyi:latest"
ports:
- 5000:5000
environment:
CONFIG_PATH: "/data/config.json"
DB_PATH": "/data/db.duckdb"
volumes:
- "./config.json:/data/config.json"
- "./db.duckdb:/data/db.duckdb"
healthcheck:
test: "curl http://localhost:5000/api/_healthz
retries: 3
interval: 15s
timeout: 10sCONFIG_PATH: Path to the configuration file (default:/data/config.json)ENVIRONMENT: Set todevelopmentorproduction(default:production)HOSTNAME: Hostname for the server (default:0.0.0.0)DB_PATH: Path to the database file (default:/data/db.duckdb)STATIC_PATH: Path to static files (default:/app/src/dist)DEFAULT_INTERVAL: Default monitoring interval in seconds (default:30)DEFAULT_TIMEOUT: Default timeout in seconds (default:10)PORT: Port for the server to listen on (default:5000)API_KEY: API key for authentication (optional)BACKEND_SENTRY_DSN: Sentry DSN for backend (default to empty string which disables Sentry)BACKEND_SENTRY_SAMPLE_RATE: Sentry sample rate for errors (default:1.0)BACKEND_SENTRY_TRACES_SAMPLE_RATE: Sentry sample rate for tracing (default:1.0)ENABLE_DUMP_FAILURE_RESPONSE: Enable dumping response data if healthcheck failure occures (default:false)
Semyi supports configuration files in JSON, YAML, and TOML formats. Below is an example configuration in JSON:
{
"alerting": {
"telegram": {
"enabled": true,
"url": "https://api.telegram.org",
"chat_id": "123456789"
},
"discord": {
"enabled": true,
"webhook_url": "https://discord.com/api/webhooks/.."
},
"http": {
"enabled": true,
"webhook_url": "https://example.com/webhook"
},
"slack": {
"enabled": true,
"webhook_url": "https://hooks.slack.com/services/..."
}
},
"monitors": [
{
"unique_id": "monitor-1",
"name": "Example Monitor",
"description": "",
"public_url": "https://example.com",
"type": "http",
"interval": 30,
"timeout": 30,
"http_headers": {},
"http_method": "GET",
"http_endpoint": "https://example.com/_healthz",
"http_expected_status_code": "2xx"
},
{
"unique_id": "monitor-2",
"name": "Google DNS",
"description": "",
"public_url": "https://dns.google",
"type": "icmp",
"interval": 30,
"timeout": 30,
"hostname": "8.8.4.4",
"packet_size": 56
}
],
"retention_period": 120
}By default, Semyi uses DuckDB as the storage. For large deployments, you can switch to ClickHouse by providing the ClickHouse DSN in the DB_PATH environment variable. The DSN format can be found here.
Copyright (C) 2025 Teknologi Umum <opensource@teknologiumum.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
See LICENSE