reaper

package
v3.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2025 License: BSD-3-Clause Imports: 22 Imported by: 0

Documentation

Overview

Package reaper is responsible to query the metrics from monitored sources and send measurements to sinks.

Index

Constants

This section is empty.

Variables

View Source
var MonitoredDatabasesSettings = make(map[string]MonitoredDatabaseSettings)
View Source
var MonitoredDatabasesSettingsGetLock = make(map[string]*sync.RWMutex) // synchronize initial PG version detection to 1 instance for each defined host
View Source
var MonitoredDatabasesSettingsLock = sync.RWMutex{}

Functions

func CloseResourcesForRemovedMonitoredDBs

func CloseResourcesForRemovedMonitoredDBs(metricsWriter sinks.Writer, currentDBs, prevLoopDBs sources.SourceConns, shutDownDueToRoleChange map[string]bool)

func DBGetSizeMB

func DBGetSizeMB(ctx context.Context, dbUnique string) (int64, error)

func DatarowsToMetricstoreMessage

data + custom tags + counters

func DoesEmergencyTriggerfileExist

func DoesEmergencyTriggerfileExist(fname string) bool

func FetchMetricsPgpool

some extra work needed as pgpool SHOW commands don't specify the return data types for some reason

func GetAllRecoMetricsForVersion

func GetAllRecoMetricsForVersion(vme MonitoredDatabaseSettings) (map[string]metrics.Metric, error)

func GetFromInstanceCacheIfNotOlderThanSeconds

func GetFromInstanceCacheIfNotOlderThanSeconds(msg MetricFetchConfig, maxAgeSeconds int64) metrics.Measurements

func GetGoPsutilDiskPG

func GetGoPsutilDiskPG(ctx context.Context, dbUnique string) (metrics.Measurements, error)

connects actually to the instance to determine PG relevant disk paths / mounts

func GetMetricVersionProperties

func GetMetricVersionProperties(metric string, _ MonitoredDatabaseSettings, metricDefMap *metrics.Metrics) (metrics.Metric, error)

assumes upwards compatibility for versions

func GetMonitoredDatabaseByUniqueName

func GetMonitoredDatabaseByUniqueName(name string) (*sources.SourceConn, error)

func GetRecommendations

func GetRecommendations(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings) (metrics.Measurements, error)

func InitPGVersionInfoFetchingLockIfNil

func InitPGVersionInfoFetchingLockIfNil(md *sources.SourceConn)

func IsCacheableMetric

func IsCacheableMetric(msg MetricFetchConfig, mvp metrics.Metric) bool

func IsDirectlyFetchableMetric

func IsDirectlyFetchableMetric(metric string) bool

func PutToInstanceCache

func PutToInstanceCache(msg MetricFetchConfig, data metrics.Measurements)

func QueryMeasurements added in v3.2.0

func QueryMeasurements(ctx context.Context, dbUnique string, sql string, args ...any) (metrics.Measurements, error)

func TryCreateMetricsFetchingHelpers

func TryCreateMetricsFetchingHelpers(ctx context.Context, md *sources.SourceConn) (err error)

Called once on daemon startup to try to create "metric fething helper" functions automatically

func TryCreateMissingExtensions

func TryCreateMissingExtensions(ctx context.Context, dbUnique string, extensionNames []string, existingExtensions map[string]int) []string

Called once on daemon startup if some commonly wanted extension (most notably pg_stat_statements) is missing. With newer Postgres version can even succeed if the user is not a real superuser due to some cloud-specific whitelisting or "trusted extensions" (a feature from v13). Ignores errors.

func UpdateMonitoredDBCache

func UpdateMonitoredDBCache(data sources.SourceConns)

func VersionToInt

func VersionToInt(version string) (v int)

Types

type ChangeDetectionResults

type ChangeDetectionResults struct {
	Created int
	Altered int
	Dropped int
}

func DetectConfigurationChanges

func DetectConfigurationChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, storageCh chan<- []metrics.MeasurementEnvelope, hostState map[string]map[string]string) ChangeDetectionResults

