119 lines
3.1 KiB
Markdown
119 lines
3.1 KiB
Markdown
# EonaCat.LogStack.Status 🟢
|
|
|
|
A self-hosted, application monitoring platform.
|
|
|
|
## Features
|
|
|
|
| Category | Details |
|
|
|----------|---------|
|
|
| **TCP Monitor** | Port connectivity checks |
|
|
| **UDP Monitor** | UDP reachability checks |
|
|
| **HTTP/HTTPS Monitor** | Full HTTP status monitoring |
|
|
| **App (Local)** | Monitor local processes by name |
|
|
| **App (Remote)** | Remote TCP-based app health |
|
|
| **Certificate Manager** | Track SSL certs, expiry, issuer |
|
|
| **Certificate Checker** | Auto-refresh cert details hourly |
|
|
| **Log Aggregator** | Ingest logs from any app via HTTP |
|
|
| **Log Viewer** | Search, filter, paginate log stream |
|
|
| **Dashboard** | Live status overview with uptime bars |
|
|
| **Admin Panel** | Full CRUD for all resources |
|
|
| **Visibility Control** | Per-monitor public/private toggle |
|
|
| **REST API** | Log ingestion + status endpoints |
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8)
|
|
|
|
### Run
|
|
|
|
```bash
|
|
cd EonaCat.LogStack.Status
|
|
dotnet run
|
|
```
|
|
|
|
Open: http://localhost:8000
|
|
|
|
### Default Admin Password
|
|
`adminEonaCat` — **Change this immediately** in Settings!
|
|
|
|
## Log Ingestion
|
|
|
|
Send logs from any app:
|
|
|
|
```bash
|
|
# Single log
|
|
curl -X POST http://localhost:8000/api/logs/ingest \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"source":"my-app","level":"error","message":"Something broke"}'
|
|
|
|
# Batch
|
|
curl -X POST http://localhost:8000/api/logs/batch \
|
|
-H "Content-Type: application/json" \
|
|
-d '[{"source":"app","level":"info","message":"Started"},{"source":"app","level":"warn","message":"High memory"}]'
|
|
```
|
|
|
|
### EonaCat.LogStack HTTP Flow
|
|
```csharp
|
|
var logger = new LogBuilder().WriteToHttp("http://localhost:8000/api/logs/eonacat").Build();
|
|
```
|
|
|
|
### Serilog (.NET)
|
|
```csharp
|
|
// Install: Serilog.Sinks.Http
|
|
Log.Logger = new LoggerConfiguration()
|
|
.WriteTo.Http("http://localhost:8000/api/logs/serilog")
|
|
.CreateLogger();
|
|
```
|
|
|
|
### Python
|
|
```python
|
|
import requests
|
|
requests.post("http://localhost:8000/api/logs/ingest", json={
|
|
"source": "my-python-app", "level": "info", "message": "Hello"
|
|
})
|
|
```
|
|
|
|
---
|
|
|
|
## API Endpoints
|
|
|
|
| Method | Path | Description |
|
|
|--------|------|-------------|
|
|
| `GET` | `/api/status/summary` | Dashboard stats |
|
|
| `GET` | `/api/monitors` | All public monitors |
|
|
| `GET` | `/api/monitors/{id}/check` | Trigger check |
|
|
| `POST` | `/api/logs/ingest` | Ingest single log |
|
|
| `POST` | `/api/logs/batch` | Ingest log array |
|
|
| `POST` | `/api/logs/eonacat` | EonaCat.LogStack HTTP Flow |
|
|
| `POST` | `/api/logs/serilog` | Serilog HTTP sink |
|
|
| `GET` | `/api/logs` | Query logs (admin) |
|
|
|
|
---
|
|
|
|
## Visibility Model
|
|
|
|
- **Public monitors** are visible to everyone
|
|
- **Private monitors** are visible to admins only
|
|
- **Log viewer** is admin-only
|
|
- **Uptime %** can be toggled public/private in Settings
|
|
- **Certificates** are always visible (toggle per cert coming soon)
|
|
|
|
---
|
|
|
|
## Production Deployment
|
|
|
|
```bash
|
|
dotnet publish -c Release -o ./publish
|
|
# Run with:
|
|
./publish/EonaCat.LogStack.Status
|
|
```
|
|
|
|
Or with Docker:
|
|
```dockerfile
|
|
FROM mcr.microsoft.com/dotnet/aspnet:8.0
|
|
WORKDIR /app
|
|
COPY ./publish .
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["dotnet", "EonaCat.LogStack.Status.dll"]
|
|
``` |