Watchdog Installation Guide (with Browsermon Inspect, ucs, eti)
Introduction
This guide explains how to install and configure Watchdog using watchdog-installer.sh. Watchdog can optionally integrate with browsermon inspect (for data ingestion) as a Splunk replacement, and ETI and UCS for classifying URLs.
The installer supports:
1. Interactive prompts for Docker registry authentication (optional).
2. Enabling/disabling Kafka mode and/or UCS or ETI mode.
3. Automatic creation of necessary directories under /opt/watchdog.
4. File-by-file copy of important Watchdog files (prompts only for /opt/watchdog/watchdog/ overwrites).
5. Automatic generation of a .env file in your current directory, containing the environment variables Docker Compose will need.
6. A final Docker Compose deployment that launches the selected services.
Prerequisites
-
Root/Sudo Access
The installer must be run asroot(or withsudo). It manages system directories (e.g.,/opt/watchdog) and sets ownership of data directories. -
Docker and Docker Compose
- Docker installed and running (
docker psshould work). - Docker Compose plugin or Docker Compose CLI installed.
- Optionally, Docker registry credentials if you plan to pull images from a private Docker registry.
- Docker installed and running (
-
Local Files/Directories
- A local
deps/directory that contains:deps/connect-jars/(Kafka connector JARs).deps/watchdog/(Watchdog source files).deps/init-kafka-connect.sh(initialization script).
- Docker Compose YAML files in the same directory from which you run the installer:
docker-compose.base.yml(required).docker-compose.kafka.yml(if enabling Kafka).docker-compose.elastic.yml(if enabling ETI or UCS).docker-compose.eti.yml(if enabling ETI)docker-compose.ucs.yml(if enabling UCS)
no-proxy.env— must be present alongside the Docker Compose files. This file clears host-level proxy variables inside containers to prevent them from breaking container-to-container networking.
- A local
Installation Steps
- Download the Watchdog release folder from Eunomatix.
Note: If you don't have internet access, first download the offline images and load them. See the "Offline Image Deployment (Optional)" section for more details.
-
Extract the folder and make sure that
watchdog-installer.shis executable: -
Run the installer (as root):
- The script will:
- Prompt you for Docker registry authentication (optional).
- Prompt whether to enable Kafka/Elasticsearch modes.
- If Kafka mode is enabled, prompt for a
KAFKA_EXTERNAL_IP. - If Elasticsearch mode is enabled, prompt for host, port, passwords, etc.
- Create
/opt/watchdog,/opt/watchdog/kafka_data, and/opt/watchdog/elasticsearch_dataas needed. - Copy files from
deps/into/opt/watchdog.connect-jarsandinit-kafka-connect.share forced overwrites (no prompt).- The
watchdogdirectory is copied file-by-file with a prompt for each existing file.
- Generate a
.envfile in your current directory (where Docker Compose can see it). - Finally, run
docker compose up -dusingdocker-compose.base.yml, plus the Kafka and/or Elastic Compose files if those modes were selected.
- The script will:
-
Verify installation:
- Check running containers:
- If Kafka was enabled:
kafkaandkafka-connectcontainers should be running.
- If Elasticsearch was enabled:
- An
elasticsearchcontainer should be running (depending on your compose files).
- An
Environment Variables and .env File
The script automatically writes environment variables to a .env file in the current working directory. Docker Compose will automatically load them. If Kafka/Elasticsearch is enabled, you’ll see lines like:
KAFKA_EXTERNAL_IP=your.machine.ip
ELASTIC_HOST=elasticsearch
ELASTIC_PORT=9200
ELASTIC_PASSWORD=BrowsermonElasticAdmin
ELASTIC_USER_PASSWORD=BrowsermonElasticUser
ELASTIC_SCHEME=https
You can modify these directly if needed (though re-running the script may overwrite them).
Service Configuration
-
Kafka
- Typically uses port
8092(or whatever is in yourdocker-compose.kafka.yml). - Uses Kafka Connect to push data to MongoDB (or other sinks).
- The
init-kafka-connect.shscript is placed in/opt/watchdog, but you typically don’t need to run it manually unless your setup requires it.
- Typically uses port
-
MongoDB
- Often deployed alongside Kafka (depending on your
docker-compose.kafka.yml). - The sink connector is configured to push Watchdog data to MongoDB.
- Often deployed alongside Kafka (depending on your
-
Grafana
- Grafana is the interface to the Kafka and uses port
1514with the username and password asadmin.
- Grafana is the interface to the Kafka and uses port
-
Elasticsearch
- Typically listens on
9200for HTTP/HTTPS calls. - The default scheme is
https(from the script prompt) but can be changed if you have a custom ES config. - If using
elasticsearch.yml, it should be placed indeps/watchdogor your custom location and referenced bydocker-compose.elastic.yml.
- Typically listens on
Updating the Installation
If you are performing an upgrade or have installed Watchdog before and want to preserve configuration and data, you should go to the previous release directory from where you installed the older version and run:
This will clean all the containers, networks, and volumes, and ask if you also want to clean the images. Then, run the installer again. It will ask you for the upgrade; proceed with it. If you want to replace any file, pressy, otherwise skip the prompts.
If you re-run the installer and /opt/watchdog is detected, the script enters Update Mode.
Example:
If it sees an existing installation, you’ll be asked:Existing installation detected at /opt/watchdog
Do you want to proceed with the update? (y/n)
- Prompt you for Docker registry authentication (optional).
- Prompt whether to enable Kafka/ETI/UCS modes.
- If Kafka mode is enabled, prompt for a
KAFKA_EXTERNAL_IP. - If ETI/UCS mode is enabled, prompt for username, passwords, etc.
- Prompted for overwriting files inside
/opt/watchdog/watchdog. - Other files (like
init-kafka-connect.shorconnect-jars) are overwritten automatically. - The script will then re-run Docker Compose to update containers.
Note: If there is any change in conf files then you should press y when installer prompt you to replace that file.
Uninstalling / Cleaning Up
To stop and remove the Watchdog containers (Kafka/Elasticsearch included), run:
This will: 1. Look fordocker-compose.base.yml, docker-compose.kafka.yml, and docker-compose.elastic.yml in your current directory.
2. Run docker compose down -v with whichever files are found, removing containers and volumes.
Note: This does not delete
/opt/watchdogor the data directories. If you want to remove them entirely, you can do so manually:
Troubleshooting
1. Checking Logs
View logs for a specific container:
Examples: -docker logs kafka-connect
- docker logs elasticsearch
Watchdog Logging
Watchdog and its supporting services generate several log files. Reviewing these logs can help in identifying the issue.
Log File Locations
-
Watchdog Logs
Path:/opt/watchdog/watchdog_data/logs/watchdog.log
Contains all Watchdog runtime messages, including server startup, requests, errors, and configuration-related issues.
Use this log as your primary reference when troubleshooting Watchdog behavior. -
Threat Collector Logs
Path:/opt/watchdog/elasticsearch_data/logs/threat_collector.log
Contains logs generated by the Threat Collector service, which downloads and ingests threat intelligence data into Elasticsearch. -
UCS Client Logs
Path:/opt/watchdog/elasticsearch_data/logs/ucs_client.log
Contains logs for the UCS Client, which handles periodic sync with the UCS API and updates the local Elasticsearch index.
2. Verifying Kafka Connect
Inside the Kafka Connect container:
Then check connector status: A valid Mongo Sink Connector shows:{
"name": "mongo-sink-connector",
"connector": {
"state": "RUNNING",
"worker_id": "connect-worker-1"
},
"tasks": [
{
"id": 0,
"state": "RUNNING",
"worker_id": "connect-worker-1"
}
],
"type": "sink"
}
3. Checking Elasticsearch
If Elasticsearch is running with HTTPS and basic auth:
--k ignores self-signed certificate errors.
- Adjust the user/password as you configured them during installation prompts.
4. Internet Access
Important: For the functioning of the Elasticsearch-based URL classification, the following domains must be accessible from the network where your Watchdog is deployed.
- ETI API: eti.eunomatix.com
- UCS API: ucs.eunomatix.com
Offline Image Deployment (Optional)
If you have Docker images saved locally (e.g., .tar files) for offline deployment:
1. Load them:
Note: The offline images from the Eunomatix has the following naming convention watchdog-{version}.img
- Skip Docker Hub Login during the script’s prompts.
- Ensure the Docker Compose files reference the images you loaded (matching tags).