selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
dish logo

Self-host dish

v1.12.0

Tiny one-shot monitoring service with remote config

ReleaseOpen SourceMIT
Updated4 months ago
LanguageGo
Setup difficultyEasy
Stars
280
Install with Docker
Dish running in terminal showing check resultsTelegram alert message showing check results with success notifications

What is dish?

Dish is a lightweight Go utility that runs one-shot health checks against HTTP, ICMP, and TCP endpoints. It reads endpoint lists from a local JSON file or a remote REST API, with optional caching to reduce API calls on frequent runs. Checks execute concurrently and the tool exits with distinct codes for success or failure, making it cron-friendly. Alerting options include Telegram, Discord, Pushgateway for Prometheus, generic webhooks, and a remote results API. The single binary has no external runtime dependencies and installs via go install, Homebrew, direct download, or Docker. It suits decentralized setups where multiple instances fetch shared configuration.

Should you self-host dish?

dish scores 49/100 on selfhost.directory (how scoring works) and ranks #25 of 51 in Monitoring & observability. It has 280 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is easy: most people get it running in one sitting. It is MIT-licensed and written mostly in Go.

Its closest alternative on selfhost.directory is GoAccess (75/100, 21 094 stars). It scores higher overall, so compare the two before you pick. See dish vs GoAccess side by side.

Features

  • Concurrent endpoint testing
  • Cron-friendly one-shot execution
  • Custom authentication headers
  • Discord alerting
  • HTTP health checks
  • ICMP (ping) checksNot supported on Windows
  • Local caching of remote config
  • Local JSON file configuration
  • Pushgateway (Prometheus) integration
  • Remote configuration via JSON API
  • Remote results API
  • TCP port checks
  • Telegram alerting
  • Webhook Notifications
  • Zero runtime dependencies

dish README

How to install dish

Install dish with Docker

Environment variables
APP_FLAGS, SOURCE, etc. via .env

docker run --rm
dish:1.12.0-go1.24
-verbose
-target https://pushgateway.example.com
https://api.example.com

Image built from source via Makefile

How to configure dish

  • -cachefalsea bool, specifies whether to cache the socket list fetched from the remote API source

    a bool, specifies whether to cache the socket list fetched from the remote API source

    values: true|false

  • -cacheDir.cachea string, specifies the directory used to cache the socket list fetched from the remote API source

    a string, specifies the directory used to cache the socket list fetched from the remote API source

  • -cacheTTL10an int, time duration (in minutes) for which the cached list of sockets is valid

    an int, time duration (in minutes) for which the cached list of sockets is valid

  • -discordBotTokena string, Discord bot token

    a string, Discord bot token

  • -discordChannelIda string, Discord channel ID

    a string, Discord channel ID

  • -hnamea string, name of a custom additional header to be used when fetching and pushing results to the remote API (used mainly for auth purposes)

    a string, name of a custom additional header to be used when fetching and pushing results to the remote API (used mainly for auth purposes)

  • -hvaluea string, value of the custom additional header to be used when fetching and pushing results to the remote API (used mainly for auth purposes)

    a string, value of the custom additional header to be used when fetching and pushing results to the remote API (used mainly for auth purposes)

  • -machineNotifySuccessfalsea bool, specifies whether successful checks with no failures should be reported to machine channels

    a bool, specifies whether successful checks with no failures should be reported to machine channels

    values: true|false

  • -namegeneric-disha string, dish instance name

    a string, dish instance name

  • -targeta string, result update path/URL to pushgateway, plaintext/byte output

    a string, result update path/URL to pushgateway, plaintext/byte output

  • -telegramBotTokena string, Telegram bot private token

    a string, Telegram bot private token

  • -telegramChatIDa string, Telegram chat/channel ID

    a string, Telegram chat/channel ID

  • -textNotifySuccessfalsea bool, specifies whether successful checks with no failures should be reported to text channels

    a bool, specifies whether successful checks with no failures should be reported to text channels

    values: true|false

  • -timeout10an int, timeout in seconds for http and tcp calls

    an int, timeout in seconds for http and tcp calls

  • -updateURLa string, API endpoint URL for pushing results

    a string, API endpoint URL for pushing results

  • -verbosefalsea bool, console stdout logging toggle, output is colored unless disabled by NO_COLOR=true environment variable

    a bool, console stdout logging toggle, output is colored unless disabled by NO_COLOR=true environment variable

    values: true|false

  • -webhookURLa string, URL of webhook endpoint

    a string, URL of webhook endpoint

dish releases & version history

More in Network Monitoring

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…