diff --git a/mysql.go b/mysql.go index dd78971b..d8f11733 100644 --- a/mysql.go +++ b/mysql.go @@ -152,6 +152,7 @@ func (dbw *DBWrapper) SqlQuery(query string, args ...interface{}) (*sql.Rows, er } res, err := dbw.Db.Query(query, args...) + DbOperationsQuery.Inc() if err != nil { if !dbw.checkConnection(false) { @@ -187,7 +188,7 @@ func (dbw *DBWrapper) SqlBegin(concurrencySafety bool, quiet bool) (DbTransactio tx, err = dbw.Db.BeginTx(context.Background(), &sql.TxOptions{Isolation: isoLvl}) benchmarc.Stop() - //DbIoSeconds.WithLabelValues("mysql", "begin").Observe(benchmarc.Seconds()) + DbIoSeconds.WithLabelValues("mysql", "begin").Observe(benchmarc.Seconds()) log.WithFields(log.Fields{ "context": "sql", @@ -221,7 +222,7 @@ func (dbw *DBWrapper) SqlCommit(tx DbTransaction, quiet bool) error { err = tx.Commit() benchmarc.Stop() - //DbIoSeconds.WithLabelValues("mysql", "commit").Observe(benchmarc.Seconds()) + DbIoSeconds.WithLabelValues("mysql", "commit").Observe(benchmarc.Seconds()) log.WithFields(log.Fields{ "context": "sql", @@ -253,7 +254,7 @@ func (dbw *DBWrapper) SqlRollback(tx DbTransaction, quiet bool) error { err = tx.Rollback() benchmarc.Stop() - //DbIoSeconds.WithLabelValues("mysql", "rollback").Observe(benchmarc.Seconds()) + DbIoSeconds.WithLabelValues("mysql", "rollback").Observe(benchmarc.Seconds()) log.WithFields(log.Fields{ "context": "sql", @@ -322,12 +323,13 @@ func (dbw *DBWrapper) sqlExecInternal(db DbClientOrTransaction, opDescription st benchmarc = icingadb_utils.NewBenchmark() } res, err := db.Exec(sql, args...) + DbOperationsExec.Inc() if !quiet { benchmarc.Stop() } if !quiet { - //DbIoSeconds.WithLabelValues("mysql", opDescription).Observe(benchmarc.Seconds()) + DbIoSeconds.WithLabelValues("mysql", opDescription).Observe(benchmarc.Seconds()) log.WithFields(log.Fields{ "context": "sql", "benchmark": benchmarc, @@ -376,6 +378,7 @@ func sqlTryFetchAll(db DbClientOrTransaction, queryDescription string, query str benchmarc = icingadb_utils.NewBenchmark() } rows, errQuery := db.Query(query, args...) + DbOperationsQuery.Inc() if !quiet { benchmarc.Stop() } @@ -384,7 +387,7 @@ func sqlTryFetchAll(db DbClientOrTransaction, queryDescription string, query str defer func() { if !quiet { - //DbIoSeconds.WithLabelValues("mysql", queryDescription).Observe(benchmarc.Seconds()) + DbIoSeconds.WithLabelValues("mysql", queryDescription).Observe(benchmarc.Seconds()) log.WithFields(log.Fields{ "context": "sql", "benchmark": benchmarc, @@ -472,7 +475,7 @@ func (dbw DBWrapper) SqlTransaction(concurrencySafety bool, retryOnConnectionFai benchmarc.Stop() } - //DbIoSeconds.WithLabelValues("mysql", "transaction").Observe(benchmarc.Seconds()) + DbIoSeconds.WithLabelValues("mysql", "transaction").Observe(benchmarc.Seconds()) if !quiet { log.WithFields(log.Fields{ diff --git a/prometheus.go b/prometheus.go new file mode 100644 index 00000000..f977c88a --- /dev/null +++ b/prometheus.go @@ -0,0 +1,39 @@ +package icingadb_connection + +import ( + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/prometheus/client_golang/prometheus/promhttp" + log "github.com/sirupsen/logrus" + "net/http" +) + +var DbIoSeconds = promauto.NewSummaryVec( + prometheus.SummaryOpts{ + Name: "db_io_seconds", + Help: "Database I/O (s)", + }, + []string{"backend_type", "operation"}, +) + +var DbOperationsTotal = promauto.NewCounter(prometheus.CounterOpts{ + Name: "db_operations_total", + Help: "Database operations since startup", +}) + +var DbOperationsQuery = promauto.NewCounter(prometheus.CounterOpts{ + Name: "db_operations_query", + Help: "Database query operations since startup", +}) + +var DbOperationsExec = promauto.NewCounter(prometheus.CounterOpts{ + Name: "db_operations_exec", + Help: "Database exec operations since startup", +}) + +//TODO: Move this to main package of IcingaDB +func Httpd(addr string, chErr chan error) { + http.Handle("/metrics", promhttp.Handler()) + log.Infof("Serving debug info at http://%s/metrics", addr) + chErr <- http.ListenAndServe(addr, nil) +} diff --git a/redis.go b/redis.go index d28a371d..e6dd48cf 100644 --- a/redis.go +++ b/redis.go @@ -230,7 +230,7 @@ func (rdbw *RDBWrapper) HGetAll(key string) (map[string]string, error) { benchmarc.Stop() - //DbIoSeconds.WithLabelValues("redis", "hgetall").Observe(benchmarc.Seconds()) + DbIoSeconds.WithLabelValues("redis", "hgetall").Observe(benchmarc.Seconds()) log.WithFields(log.Fields{ "context": "redis", @@ -261,7 +261,7 @@ func (rdbw *RDBWrapper) TxPipelined(fn func(pipeliner redis.Pipeliner) error) ([ benchmarc.Stop() - //DbIoSeconds.WithLabelValues("redis", "multi").Observe(benchmarc.Seconds()) + DbIoSeconds.WithLabelValues("redis", "multi").Observe(benchmarc.Seconds()) log.WithFields(log.Fields{ "context": "redis",