-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from appwrite/initial-commit
Initial commit
- Loading branch information
Showing
8 changed files
with
603 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
BETTER_STACK_URL= | ||
CHECK_INTERVAL=10 | ||
CPU_LIMIT=90 | ||
MEMORY_LIMIT=90 | ||
DISK_LIMIT=85 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
name: Docker Build and Publish | ||
|
||
on: | ||
release: | ||
types: [published] | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout the repo | ||
uses: actions/checkout@v4 | ||
|
||
- name: Login to DockerHub | ||
uses: docker/login-action@v1 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Build and push | ||
uses: docker/build-push-action@v5 | ||
with: | ||
context: . | ||
push: true | ||
tags: ghcr.io/appwrite/monitoring:${{ env.TAG }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
FROM golang:1.21-alpine AS builder | ||
|
||
WORKDIR /app | ||
|
||
# Install build dependencies | ||
RUN apk add --no-cache gcc musl-dev | ||
|
||
# Copy go mod files | ||
COPY go.mod go.sum ./ | ||
|
||
# Download dependencies | ||
RUN go mod download | ||
|
||
# Copy source code | ||
COPY . . | ||
|
||
# Build the application | ||
RUN CGO_ENABLED=1 GOOS=linux go build -a -o monitoring . | ||
|
||
# Copy the monitoring binary to /usr/local/bin to make it available in PATH | ||
COPY monitoring /usr/local/bin/monitoring | ||
RUN chmod +x /usr/local/bin/monitoring | ||
|
||
# Final stage | ||
FROM alpine:3.19 | ||
|
||
WORKDIR /app | ||
|
||
# Install runtime dependencies | ||
RUN apk add --no-cache ca-certificates | ||
|
||
# Copy binary from builder | ||
COPY --from=builder /app/monitoring . |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,133 @@ | ||
# monitoring | ||
A lightweight system monitoring container that tracks resource usage and triggers incidents | ||
# System Monitoring | ||
|
||
A lightweight system monitoring tool that tracks CPU, memory, and disk usage across your infrastructure. When resource usage exceeds defined thresholds, it creates incidents in BetterStack (formerly BetterUptime). | ||
|
||
## Features | ||
|
||
- CPU usage monitoring | ||
- Memory usage monitoring | ||
- Disk usage monitoring (root and mounted volumes) | ||
- Automatic incident creation and resolution | ||
- Configurable thresholds via CLI | ||
- Docker-based deployment | ||
|
||
## Command Line Usage | ||
|
||
The monitoring tool is configured through command-line flags: | ||
|
||
```bash | ||
monitoring [flags] | ||
|
||
Flags: | ||
-url string | ||
BetterStack webhook URL (required) | ||
-interval int | ||
Check interval in seconds (default: 300) | ||
-cpu-limit float | ||
CPU usage threshold percentage (default: 90) | ||
-memory-limit float | ||
Memory usage threshold percentage (default: 90) | ||
-disk-limit float | ||
Disk usage threshold percentage (default: 85) | ||
-help | ||
Display help information | ||
``` | ||
|
||
### Examples | ||
|
||
```bash | ||
# Basic usage with required URL | ||
monitoring --url=https://betterstack.com/webhook/xyz | ||
|
||
# Custom thresholds | ||
monitoring --url=https://betterstack.com/webhook/xyz \ | ||
--cpu-limit=95 \ | ||
--memory-limit=85 \ | ||
--disk-limit=80 | ||
|
||
# More frequent checks (every minute) | ||
monitoring --url=https://betterstack.com/webhook/xyz --interval=60 | ||
``` | ||
|
||
## Docker Deployment | ||
|
||
### Using Docker Run | ||
|
||
```bash | ||
docker run -d \ | ||
--name monitoring \ | ||
--privileged \ | ||
--pid=host \ | ||
-v /:/host:ro \ | ||
ghcr.io/appwrite/monitoring:latest \ | ||
monitoring \ | ||
--url=https://betterstack.com/webhook/xyz \ | ||
--interval=300 \ | ||
--cpu-limit=90 \ | ||
--memory-limit=90 \ | ||
--disk-limit=85 | ||
``` | ||
|
||
### Using Docker Compose | ||
|
||
The docker-compose.yml file is configured with default parameters that you can modify as needed: | ||
|
||
```bash | ||
docker-compose up -d | ||
``` | ||
|
||
To modify the parameters, edit the command section in docker-compose.yml: | ||
```yaml | ||
command: | ||
- monitoring | ||
- "--url=https://betterstack.com/webhook/xyz" | ||
- "--interval=10" | ||
- "--cpu-limit=90" | ||
- "--memory-limit=80" | ||
- "--disk-limit=85" | ||
``` | ||
## Building from Source | ||
1. Clone the repository: | ||
```bash | ||
git clone https://github.com/appwrite/monitoring.git | ||
cd monitoring | ||
``` | ||
|
||
2. Build the binary: | ||
```bash | ||
go build -o monitoring | ||
``` | ||
|
||
3. Run the monitoring tool: | ||
```bash | ||
monitoring --url=https://betterstack.com/webhook/xyz | ||
``` | ||
|
||
## Development | ||
|
||
### Requirements | ||
- Go 1.21 or later | ||
- Docker and Docker Compose (for containerized deployment) | ||
|
||
### Local Development | ||
1. Install dependencies: | ||
```bash | ||
go mod download | ||
``` | ||
|
||
2. Build and run: | ||
```bash | ||
go build -o monitoring | ||
monitoring --url=https://betterstack.com/webhook/xyz | ||
``` | ||
|
||
### Docker Development | ||
``` | ||
docker compose up -d | ||
``` | ||
|
||
## License | ||
|
||
MIT License - see the [LICENSE](LICENSE) file for details |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
version: '3.8' | ||
|
||
services: | ||
monitoring: | ||
build: | ||
context: . | ||
dockerfile: Dockerfile | ||
command: | ||
- monitoring | ||
- "--url=${BETTER_STACK_URL}" | ||
- "--interval=10" | ||
- "--cpu-limit=90" | ||
- "--memory-limit=80" | ||
- "--disk-limit=85" | ||
volumes: | ||
- /:/host:ro | ||
pid: host | ||
privileged: true | ||
restart: unless-stopped |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
module github.com/appwrite/monitoring | ||
|
||
go 1.19 | ||
|
||
require github.com/shirou/gopsutil/v3 v3.24.1 | ||
|
||
require ( | ||
github.com/go-ole/go-ole v1.2.6 // indirect | ||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect | ||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect | ||
github.com/shoenig/go-m1cpu v0.1.6 // indirect | ||
github.com/tklauser/go-sysconf v0.3.12 // indirect | ||
github.com/tklauser/numcpus v0.6.1 // indirect | ||
github.com/yusufpapurcu/wmi v1.2.3 // indirect | ||
golang.org/x/sys v0.16.0 // indirect | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= | ||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= | ||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= | ||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= | ||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= | ||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= | ||
github.com/shirou/gopsutil/v3 v3.24.1 h1:R3t6ondCEvmARp3wxODhXMTLC/klMa87h2PHUw5m7QI= | ||
github.com/shirou/gopsutil/v3 v3.24.1/go.mod h1:UU7a2MSBQa+kW1uuDq8DeEBS8kmrnQwsv2b5O513rwU= | ||
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= | ||
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= | ||
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= | ||
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= | ||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | ||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= | ||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | ||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= | ||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= | ||
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= | ||
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= | ||
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= | ||
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= | ||
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= | ||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= | ||
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= |
Oops, something went wrong.