zobserver is a Go-based application designed to monitor EVE Online killmail feeds, filter them based on specified criteria (characters, corporations, alliances), and relay relevant killmails to Discord webhooks. It leverages ZKillboard's RedisQ message queue for incoming killmails and the EVE Online ESI API for additional data.
- EVE Online Killmail Monitoring: Listens to a killmail feed (via RedisQ).
- Configurable Filtering: Filters killmails based on:
- Character IDs
- Corporation IDs
- Alliance IDs
- Option to capture all killmails.
- Discord Notifications: Sends formatted killmail notifications to configured Discord webhooks.
- Containerized & Kubernetes Ready: Designed to run as a Docker container and deployable via a Helm chart.
zobserver is configured via environment variables.
LOGGER_FORMAT: Log output format (e.g., "prod", "dev").LOGGER_LEVEL: Logging level (e.g., "info", "debug").QUEUE_NAME: The name of the RedisQ queue to listen to.TTW: Time To Wait, in seconds. Default:"10".ESI_USER_AGENT: User agent string for requests to the EVE Online ESI. Default:"zobserver".DESTINATIONS_FILE: Path to a YAML file containing destination configurations (see format below).DESTINATIONS: Alternatively, a string containing the YAML configuration for destinations directly.
If neither DESTINATIONS_FILE nor DESTINATIONS is provided, the application will error as it requires at least one destination.
This configuration can be provided via the DESTINATIONS environment variable directly or in a file specified by DESTINATIONS_FILE.
- name: "Example Destination 1 (All Killmails)"
all: true
discord_webhooks:
- id: "YOUR_DISCORD_WEBHOOK_ID_1"
token: "YOUR_DISCORD_WEBHOOK_TOKEN_1"
- name: "Example Destination 2 (Specific Entities)"
character_ids:
- 90000001
- 90000002
corporation_ids:
- 1000001
alliance_ids:
- 300001
discord_webhooks:
- id: "YOUR_DISCORD_WEBHOOK_ID_2"
token: "YOUR_DISCORD_WEBHOOK_TOKEN_2"
- id: "YOUR_DISCORD_WEBHOOK_ID_3"
token: "YOUR_DISCORD_WEBHOOK_TOKEN_3"Refer to internal/observer/config.go for the structure definitions.
- Go (for building from source)
- Docker
- Kubernetes and Helm (for Kubernetes deployment)
A Dockerfile is present in the root of the project. The application image is also available on ghcr.io/fnt-eve/zobserver.
- Build the Docker image (if building locally):
docker build -t zobserver:latest . - Run the Docker container:
You'll need to pass the necessary environment variables for configuration.
docker run -d \ -e QUEUE_NAME="your-redis-queue" \ -e ESI_USER_AGENT="your-esi-agent/1.0 your@email.com" \ -e DESTINATIONS_FILE="/app/destinations.yaml" \ -v /path/to/your/destinations.yaml:/app/destinations.yaml \ --name zobserver \ ghcr.io/fnt-eve/zobserver:latest # Or your locally built tag
The project includes a Helm chart located in the k8s/zobserver/ directory.
- Navigate to the chart directory:
cd k8s/zobserver - Customize
values.yamlas needed, especially theenvsection for configuration. The existingk8s/zobserver/README.mdprovides details on configurable values. - Deploy using Helm:
helm install zobserver . -n <your-namespace> # Or helm upgrade --install zobserver . -n <your-namespace> -f my-values.yaml
cmd/observer/: Main application entry point.internal/: Contains the core logic of the observer.internal/logger/: Logging setup.internal/observer/: Core observer, Redis queue, routing, and ESI/Discord sending logic.
k8s/zobserver/: Helm chart for Kubernetes deployment.Dockerfile: For building the Docker image.go.mod,go.sum: Go module files.
Contributions are welcome! Please feel free to open an issue or submit a pull request. For major changes, please open an issue first to discuss what you would like to change.
MIT