feat: db checker #219

Open
opened 2026-03-28 04:22:26 +00:00 by mfreeman451 · 0 comments
Owner

Imported from GitHub.

Original GitHub issue: #606
Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/issues/606
Original created: 2025-04-14T13:44:47Z


Monitors database health (e.g., MySQL, PostgreSQL, Redis) by connecting, running a simple query (e.g., SELECT 1), and checking latency/connectivity. Reports availability and basic metrics (e.g., connection time) to agent.

Implementation:

  • Logic: Use database/sql with drivers (github.com/go-sql-driver/mysql, github.com/jackc/pgx/v5). Run SELECT 1 or equivalent, measure latency.

  • Data: Store in timeseries_metrics:

INSERT INTO timeseries_metrics (poller_id, name, value, type, timestamp, metadata)
VALUES ('host1', 'db_mysql', 1.0, 'db', '2025-04-14T12:00:00Z', '{"latency_ms": 5.0}');

Config (/etc/serviceradar/checkers/db.json):


{
  "listen_addr": ":50085",
  "security": {
    "mode": "mtls",
    "cert_dir": "/etc/serviceradar/certs",
    "role": "checker",
    "tls": {
      "cert_file": "db-checker.pem",
      "key_file": "db-checker-key.pem",
      "ca_file": "root.pem"
    }
  },
  "targets": [
    {
      "name": "mysql-db",
      "driver": "mysql",
      "dsn": "user:pass@tcp(localhost:3306)/db",
      "query": "SELECT 1",
      "poll_interval": "30s",
      "timeout": "5s"
    }
  ]
}

Poller:

{
  "agents": {
    "local-agent": {
      "checks": [
        {
          "service_type": "db",
          "service_name": "mysql-db",
          "details": "{\"driver\": \"mysql\", \"dsn\": \"user:pass@tcp(localhost:3306)/db\", \"query\": \"SELECT 1\"}"
        }
      ]
    }
  }
}

Storage: Add processDBMetrics to core/server.go, storing health and latency.

Imported from GitHub. Original GitHub issue: #606 Original author: @mfreeman451 Original URL: https://github.com/carverauto/serviceradar/issues/606 Original created: 2025-04-14T13:44:47Z --- Monitors database health (e.g., MySQL, PostgreSQL, Redis) by connecting, running a simple query (e.g., SELECT 1), and checking latency/connectivity. Reports availability and basic metrics (e.g., connection time) to agent. # Implementation: * Logic: Use database/sql with drivers (github.com/go-sql-driver/mysql, github.com/jackc/pgx/v5). Run SELECT 1 or equivalent, measure latency. * Data: Store in timeseries_metrics: ```sql INSERT INTO timeseries_metrics (poller_id, name, value, type, timestamp, metadata) VALUES ('host1', 'db_mysql', 1.0, 'db', '2025-04-14T12:00:00Z', '{"latency_ms": 5.0}'); ``` **Config (/etc/serviceradar/checkers/db.json):** ```json { "listen_addr": ":50085", "security": { "mode": "mtls", "cert_dir": "/etc/serviceradar/certs", "role": "checker", "tls": { "cert_file": "db-checker.pem", "key_file": "db-checker-key.pem", "ca_file": "root.pem" } }, "targets": [ { "name": "mysql-db", "driver": "mysql", "dsn": "user:pass@tcp(localhost:3306)/db", "query": "SELECT 1", "poll_interval": "30s", "timeout": "5s" } ] } ``` **Poller:** ```json { "agents": { "local-agent": { "checks": [ { "service_type": "db", "service_name": "mysql-db", "details": "{\"driver\": \"mysql\", \"dsn\": \"user:pass@tcp(localhost:3306)/db\", \"query\": \"SELECT 1\"}" } ] } } } ``` **Storage:** Add processDBMetrics to core/server.go, storing health and latency.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
carverauto/serviceradar#219
No description provided.