Ping Service

A Go-based monitoring service that periodically pings IP addresses from a configurable input source (file, HTTP, or Unix socket), applies cooldown periods to avoid frequent pings, optionally performs traceroute on successes, and outputs JSON results to a destination (file, HTTP, or socket). Includes health checks and metrics.

Features

  • Reads IPs from file, HTTP endpoint, or Unix socket.
  • Configurable ping interval and per-IP cooldown.
  • Optional traceroute (ICMP/TCP) with max hops.
  • JSON output with ping stats and traceroute details.
  • HTTP health endpoints: /health, /ready, /metrics.
  • Graceful shutdown and verbose logging support.

Configuration

Edit config.yaml:

input_file: "http://localhost:8080"  # Or file path or socket
output_file: "http://localhost:8081" # Or file path or socket
interval_seconds: 30                 # Poll interval
cooldown_minutes: 10                 # Min time between same-IP pings
enable_traceroute: true              # Enable traceroute
traceroute_max_hops: 30              # Max TTL
health_check_port: 8090              # Health server port

Building

go build -o ping_service

Installation as Service (Linux)

chmod +x install.sh
sudo ./install.sh
sudo systemctl start ping-service
  • Check status: sudo systemctl status ping-service
  • View logs: sudo journalctl -u ping-service -f
  • Stop: sudo systemctl stop ping-service

Usage

Run directly:

./ping_service -config config.yaml -verbose

For testing HTTP I/O:

  • Run python3 input_http_server.py (serves IPs on port 8080).
  • Run python3 output_http_server.py (receives results on port 8081).

Health Checks

  • curl http://localhost:8090/health (status, uptime, stats)
  • curl http://localhost:8090/ready (readiness)
  • curl http://localhost:8090/metrics (Prometheus metrics)

Version: 0.0.3 Dependencies: go-ping/ping, gopkg.in/yaml.v

Description
No description provided
Readme 266 KiB
Languages
Go 92.1%
Python 6.6%
Shell 1.3%