Monitoring

Powerful distributed monitoring system for your infrastructure

Monitor Your Services Availability Worldwide

Deploy a central server and run lightweight workers in any data centers. Get accurate and reliable downtime alerts.

Start in 5 Minutes

Key Features

🌐 Distributed Monitoring

Launch workers in different networks and regions for objective availability assessment.

🔐 Multi-tenancy and RBAC

Multiple users, groups, and detailed access control system for all resources.

📊 Variety of Check Types

HTTP(S), TCP, Ping, and Docker container status monitoring via API.

🔔 Smart Notifications

Configure alerts in Telegram and Mattermost. The system doesn't spam during partial failures.

🐳 Docker Monitoring

Centralized tracking of your containers status across all hosts.

📝 Audit Log

Complete history of all user actions in the system for maintaining order and security.

Simple and Powerful Architecture

The system consists of two components:

Server

akeb/monitoring:latest

Control center. Web interface, database, API.

Docker Hub

Worker

akeb/monitoring-worker:latest

Lightweight agent. Performs checks and sends results to the Server.

Docker Hub

architecture

Server Installation

1. Create Project Directory

mkdir monitoring-server
cd monitoring-server

2. Create Environment File

Create .env file with your configuration:

# Timezone
TZ=Europe/London

# MySQL
MYSQL_PASSWORD=YourSecureRootPassword123

# Web Server Port
NGINX_PORT=80

# Memcached
MEMCACHED_HOST=memcached

# Security - CHANGE THIS!
PASSWORD_SALT=YourRandomSaltStringHere123456789

3. Create Docker Compose File

Create docker-compose.yml:

---
services:
  mysql:
    container_name: monitoring-mysql
    image: mysql:latest
    restart: always
    environment:
      TZ: ${TZ:-UTC}
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-RootPassword}
    volumes:
      - ./mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysql", "-h", "127.0.0.1", "-u", "root", "--password=${MYSQL_ROOT_PASSWORD}", "-e", "show databases;"]
      start_period: 10s
      interval: 5s
      timeout: 5s
      retries: 55

  memcached:
    container_name: "monitoring-memcached"
    image: memcached
    restart: always
    environment:
      TZ: ${TZ:-UTC}
    command:
      - --conn-limit=1024
      - --memory-limit=32
      - --threads=4

  server:
    container_name: "monitoring-server"
    image: "akeb/monitoring:latest"
    restart: always
    environment:
      TZ: ${TZ:-UTC}
      NGINX_PORT: ${NGINX_PORT:-80}
      MYSQL_HOST: mysql
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-RootPassword}
      MEMCACHED_HOST: ${MEMCACHED_HOST:-memcached}
      PASSWORD_SALT: ${PASSWORD_SALT:-bHchLzC3B99Ss1213127fdw876EDghc2gkDdtg}
    volumes:
      - ./logs/php/:/var/log/php/:rw
      - ./logs/nginx/:/var/log/nginx/:rw
    ports:
      - "${NGINX_PORT:-80}:80"
    depends_on:
      mysql:
        condition: service_healthy
      memcached:
        condition: service_started

4. Start the Server

docker-compose up -d

The server will be available at http://your-server-ip

Quick Start

1. Access the Web Interface

Open your browser and navigate to your server's IP address.

2. Create Your First Worker

3. Deploy Worker Agent

On each remote server where you want to perform monitoring, run:

docker run -d \
  --name monitoring-worker \
  -e SERVER_URL=https://your-monitoring-server.com \
  -e WORKER_KEY=your_unique_worker_key_here \
  akeb/monitoring-worker:latest

4. Create Your First Monitor

You'll see the first results within a minute!

Documentation

Complete guide for installation, configuration and usage of all project features.

Read Documentation