AxonOps is a comprehensive management platform designed for Apache Cassandra® and Apache Kafka®, offering unified monitoring, maintenance, and backup functionalities. Built by Cassandra and Kafka experts, it provides the only cloud-native solution to monitor, maintain and backup Apache Cassandra or Apache Kafka clusters through either SaaS or self-hosted deployments.
For detailed documentation, visit:
- Demo https://axonops.com/demo-sandbox/
- Documentation: https://axonops.com/docs
- Product Information: https://axonops.com
For other self-host installation options like Kubernetes, see here: https://axonops.com/docs/installation-starter/axon-server/axonserver_install/
- Self-Hosting AxonOps
- Container Runtime Options
- Accessing AxonOps
- Compose Structure
- Instructions
- Health Check Script
When self-hosting AxonOps using this docker-compose.yml
file:
- The axon-server service acts as the backend, communicating with agents and exposing REST APIs.
- The axon-dash service provides the dashboards and user interface.
- Data is stored in:
- Elasticsearch®, which handles indexing and search functionality.
- Cassandra, which manages time-series data storage.
AxonOps is free to use and includes a range of powerful features at no cost.
For enterprise customers with a license key, you can enhance your installation by adding the key to the axon-server.yml
file. Ensure that the organization name matches the one used when obtaining your license.
This project can be run using either Docker or Podman.
It has been tested on Debian 12 with Docker, although it should work in other environments. Please raise an issue on the project if you encounter any problems specific to your setup.
Once the services are running, access the AxonOps dashboard at: http://localhost:3000 and you can configure your AxonOps agents to point at the AxonOps Server to start managing your cluster.
For production deployments, ensure proper security configurations are in place and refer to the official documentation for advanced setup options.
The platform provides dynamic dashboards for collecting logs and metrics, offering insights into cluster performance and health status. You can set up alerts for various metrics to ensure optimal performance.
The docker-compose.yml
file in this repository defines the services, networks, and volumes required to self-host AxonOps in this fashion. Below is an explanation of its structure and key components.
The docker-compose.yml
file orchestrates the following services:
- axon-server: The core backend component of AxonOps. This service handles communication with agents and exposes REST APIs for configuration.
- axon-dash: The frontend component providing dashboards and a user interface for interacting with AxonOps.
- Elasticsearch®: A search engine used by AxonOps to store and index data.
- Apache Cassandra®: A distributed NoSQL database used by AxonOps to store time-series data.
- busybox (initialization container): Ensures proper file permissions for mounted volumes before starting Elasticsearch and Cassandra.
The docker-compose.yml
file mounts persistent volumes for Elasticsearch and Cassandra to ensure data durability across container restarts. These volumes are critical for storing logs and other data generated by AxonOps.
-
Elasticsearch Volumes:
- Mounted to persist Elasticsearch indices and logs.
- Ensures that all data stored in Elasticsearch remains intact even if the container is restarted.
-
Cassandra Volumes:
- Mounted to persist time-series data and other information stored in Cassandra.
- Guarantees data reliability and availability.
On initialization, a lightweight busybox
container is used to set the correct file permissions for the mounted volumes. This step ensures that Elasticsearch and Cassandra have the necessary permissions to read from and write to their respective volumes.
The busybox
container runs a simple script that adjusts file ownership and permissions, then exits once the task is complete. This ensures a smooth startup process for the dependent services.
- Acts as the central hub for AxonOps agents.
- Exposes REST APIs that allow users to configure AxonOps programmatically.
- Handles incoming data from agents, processes it, and stores it in Elasticsearch and Cassandra.
- Provides the primary user interface for AxonOps.
- Allows users to visualize data, monitor systems, and interact with dashboards.
- Communicates with
axon-server
to fetch data for display.
- Stores indexed data required by AxonOps for searching, analytics, and monitoring.
- Configured with mounted volumes to persist indices and logs across restarts.
- Stores time-series data used by AxonOps for long-term storage and analysis.
- Configured with mounted volumes to ensure durability of stored data.
- Ensure that the mounted volumes have appropriate permissions before starting the services. The
busybox
initialization container takes care of this automatically during startup. - Both Elasticsearch and Cassandra are resource-intensive services; ensure your hosting environment has sufficient resources (CPU, memory, disk space) to handle their requirements effectively.
This structure ensures a robust deployment of AxonOps with all necessary components running seamlessly together in a single Docker Compose setup.
# Clone repository
git clone https://github.com/axonops/axonops-server-compose
cd axonops-server-compose
# Start services
docker compose up -d
# Clone repository
git clone https://github.com/axonops/axonops-server-compose
cd axonops-server-compose
# Start services
podman compose up -d
This repository includes a health-check script (health-check.sh
) designed to monitor and verify the status of services running in a Docker or Podman Compose environment. It ensures that all expected services in the Compose environment are running and healthy. It helps system administrators or developers quickly identify issues with containerized services by logging errors for any missing or unhealthy services.
-
Logging Errors:
- The script uses a
log_error
function to log error messages to the system's syslog with the tagcontainer-health-check
.
- The script uses a
-
Container Runtime Selection:
- By default, the script assumes the container runtime is
docker
. - If
podman
is passed as an argument, it switches to using Podman. - If an invalid argument is passed, the script exits with an error message.
- By default, the script assumes the container runtime is
-
Runtime Validation:
- The script checks if the selected container runtime (
docker
orpodman
) is installed and available in the system's PATH. - It also verifies that the Compose plugin for the selected runtime is installed.
- The script checks if the selected container runtime (
-
Service Status Check:
- The script uses
docker compose ps
(orpodman compose ps
) to list all services in the Compose environment. - It compares these services against a predefined list of expected services:
elasticsearch
,cassandra
,axon-server
, andaxon-dash
. - If any expected service is not running, it logs an error.
- The script uses
-
Health Status Check:
- For each running service, the script retrieves its health status using the
inspect
command. - If a service's health status is not
healthy
, or if its health check fails, an error is logged.
- For each running service, the script retrieves its health status using the
-
Exit Code:
- The script exits with a code of
0
if all services are running and healthy. - If any issues are detected (e.g., missing or unhealthy services), it exits with a non-zero code.
- The script exits with a code of
To run the script:
./health-check.sh [runtime]
[runtime]
: Optional argument to specify the container runtime (docker
orpodman
). Defaults todocker
.
-
If all services are running and healthy:
# No output; exit code 0
-
If a service is missing or unhealthy:
ERROR: Service cassandra is not running ERROR: Service elasticsearch is not healthy. Current status: starting
The errors are also logged to syslog for further debugging.
This project may contain trademarks or logos for projects, products, or services. Any use of third-party trademarks or logos are subject to those third-party's policies. AxonOps is a registered trademark of AxonOps Limited. Apache, Apache Cassandra, Cassandra, Apache Spark, Spark, Apache TinkerPop, TinkerPop, Apache Kafka and Kafka are either registered trademarks or trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. Elasticsearch is a trademark of Elasticsearch B.V., registered in the U.S. and in other countries. Docker is a trademark or registered trademark of Docker, Inc. in the United States and/or other countries.