Documentation
¶
Overview ¶
Package reaper is responsible to query the metrics from monitored sources and send measurements to sinks.
Index ¶
- Variables
- func AddDbnameSysinfoIfNotExistsToQueryResultData(data metrics.Measurements, ver MonitoredDatabaseSettings, ...) metrics.Measurements
- func CheckForPGObjectChangesAndStore(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, ...)
- func ClearDBUnreachableStateIfAny(dbUnique string)
- func CloseResourcesForRemovedMonitoredDBs(metricsWriter *sinks.MultiWriter, ...)
- func DBExecRead(ctx context.Context, conn db.PgxIface, sql string, args ...any) (metrics.Measurements, error)
- func DBExecReadByDbUniqueName(ctx context.Context, dbUnique string, sql string, args ...any) (metrics.Measurements, error)
- func DBGetSizeMB(ctx context.Context, dbUnique string) (int64, error)
- func DatarowsToMetricstoreMessage(data metrics.Measurements, msg MetricFetchConfig, ...) (metrics.MeasurementEnvelope, error)
- func DoesEmergencyTriggerfileExist(fname string) bool
- func DoesFunctionExists(ctx context.Context, dbUnique, functionName string) bool
- func FetchMetrics(ctx context.Context, msg MetricFetchConfig, ...) ([]metrics.MeasurementEnvelope, error)
- func FetchMetricsPgpool(ctx context.Context, msg MetricFetchConfig, vme MonitoredDatabaseSettings, ...) (metrics.Measurements, error)
- func FetchStatsDirectlyFromOS(ctx context.Context, msg MetricFetchConfig, vme MonitoredDatabaseSettings, ...) ([]metrics.MeasurementEnvelope, error)
- func GetAllRecoMetricsForVersion(vme MonitoredDatabaseSettings) (map[string]metrics.Metric, error)
- func GetConnByUniqueName(dbUnique string) db.PgxIface
- func GetDBTotalApproxSize(ctx context.Context, dbUnique string) (int64, error)
- func GetFromInstanceCacheIfNotOlderThanSeconds(msg MetricFetchConfig, maxAgeSeconds int64) metrics.Measurements
- func GetGoPsutilDiskPG(ctx context.Context, dbUnique string) (metrics.Measurements, error)
- func GetMetricVersionProperties(metric string, _ MonitoredDatabaseSettings, metricDefMap *metrics.Metrics) (metrics.Metric, error)
- func GetMonitoredDatabaseByUniqueName(name string) (*sources.MonitoredDatabase, error)
- func GetRecommendations(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings) (metrics.Measurements, error)
- func InitPGVersionInfoFetchingLockIfNil(md *sources.MonitoredDatabase)
- func InitSQLConnPoolForMonitoredDBIfNil(ctx context.Context, md *sources.MonitoredDatabase, maxConns int) (err error)
- func IsCacheableMetric(msg MetricFetchConfig, mvp metrics.Metric) bool
- func IsDBDormant(dbUnique string) bool
- func IsDBIgnoredBasedOnRecoveryState(dbUnique string) bool
- func IsDBUndersized(dbUnique string) bool
- func IsDirectlyFetchableMetric(metric string) bool
- func LoadMetricDefs(r metrics.Reader) (err error)
- func PutToInstanceCache(msg MetricFetchConfig, data metrics.Measurements)
- func SetDBUnreachableState(dbUnique string)
- func SetRecoveryIgnoredDBState(dbUnique string, state bool)
- func SetUndersizedDBState(dbUnique string, state bool)
- func StoreMetrics(metrics []metrics.MeasurementEnvelope, ...) (int, error)
- func SyncMetricDefs(ctx context.Context, r metrics.Reader)
- func SyncMonitoredDBsToDatastore(ctx context.Context, monitoredDbs []*sources.MonitoredDatabase, ...)
- func TryCreateMetricsFetchingHelpers(ctx context.Context, md *sources.MonitoredDatabase) (err error)
- func TryCreateMissingExtensions(ctx context.Context, dbUnique string, extensionNames []string, ...) []string
- func TryDiscoverExecutionEnv(ctx context.Context, dbUnique string) (execEnv string)
- func UpdateMonitoredDBCache(data sources.MonitoredDatabases)
- func VersionToInt(version string) (v int)
- type ChangeDetectionResults
- func DetectConfigurationChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, ...) ChangeDetectionResults
- func DetectIndexChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, ...) ChangeDetectionResults
- func DetectPrivilegeChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, ...) ChangeDetectionResults
- func DetectSprocChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, ...) ChangeDetectionResults
- func DetectTableChanges(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, ...) ChangeDetectionResults
- type ExistingPartitionInfo
- type MetricFetchConfig
- type MonitoredDatabaseSettings
- type Reaper
Constants ¶
This section is empty.
Variables ¶
var MonitoredDatabasesSettings = make(map[string]MonitoredDatabaseSettings)
var MonitoredDatabasesSettingsGetLock = make(map[string]*sync.RWMutex) // synchronize initial PG version detection to 1 instance for each defined host
var MonitoredDatabasesSettingsLock = sync.RWMutex{}
Functions ¶
func AddDbnameSysinfoIfNotExistsToQueryResultData ¶
func AddDbnameSysinfoIfNotExistsToQueryResultData(data metrics.Measurements, ver MonitoredDatabaseSettings, opts *cmdopts.Options) metrics.Measurements
func CheckForPGObjectChangesAndStore ¶
func CheckForPGObjectChangesAndStore(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings, storageCh chan<- []metrics.MeasurementEnvelope, hostState map[string]map[string]string)
func ClearDBUnreachableStateIfAny ¶
func ClearDBUnreachableStateIfAny(dbUnique string)
func CloseResourcesForRemovedMonitoredDBs ¶
func CloseResourcesForRemovedMonitoredDBs(metricsWriter *sinks.MultiWriter, currentDBs, prevLoopDBs sources.MonitoredDatabases, shutDownDueToRoleChange map[string]bool)
func DBExecRead ¶
func DatarowsToMetricstoreMessage ¶
func DatarowsToMetricstoreMessage(data metrics.Measurements, msg MetricFetchConfig, vme MonitoredDatabaseSettings, mvp metrics.Metric) (metrics.MeasurementEnvelope, error)
data + custom tags + counters
func DoesFunctionExists ¶
func FetchMetrics ¶
func FetchMetrics(ctx context.Context, msg MetricFetchConfig, hostState map[string]map[string]string, storageCh chan<- []metrics.MeasurementEnvelope, context string, opts *cmdopts.Options) ([]metrics.MeasurementEnvelope, error)
func FetchMetricsPgpool ¶
func FetchMetricsPgpool(ctx context.Context, msg MetricFetchConfig, vme MonitoredDatabaseSettings, mvp metrics.Metric) (metrics.Measurements, error)
some extra work needed as pgpool SHOW commands don't specify the return data types for some reason
func FetchStatsDirectlyFromOS ¶
func FetchStatsDirectlyFromOS(ctx context.Context, msg MetricFetchConfig, vme MonitoredDatabaseSettings, mvp metrics.Metric) ([]metrics.MeasurementEnvelope, error)
func GetAllRecoMetricsForVersion ¶
func GetAllRecoMetricsForVersion(vme MonitoredDatabaseSettings) (map[string]metrics.Metric, error)
func GetConnByUniqueName ¶
func GetDBTotalApproxSize ¶
func GetFromInstanceCacheIfNotOlderThanSeconds ¶
func GetFromInstanceCacheIfNotOlderThanSeconds(msg MetricFetchConfig, maxAgeSeconds int64) metrics.Measurements
func GetGoPsutilDiskPG ¶
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.MonitoredDatabase, error)
func GetRecommendations ¶
func GetRecommendations(ctx context.Context, dbUnique string, vme MonitoredDatabaseSettings) (metrics.Measurements, error)
func InitPGVersionInfoFetchingLockIfNil ¶
func InitPGVersionInfoFetchingLockIfNil(md *sources.MonitoredDatabase)
func InitSQLConnPoolForMonitoredDBIfNil ¶
func InitSQLConnPoolForMonitoredDBIfNil(ctx context.Context, md *sources.MonitoredDatabase, maxConns int) (err error)
every DB under monitoring should have exactly 1 sql.DB connection assigned, that will internally limit parallel access
func IsCacheableMetric ¶
func IsCacheableMetric(msg MetricFetchConfig, mvp metrics.Metric) bool
func IsDBDormant ¶
func IsDBUndersized ¶
func LoadMetricDefs ¶
LoadMetricDefs loads metric definitions from the reader
func PutToInstanceCache ¶
func PutToInstanceCache(msg MetricFetchConfig, data metrics.Measurements)
func SetDBUnreachableState ¶
func SetDBUnreachableState(dbUnique string)
func SetUndersizedDBState ¶
func StoreMetrics ¶
func StoreMetrics(metrics []metrics.MeasurementEnvelope, storageCh chan<- []metrics.MeasurementEnvelope) (int, error)
func SyncMetricDefs ¶
SyncMetricDefs refreshes metric definitions at regular intervals
func SyncMonitoredDBsToDatastore ¶
func SyncMonitoredDBsToDatastore(ctx context.Context, monitoredDbs []*sources.MonitoredDatabase, persistenceChannel chan []metrics.MeasurementEnvelope)
func TryCreateMetricsFetchingHelpers ¶
func TryCreateMetricsFetchingHelpers(ctx context.Context, md *sources.MonitoredDatabase) (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 TryDiscoverExecutionEnv ¶
func UpdateMonitoredDBCache ¶
func UpdateMonitoredDBCache(data sources.MonitoredDatabases)
func VersionToInt ¶
Types ¶
type ChangeDetectionResults ¶
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 MetricFetchConfig ¶
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 }
type Reaper ¶
type Reaper struct {
// contains filtered or unexported fields
}
func NewReaper ¶
func NewReaper(opts *cmdopts.Options, sourcesReaderWriter sources.ReaderWriter, metricsReaderWriter metrics.ReaderWriter) *Reaper
func (*Reaper) Ready ¶ added in v3.1.0
Ready() returns true if the service is healthy and operating correctly
func (*Reaper) Reap ¶
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.