{"id":36970328,"url":"https://github.com/gdagil/vmprober","last_synced_at":"2026-01-13T21:47:10.170Z","repository":{"id":330973934,"uuid":"1121736260","full_name":"gdagil/vmprober","owner":"gdagil","description":"Network connectivity and service availability prober with WAL-backed metrics export to VictoriaMetrics","archived":false,"fork":false,"pushed_at":"2025-12-30T14:20:24.000Z","size":535,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-01T13:22:34.948Z","etag":null,"topics":["devops","dns-probe","golang","grpc-probe","health-check","http-probe","icmp","infrastructure","metrics","monitoring","network-monitoring","observability","probing","prometheus","sre","tcp-probes","victoriametrics"],"latest_commit_sha":null,"homepage":"https://gdagil.github.io/vmprober/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gdagil.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-23T13:20:26.000Z","updated_at":"2025-12-30T14:20:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gdagil/vmprober","commit_stats":null,"previous_names":["gdagil/vmprober"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/gdagil/vmprober","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdagil%2Fvmprober","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdagil%2Fvmprober/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdagil%2Fvmprober/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdagil%2Fvmprober/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gdagil","download_url":"https://codeload.github.com/gdagil/vmprober/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdagil%2Fvmprober/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28401089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devops","dns-probe","golang","grpc-probe","health-check","http-probe","icmp","infrastructure","metrics","monitoring","network-monitoring","observability","probing","prometheus","sre","tcp-probes","victoriametrics"],"created_at":"2026-01-13T21:47:09.203Z","updated_at":"2026-01-13T21:47:10.165Z","avatar_url":"https://github.com/gdagil.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/banner-dark.svg\" alt=\"VMProber Banner\" width=\"700\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eHigh-performance network probe monitoring for Prometheus \u0026 VictoriaMetrics\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://golang.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/Go-1.24+-00ADD8?style=flat-square\u0026logo=go\u0026logoColor=white\" alt=\"Go Version\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-green?style=flat-square\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/gdagil/vmprober/releases\"\u003e\u003cimg src=\"https://img.shields.io/badge/Version-1.0.0-blue?style=flat-square\" alt=\"Version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/gdagil/vmprober/actions\"\u003e\u003cimg src=\"https://img.shields.io/badge/Build-Passing-success?style=flat-square\" alt=\"Build Status\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e •\n  \u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e •\n  \u003ca href=\"#api\"\u003eAPI\u003c/a\u003e •\n  \u003ca href=\"#metrics\"\u003eMetrics\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Overview\n\n**VMProber** is a standalone Go application designed for comprehensive network and service monitoring. It supports TCP, UDP, ICMP, HTTP/HTTPS, DNS, and gRPC probes for testing connectivity, availability, and health of your infrastructure. VMProber works with both pull (Prometheus scrape) and push (VictoriaMetrics remote write) models for exporting metrics, making it flexible for various monitoring architectures.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo-dark.svg\" alt=\"VMProber Logo\" width=\"200\"\u003e\n\u003c/p\u003e\n\n## Features\n\n| Feature | Description |\n|---------|-------------|\n| 🔌 **Multi-Protocol Probes** | TCP, UDP, ICMP, HTTP/HTTPS, DNS, and gRPC probe support for comprehensive connectivity and service testing |\n| 📊 **Dual Export Modes** | Pull mode (Prometheus `/metrics`) and Push mode (VictoriaMetrics) |\n| 📝 **Write-Ahead Log (WAL)** | Fault-tolerant metric buffering for reliable delivery |\n| ⚡ **High Performance** | Efficient scheduler with rate limiting and concurrent probe execution |\n| 🔄 **Hot Reload** | Configuration changes without service restart |\n| 🏥 **Health Checks** | Built-in `/health` and `/ready` endpoints for orchestration |\n| 🎨 **Web Dashboard** | Modern, responsive UI for real-time monitoring |\n| 📈 **Rich Metrics** | Detailed probe metrics with histograms, counters, and gauges |\n\n## Quick Start\n\n### Prerequisites\n\n- Go 1.24 or higher\n- Docker (optional, for containerized deployment)\n\n### Build from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/gdagil/vmprober.git\ncd vmprober\n\n# Install dependencies\nmake deps\n\n# Build the binary\nmake build\n```\n\n### Run\n\n```bash\n# Run with example configuration\n./bin/vmprober --config=config/vmprober/config.yaml.example\n```\n\n### Docker\n\n```bash\n# Build Docker image\nmake docker-build\n\n# Run with Docker Compose (includes VictoriaMetrics + Grafana)\ndocker-compose up -d\n```\n\n### Using Pre-built Binaries\n\nDownload the latest release for your platform from [Releases](https://github.com/gdagil/vmprober/releases):\n\n- `vmprober-linux-amd64` - Linux (x86_64)\n- `vmprober-darwin` - macOS (ARM64/x86_64)\n\n## Project Structure\n\n```\nvmprober/\n├── cmd/vmprober/          # Application entry point\n├── internal/\n│   ├── adapter/           # VictoriaMetrics push adapter\n│   ├── config/            # Configuration management\n│   ├── metrics/           # Prometheus metrics collector\n│   ├── normalizer/        # Result normalization \u0026 enrichment\n│   ├── observability/     # Logging, tracing, profiling\n│   ├── probe/             # Probe implementations (TCP, UDP, ICMP, HTTP, DNS, gRPC)\n│   ├── scheduler/         # Task scheduler with priorities\n│   ├── server/            # HTTP server \u0026 web dashboard\n│   ├── shutdown/          # Graceful shutdown manager\n│   ├── types/             # Common types\n│   └── wal/               # Write-Ahead Log system\n├── pkg/interfaces/        # Public interfaces\n├── config/                # Configuration examples\n└── docs/                  # Documentation \u0026 assets (GitHub Pages)\n```\n\n## Configuration\n\nVMProber uses YAML configuration. Copy and modify the example:\n\n```bash\ncp config/vmprober/config.yaml.example config.yaml\n```\n\n### Key Configuration Sections\n\n```yaml\n# HTTP Server\nlisten:\n  address: \":8429\"\n\n# Pull mode (Prometheus scrape)\npull:\n  enabled: true\n\n# Push mode (VictoriaMetrics)\npush:\n  enabled: true\n  endpoint: \"http://vminsert:8480/insert/0/prometheus/api/v1/import\"\n  interval: 30s\n  batch_size: 1000\n\n# Scheduler settings\nscheduler:\n  workers: 10\n  queue_size: 1000\n\n# Monitoring targets\ntargets:\n  static:\n    # TCP probe\n    - host: \"example.com\"\n      port: 443\n      proto: tcp\n      interval: 30s\n      timeout: 5s\n\n    # HTTP/HTTPS probe\n    - host: \"api.example.com\"\n      port: 443\n      proto: https\n      interval: 30s\n      http:\n        method: GET\n        path: /health\n        expected_status_code: 200\n\n    # DNS probe\n    - host: \"8.8.8.8\"\n      port: 53\n      proto: dns\n      dns:\n        query_name: \"google.com\"\n        query_type: A\n\n    # gRPC probe\n    - host: \"grpc.example.com\"\n      port: 50051\n      proto: grpc\n      grpc:\n        service: \"my.Service\"\n        expected_status: SERVING\n\n# Default probe settings\nprobes:\n  tcp:\n    connect_timeout: 5s\n  http:\n    method: GET\n    expected_status_code: 200\n  dns:\n    query_type: A\n    protocol: udp\n  grpc:\n    expected_status: SERVING\n\n# Metrics configuration\nmetrics:\n  namespace: \"vmprober\"\n  subsystem: \"probe\"\n```\n\nSee [Configuration Guide](docs/getting-started/configuration.md) for detailed documentation.\n\n## API Endpoints\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/` | GET | Web dashboard |\n| `/metrics` | GET | Prometheus metrics |\n| `/health` | GET | Health check (liveness) |\n| `/ready` | GET | Readiness check |\n| `/api/v1/stats` | GET | Probe statistics JSON |\n| `/api/v1/config` | GET | Current configuration |\n| `/debug/pprof/` | GET | Go profiling endpoints |\n\n### Example Requests\n\n```bash\n# Get Prometheus metrics\ncurl http://localhost:8429/metrics\n\n# Health check\ncurl http://localhost:8429/health\n\n# Get probe statistics\ncurl http://localhost:8429/api/v1/stats\n```\n\n## Metrics\n\nVMProber exports comprehensive metrics with the `vmprober_` prefix:\n\n### Probe Metrics\n\n| Metric | Type | Description |\n|--------|------|-------------|\n| `vmprober_probe_success_total` | Counter | Total successful probes |\n| `vmprober_probe_failure_total` | Counter | Total failed probes |\n| `vmprober_probe_attempts_total` | Counter | Total probe attempts |\n| `vmprober_probe_rtt_seconds` | Histogram | Round-trip time distribution |\n| `vmprober_probe_up` | Gauge | Current probe status (1=up, 0=down) |\n\n### Scheduler Metrics\n\n| Metric | Type | Description |\n|--------|------|-------------|\n| `vmprober_scheduler_jobs_total` | Gauge | Total scheduled jobs |\n| `vmprober_scheduler_jobs_running` | Gauge | Currently running jobs |\n| `vmprober_scheduler_jobs_failed` | Counter | Failed job executions |\n\n### WAL Metrics\n\n| Metric | Type | Description |\n|--------|------|-------------|\n| `vmprober_wal_segments_total` | Gauge | WAL segment count |\n| `vmprober_wal_bytes_written` | Counter | Bytes written to WAL |\n| `vmprober_wal_bytes_sent` | Counter | Bytes sent from WAL |\n\n## Deployment\n\n### Docker Compose (Recommended)\n\nThe included `docker-compose.yml` provides a complete monitoring stack:\n\n- **VMProber** - Probe monitoring service\n- **VictoriaMetrics** - Time-series database (vmstorage, vminsert, vmselect)\n- **Grafana** - Visualization with pre-configured dashboards\n\n```bash\n# Start the full stack\ndocker-compose up -d\n\n# View logs\ndocker-compose logs -f vmprober\n\n# Stop\ndocker-compose down\n```\n\n### Kubernetes\n\nSee [Kubernetes Deployment Guide](docs/operations/deployment.md) for Helm charts and manifests.\n\n### Systemd\n\n```bash\n# Copy binary\nsudo cp bin/vmprober /usr/local/bin/\n\n# Create systemd service\nsudo tee /etc/systemd/system/vmprober.service \u003c\u003c EOF\n[Unit]\nDescription=VMProber Network Monitor\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/local/bin/vmprober --config=/etc/vmprober/config.yaml\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\n# Enable and start\nsudo systemctl enable vmprober\nsudo systemctl start vmprober\n```\n\n## Development\n\n### Requirements\n\n- Go 1.24+\n- Make\n- Docker \u0026 Docker Compose (for integration tests)\n\n### Commands\n\n```bash\n# Install dependencies\nmake deps\n\n# Run tests\nmake test\n\n# Run tests with coverage\nmake test-coverage\n\n# Format code\nmake fmt\n\n# Run linter\nmake lint\n\n# Build all platforms\nmake build-all\n\n# Run E2E tests\nmake e2e-test\n```\n\n### Running Locally\n\n```bash\n# Start VictoriaMetrics stack\ndocker-compose up -d vmstorage vminsert vmselect grafana\n\n# Run VMProber locally\ngo run ./cmd/vmprober --config=config/vmprober/config.yaml.example\n```\n\n## Architecture\n\n```mermaid\nflowchart TB\n    subgraph VMProber[\"VMProber\"]\n        subgraph Probes[\"Probe Layer\"]\n            TCP[\"TCP Probe\"]\n            UDP[\"UDP Probe\"]\n            ICMP[\"ICMP Probe\"]\n            HTTP[\"HTTP Probe\"]\n            DNS[\"DNS Probe\"]\n            gRPC[\"gRPC Probe\"]\n        end\n\n        Scheduler[\"Scheduler\"]\n\n        Probes --\u003e Scheduler\n\n        Scheduler --\u003e Normalizer[\"Normalizer + Enricher\"]\n        Scheduler --\u003e Metrics[\"Metrics Collector\"]\n\n        Normalizer --\u003e WAL[\"WAL Buffer\"]\n        Metrics --\u003e MetricsEndpoint[\"/metrics endpoint\"]\n\n        WAL --\u003e VMAdapter[\"VM Adapter\"]\n    end\n\n    Prometheus[\"Prometheus\"] -.-\u003e|scrape| MetricsEndpoint\n    VMAdapter --\u003e|push| VictoriaMetrics[\"VictoriaMetrics\"]\n```\n\n## Documentation\n\nFull documentation is available at:\n- **Online**: [VMProber Documentation](https://gdagil.github.io/vmprober/)\n- **Local**: See the `docs/` directory\n\n### Documentation Sections\n\n- [Getting Started](docs/getting-started/) - Installation, quick start, configuration\n- [Architecture](docs/architecture/) - System design and principles\n- [Components](docs/components/) - Detailed component documentation\n- [Operations](docs/operations/) - Deployment, Docker, troubleshooting\n- [Development](docs/development/) - Development setup and guidelines\n- [Reference](docs/reference/) - API and metrics reference\n- [Guides](docs/guides/) - Step-by-step tutorials\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for:\n\n- Code of Conduct\n- Development workflow\n- Coding standards\n- Pull request process\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=gdagil/vmprober\u0026type=date\u0026legend=top-left)](https://www.star-history.com/#gdagil/vmprober\u0026type=date\u0026legend=top-left)\n\n## Acknowledgments\n\n- [VictoriaMetrics](https://victoriametrics.com/) - High-performance time-series database\n- [Prometheus](https://prometheus.io/) - Monitoring system and TSDB\n- [Grafana](https://grafana.com/) - Observability platform\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo-inline-dark.svg\" alt=\"VMProber\" width=\"150\"\u003e\n  \u003cbr\u003e\n  \u003csub\u003eMade with ❤️ by gdagil and llms\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgdagil%2Fvmprober","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgdagil%2Fvmprober","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgdagil%2Fvmprober/lists"}