diff --git a/cmd/postgres_exporter/postgres_exporter.go b/cmd/postgres_exporter/postgres_exporter.go index af620023..11fece77 100644 --- a/cmd/postgres_exporter/postgres_exporter.go +++ b/cmd/postgres_exporter/postgres_exporter.go @@ -161,6 +161,23 @@ func dumpMaps() { } var builtinMetricMaps = map[string]intermediateMetricMap{ + "pg_stat_bgwriter": { + map[string]ColumnMapping{ + "checkpoints_timed": {COUNTER, "Number of scheduled checkpoints that have been performed", nil, nil}, + "checkpoints_req": {COUNTER, "Number of requested checkpoints that have been performed", nil, nil}, + "checkpoint_write_time": {COUNTER, "Total amount of time that has been spent in the portion of checkpoint processing where files are written to disk, in milliseconds", nil, nil}, + "checkpoint_sync_time": {COUNTER, "Total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk, in milliseconds", nil, nil}, + "buffers_checkpoint": {COUNTER, "Number of buffers written during checkpoints", nil, nil}, + "buffers_clean": {COUNTER, "Number of buffers written by the background writer", nil, nil}, + "maxwritten_clean": {COUNTER, "Number of times the background writer stopped a cleaning scan because it had written too many buffers", nil, nil}, + "buffers_backend": {COUNTER, "Number of buffers written directly by a backend", nil, nil}, + "buffers_backend_fsync": {COUNTER, "Number of times a backend had to execute its own fsync call (normally the background writer handles those even when the backend does its own write)", nil, nil}, + "buffers_alloc": {COUNTER, "Number of buffers allocated", nil, nil}, + "stats_reset": {COUNTER, "Time at which these statistics were last reset", nil, nil}, + }, + true, + 0, + }, "pg_stat_database": { map[string]ColumnMapping{ "datid": {LABEL, "OID of a database", nil, nil}, @@ -525,6 +542,8 @@ func WithConstantLabels(s string) ExporterOpt { e.constantLabels = parseConstLabels(s) if e.collectorName != "" { e.constantLabels["collector"] = e.collectorName + } else { + e.constantLabels["collector"] = "exporter" } } } diff --git a/collector/pg_stat_bgwriter.go b/collector/pg_stat_bgwriter.go index e7878050..5ff1c041 100644 --- a/collector/pg_stat_bgwriter.go +++ b/collector/pg_stat_bgwriter.go @@ -38,133 +38,133 @@ var statBGWriter = map[string]*prometheus.Desc{ "checkpoints_timed": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "checkpoints_timed_total"), "Number of scheduled checkpoints that have been performed", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "checkpoints_req": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "checkpoints_req_total"), "Number of requested checkpoints that have been performed", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "checkpoint_write_time": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "checkpoint_write_time_total"), "Total amount of time that has been spent in the portion of checkpoint processing where files are written to disk, in milliseconds", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "checkpoint_sync_time": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "checkpoint_sync_time_total"), "Total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk, in milliseconds", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "buffers_checkpoint": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_checkpoint_total"), "Number of buffers written during checkpoints", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "buffers_clean": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_clean_total"), "Number of buffers written by the background writer", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "maxwritten_clean": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "maxwritten_clean_total"), "Number of times the background writer stopped a cleaning scan because it had written too many buffers", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "buffers_backend": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_backend_total"), "Number of buffers written directly by a backend", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "buffers_backend_fsync": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_backend_fsync_total"), "Number of times a backend had to execute its own fsync call (normally the background writer handles those even when the backend does its own write)", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "buffers_alloc": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_alloc_total"), "Number of buffers allocated", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "stats_reset": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "stats_reset_total"), "Time at which these statistics were last reset", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_checkpoints_timed": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "checkpoints_timed"), "Number of scheduled checkpoints that have been performed", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_checkpoints_req": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "checkpoints_req"), "Number of requested checkpoints that have been performed", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_checkpoint_write_time": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "checkpoint_write_time"), "Total amount of time that has been spent in the portion of checkpoint processing where files are written to disk, in milliseconds", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_checkpoint_sync_time": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "checkpoint_sync_time"), "Total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk, in milliseconds", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_buffers_checkpoint": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_checkpoint"), "Number of buffers written during checkpoints", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_buffers_clean": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_clean"), "Number of buffers written by the background writer", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_maxwritten_clean": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "maxwritten_clean"), "Number of times the background writer stopped a cleaning scan because it had written too many buffers", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_buffers_backend": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_backend"), "Number of buffers written directly by a backend", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_buffers_backend_fsync": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_backend_fsync"), "Number of times a backend had to execute its own fsync call (normally the background writer handles those even when the backend does its own write)", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_buffers_alloc": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "buffers_alloc"), "Number of buffers allocated", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), "percona_stats_reset": prometheus.NewDesc( prometheus.BuildFQName(namespace, bgWriterSubsystem, "stats_reset"), "Time at which these statistics were last reset", - []string{"server"}, + []string{"collector", "server"}, prometheus.Labels{}, ), } @@ -211,66 +211,77 @@ func (PGStatBGWriterCollector) Update(ctx context.Context, server *server, ch ch statBGWriter["checkpoints_timed"], prometheus.CounterValue, float64(cpt), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["checkpoints_req"], prometheus.CounterValue, float64(cpr), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["checkpoint_write_time"], prometheus.CounterValue, float64(cpwt), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["checkpoint_sync_time"], prometheus.CounterValue, float64(cpst), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["buffers_checkpoint"], prometheus.CounterValue, float64(bcp), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["buffers_clean"], prometheus.CounterValue, float64(bc), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["maxwritten_clean"], prometheus.CounterValue, float64(mwc), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["buffers_backend"], prometheus.CounterValue, float64(bb), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["buffers_backend_fsync"], prometheus.CounterValue, float64(bbf), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["buffers_alloc"], prometheus.CounterValue, float64(ba), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["stats_reset"], prometheus.CounterValue, float64(sr.Unix()), + "exporter", server.GetName(), ) @@ -278,66 +289,77 @@ func (PGStatBGWriterCollector) Update(ctx context.Context, server *server, ch ch statBGWriter["percona_checkpoints_timed"], prometheus.CounterValue, float64(cpt), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_checkpoints_req"], prometheus.CounterValue, float64(cpr), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_checkpoint_write_time"], prometheus.CounterValue, float64(cpwt), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_checkpoint_sync_time"], prometheus.CounterValue, float64(cpst), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_buffers_checkpoint"], prometheus.CounterValue, float64(bcp), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_buffers_clean"], prometheus.CounterValue, float64(bc), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_maxwritten_clean"], prometheus.CounterValue, float64(mwc), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_buffers_backend"], prometheus.CounterValue, float64(bb), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_buffers_backend_fsync"], prometheus.CounterValue, float64(bbf), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_buffers_alloc"], prometheus.CounterValue, float64(ba), + "exporter", server.GetName(), ) ch <- prometheus.MustNewConstMetric( statBGWriter["percona_stats_reset"], prometheus.CounterValue, float64(sr.Unix()), + "exporter", server.GetName(), )