A comprehensive Remote Monitoring and Management (RMM) system built on .NET 9 with SignalR for real-time communication between agents and the central hub.
Signal9 is designed as a modern, cloud-native RMM solution with the following components:
- Signal9.Agent - Console application that runs on client machines to collect telemetry and execute commands
- Signal9.Hub - SignalR hub service for real-time communication with agents
- Signal9.WebPortal - Web-based management interface for monitoring and controlling agents
- Signal9.Functions - Azure Functions for backend data processing and API operations
- Signal9.Shared - Common models, interfaces, and utilities shared across components
- Azure Container Apps - Hosting for Hub and Web Portal
- Azure Functions - Serverless backend processing
- Azure SignalR Service - Managed SignalR for scalable real-time communication
- Azure SQL Database - Relational data (agents, users, configurations)
- Azure Cosmos DB - Non-relational data (telemetry, logs, events)
- Azure Service Bus - Message queuing for commands and events
- Azure Key Vault - Secrets and configuration management
- Azure Application Insights - Monitoring and diagnostics
- Azure Container Registry - Container image storage
- Real-time system monitoring (CPU, memory, disk, network)
- Remote command execution
- Event log collection
- System information reporting
- Automatic reconnection with exponential backoff
- Configurable telemetry collection intervals
- Real-time agent status monitoring
- Command dispatching to agents
- Telemetry data aggregation
- Multi-tenant support
- Role-based access control
- Scalable architecture with Azure SignalR
- Managed Identity authentication
- Encrypted communication
- Secure secret storage in Key Vault
- Network-level security with Virtual Networks
- .NET 9 SDK
- Azure CLI
- Azure Developer CLI (azd)
- Docker (for containerization)
- Visual Studio 2022 or VS Code
-
Clone the repository
git clone <repository-url> cd Signal9
-
Restore dependencies
dotnet restore
-
Build the solution
dotnet build
-
Run the Hub locally
cd src/Signal9.Hub dotnet run -
Run the Agent locally
cd src/Signal9.Agent dotnet run
-
Initialize Azure Developer CLI
azd init
-
Deploy to Azure
azd up
-
Configure SQL password when prompted
{
"AgentConfiguration": {
"HubUrl": "https://your-hub-url/agentHub",
"TenantCode": "your-tenant",
"GroupName": "default",
"HeartbeatInterval": 30,
"TelemetryInterval": 60,
"ReconnectDelay": 5,
"MaxReconnectAttempts": 10
}
}The hub automatically configures itself using Azure services when deployed to Azure:
- SignalR connection from Azure SignalR Service
- Key Vault for secrets
- Application Insights for monitoring
Signal9/
├── src/
│ ├── Signal9.Agent/ # RMM Agent console application
│ ├── Signal9.Hub/ # SignalR Hub web service
│ ├── Signal9.WebPortal/ # Management web application
│ ├── Signal9.Functions/ # Azure Functions
│ └── Signal9.Shared/ # Shared libraries
├── infra/ # Bicep infrastructure templates
├── tests/ # Unit and integration tests
├── docs/ # Documentation
├── azure.yaml # Azure Developer CLI configuration
└── Signal9.sln # Solution file
- Update
TelemetryDtoinSignal9.Shared/DTOs/AgentDTOs.cs - Implement collection logic in
TelemetryCollector.cs - Update the hub to handle new metrics
- Define command type in
AgentCommand.cs - Implement execution logic in
AgentService.ExecuteCommandAsync - Add command dispatching in the hub or web portal
Entity Framework migrations are handled automatically during deployment.
- Application Insights - Performance monitoring and diagnostics
- Azure Monitor - Infrastructure monitoring
- Log Analytics - Centralized logging
- Azure Alerts - Proactive notifications
- All inter-service communication uses Managed Identity
- Secrets are stored in Azure Key Vault
- Network traffic is encrypted with TLS
- SQL connections use Azure AD authentication
- RBAC controls access to Azure resources
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and questions:
- Create an issue in the repository
- Review the documentation in the
/docsfolder - Check Azure Monitor logs for runtime issues