Documentation ¶
Index ¶
- func OpenConnection(ctx context.Context, logContext, dsn string, maxConns, maxIdleConns int) (*sql.DB, error)
- func PingDB(ctx context.Context, conn *sql.DB) error
- type Collector
- type Exporter
- type Job
- type Metric
- type MetricDesc
- type MetricFamily
- func (mf MetricFamily) Collect(row map[string]interface{}, ch chan<- Metric)
- func (mf MetricFamily) ConstLabels() []*dto.LabelPair
- func (mf MetricFamily) Help() string
- func (mf MetricFamily) Labels() []string
- func (mf MetricFamily) LogContext() string
- func (mf MetricFamily) Name() string
- func (mf MetricFamily) ValueType() prometheus.ValueType
- type Query
- type Target
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func OpenConnection ¶
func OpenConnection(ctx context.Context, logContext, dsn string, maxConns, maxIdleConns int) (*sql.DB, error)
OpenConnection extracts the driver name from the DSN (expected as the URI scheme), adjusts it where necessary (e.g. some driver supported DSN formats don't include a scheme), opens a DB handle ensuring early termination if the context is closed (this is actually prevented by `database/sql` implementation), sets connection limits and returns the handle.
Below is the list of supported databases (with built in drivers) and their DSN formats. Unfortunately there is no dynamic way of loading a third party driver library (as e.g. with Java classpaths), so any driver additions require a binary rebuild.
MySQL ¶
Using the https://github.com/go-sql-driver/mysql driver, DSN format (passed to the driver stripped of the `mysql://` prefix):
mysql://username:password@protocol(host:port)/dbname?param=value
PostgreSQL ¶
Using the https://godoc.org/github.com/lib/pq driver, DSN format (passed through to the driver unchanged):
postgres://username:password@host:port/dbname?param=value
MS SQL Server ¶
Using the https://github.com/denisenkom/go-mssqldb driver, DSN format (passed through to the driver unchanged):
sqlserver://username:password@host:port/instance?param=value
Clickhouse ¶
Using the https://github.com/kshvakov/clickhouse driver, DSN format (passed to the driver with the`clickhouse://` prefix replaced with `tcp://`):
clickhouse://host:port?username=username&password=password&database=dbname¶m=value
Oracle ¶
Using the https://github.com/mattn/go-oci8 driver, DSN format (passed to the driver with the `oci8://` or `oracle://“ prefix):
oci8://user:password@host:port/sid?param1=value1¶m2=value2 oracle://user:password@host:port/sid?param1=value1¶m2=value2
Currently the parameters supported is: 1 'loc' which sets the timezone to read times in as and to marshal to when writing times to Oracle date, 2 'isolation' =READONLY,SERIALIZABLE,DEFAULT 3 'prefetch_rows' 4 'prefetch_memory' 5 'questionph' =YES,NO,TRUE,FALSE enable question-mark placeholders, default to false
don't forget to install Oracle instant client and set variables pointing to the installed libs: export LD_LIBRARY_PATH=..../instantclient_12_2 export PKG_CONFIG_PATH=..../instantclient_12_2
SQLite3 ¶
Using the github.com/mattn/go-sqlite3 driver, DSN format (passed to the driver with the `sqlite3://“ prefix):
sqlite3://file:base.sqlite?param1=value1¶m2=value2 f.e sqlite3://file:mybase.db?cache=shared&mode=rwc
func PingDB ¶
PingDB is a wrapper around sql.DB.PingContext() that terminates as soon as the context is closed.
sql.DB does not actually pass along the context to the driver when opening a connection (which always happens if the database is down) and the driver uses an arbitrary timeout which may well be longer than ours. So we run the ping call in a goroutine and terminate immediately if the context is closed.
Types ¶
type Collector ¶
type Collector interface { // Collect is the equivalent of prometheus.Collector.Collect() but takes a context to run in and a database to run on. Collect(context.Context, *sql.DB, chan<- Metric) }
Collector is a self-contained group of SQL queries and metric families to collect from a specific database. It is conceptually similar to a prometheus.Collector.
func NewCollector ¶
func NewCollector(logContext string, cc *config.CollectorConfig, constLabels []*dto.LabelPair) (Collector, errors.WithContext)
NewCollector returns a new Collector with the given configuration and database. The metrics it creates will all have the provided const labels applied.
type Exporter ¶
type Exporter interface { prometheus.Gatherer // WithContext returns a (single use) copy of the Exporter, which will use the provided context for Gather() calls. WithContext(context.Context) Exporter // Config returns the Exporter's underlying Config object. Config() *config.Config }
Exporter is a prometheus.Gatherer that gathers SQL metrics from targets and merges them with the default registry.
func NewExporter ¶
NewExporter returns a new Exporter with the provided config.
type Job ¶
type Job interface {
Targets() []Target
}
Job is a collection of targets with the same collectors applied.
func NewJob ¶
func NewJob(jc *config.JobConfig, gc *config.GlobalConfig) (Job, errors.WithContext)
NewJob returns a new Job with the given configuration.
type Metric ¶
type Metric interface { Desc() MetricDesc Write(out *dto.Metric) errors.WithContext }
A Metric models a single sample value with its meta data being exported to Prometheus.
func NewInvalidMetric ¶
func NewInvalidMetric(err errors.WithContext) Metric
NewInvalidMetric returns a metric whose Write method always returns the provided error.
type MetricDesc ¶
type MetricDesc interface { Name() string Help() string ValueType() prometheus.ValueType ConstLabels() []*dto.LabelPair Labels() []string LogContext() string }
MetricDesc is a descriptor for a family of metrics, sharing the same name, help, labes, type.
func NewAutomaticMetricDesc ¶
func NewAutomaticMetricDesc( logContext, name, help string, valueType prometheus.ValueType, constLabels []*dto.LabelPair, labels ...string) MetricDesc
NewAutomaticMetricDesc creates a MetricDesc for automatically generated metrics.
type MetricFamily ¶
type MetricFamily struct {
// contains filtered or unexported fields
}
MetricFamily implements MetricDesc for SQL metrics, with logic for populating its labels and values from sql.Rows.
func NewMetricFamily ¶
func NewMetricFamily(logContext string, mc *config.MetricConfig, constLabels []*dto.LabelPair) (*MetricFamily, errors.WithContext)
NewMetricFamily creates a new MetricFamily with the given metric config and const labels (e.g. job and instance).
func (MetricFamily) Collect ¶
func (mf MetricFamily) Collect(row map[string]interface{}, ch chan<- Metric)
Collect is the equivalent of prometheus.Collector.Collect() but takes a Query output map to populate values from.
func (MetricFamily) ConstLabels ¶
func (mf MetricFamily) ConstLabels() []*dto.LabelPair
ConstLabels implements MetricDesc.
func (MetricFamily) LogContext ¶
func (mf MetricFamily) LogContext() string
LogContext implements MetricDesc.
func (MetricFamily) ValueType ¶
func (mf MetricFamily) ValueType() prometheus.ValueType
ValueType implements MetricDesc.
type Query ¶
type Query struct {
// contains filtered or unexported fields
}
Query wraps a sql.Stmt and all the metrics populated from it. It helps extract keys and values from result rows.
func NewQuery ¶
func NewQuery(logContext string, qc *config.QueryConfig, metricFamilies ...*MetricFamily) (*Query, errors.WithContext)
NewQuery returns a new Query that will populate the given metric families.
type Target ¶
type Target interface { // Collect is the equivalent of prometheus.Collector.Collect(), but takes a context to run in. Collect(ctx context.Context, ch chan<- Metric) }
Target collects SQL metrics from a single sql.DB instance. It aggregates one or more Collectors and it looks much like a prometheus.Collector, except its Collect() method takes a Context to run in.
func NewTarget ¶
func NewTarget( logContext, name, dsn string, ccs []*config.CollectorConfig, constLabels prometheus.Labels, gc *config.GlobalConfig) ( Target, errors.WithContext)
NewTarget returns a new Target with the given instance name, data source name, collectors and constant labels. An empty target name means the exporter is runnning in single target mode: no synthetic metrics will be exported.