func DetectIndexChanges

func DetectIndexChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, storageCh chan<- []metrics.MeasurementEnvelope, hostState map[string]map[string]string) ChangeDetectionResults

func DetectPrivilegeChanges

func DetectPrivilegeChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, storageCh chan<- []metrics.MeasurementEnvelope, hostState map[string]map[string]string) ChangeDetectionResults

func DetectSprocChanges

func DetectSprocChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, storageCh chan<- []metrics.MeasurementEnvelope, hostState map[string]map[string]string) ChangeDetectionResults

func DetectTableChanges

func DetectTableChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, storageCh chan<- []metrics.MeasurementEnvelope, hostState map[string]map[string]string) ChangeDetectionResults

type ExistingPartitionInfo

type ExistingPartitionInfo struct {
	StartTime time.Time
	EndTime   time.Time
}

type MetricFetchConfig

type MetricFetchConfig struct {
	DBUniqueName        string
	DBUniqueNameOrig    string
	MetricName          string
	Source              sources.Kind
	Interval            time.Duration
	CreatedOn           time.Time
	StmtTimeoutOverride int64
}

type MonitoredDatabaseSettings

type MonitoredDatabaseSettings struct {
	LastCheckedOn    time.Time
	IsInRecovery     bool
	VersionStr       string
	Version          int
	RealDbname       string
	SystemIdentifier string
	IsSuperuser      bool // if true and no helpers are installed, use superuser SQL version of metric if available
	Extensions       map[string]int
	ExecEnv          string
	ApproxDBSizeB    int64
}

func GetMonitoredDatabaseSettings

func GetMonitoredDatabaseSettings(ctx context.Context, md *sources.SourceConn, noCache bool) (MonitoredDatabaseSettings, error)

type Reaper

type Reaper struct {
	*cmdopts.Options
	// contains filtered or unexported fields
}

Reaper is the struct that responsible for fetching metrics measurements from the sources and storing them to the sinks

func NewReaper

func NewReaper(ctx context.Context, opts *cmdopts.Options) (r *Reaper, err error)

NewReaper creates a new Reaper instance

func (*Reaper) AddSysinfoToMeasurements added in v3.2.0

func (r *Reaper) AddSysinfoToMeasurements(data metrics.Measurements, ver MonitoredDatabaseSettings) metrics.Measurements

func (*Reaper) CheckForPGObjectChangesAndStore added in v3.2.0

func (r *Reaper) CheckForPGObjectChangesAndStore(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, hostState map[string]map[string]string)

func (*Reaper) FetchMetrics added in v3.2.0

func (r *Reaper) FetchMetrics(ctx context.Context,
	msg MetricFetchConfig,
	hostState map[string]map[string]string) ([]metrics.MeasurementEnvelope, error)

func (*Reaper) LoadMetrics added in v3.2.0

func (r *Reaper) LoadMetrics() (err error)

LoadMetrics loads metric definitions from the reader

func (*Reaper) LoadSources added in v3.2.0

func (r *Reaper) LoadSources() (err error)

LoadSources loads sources from the reader

func (*Reaper) Ready added in v3.1.0

func (r *Reaper) Ready() bool

Ready() returns true if the service is healthy and operating correctly

func (*Reaper) Reap

func (r *Reaper) Reap(ctx context.Context) (err error)

Reap() starts the main monitoring loop. It is responsible for fetching metrics measurements from the sources and storing them to the sinks. It also manages the lifecycle of the metric gatherers. In case of a source or metric definition change, it will start or stop the gatherers accordingly.

func (*Reaper) WriteMeasurements added in v3.2.0

func (r *Reaper) WriteMeasurements(ctx context.Context)

WriteMeasurements() writes the metrics to the sinks

func (*Reaper) WriteMonitoredSources added in v3.2.0

func (r *Reaper) WriteMonitoredSources(ctx context.Context)

WriteMonitoredSources writes actively monitored DBs listing to sinks every monitoredDbsDatastoreSyncIntervalSeconds (default 10min)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL