// Copyright 2018 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // See the License for the specific language governing permissions and // limitations under the License. package metrics import ( "strconv" "github.com/pingcap/errors" "github.com/pingcap/parser/terror" "github.com/prometheus/client_golang/prometheus" ) // Metrics var ( QueryDurationHistogram = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "tidb", Subsystem: "server", Name: "handle_query_duration_seconds", Help: "Bucketed histogram of processing time (s) of handled queries.", Buckets: prometheus.ExponentialBuckets(0.0005, 2, 22), }, []string{LblSQLType}) QueryTotalCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: "tidb", Subsystem: "server", Name: "query_total", Help: "Counter of queries.", }, []string{LblType, LblResult}) ConnGauge = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: "tidb", Subsystem: "server", Name: "connections", Help: "Number of connections.", }) PreparedStmtGauge = prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: "tidb", Subsystem: "server", Name: "prepared_stmts", Help: "number of prepared statements.", }) ExecuteErrorCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: "tidb", Subsystem: "server", Name: "execute_error_total", Help: "Counter of execute errors.", }, []string{LblType}) CriticalErrorCounter = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: "tidb", Subsystem: "server", Name: "critical_error_total", Help: "Counter of critical errors.", }) EventStart = "start" EventGracefulDown = "graceful_shutdown" // Eventkill occurs when the server.Kill() function is called. EventKill = "kill" // EventHang occurs when server meet some critical error. It will close the listening port and hang for ever. EventHang = "hang" EventClose = "close" ServerEventCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: "tidb", Subsystem: "server", Name: "event_total", Help: "Counter of tidb-server event.", }, []string{LblType}) TimeJumpBackCounter = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: "tidb", Subsystem: "monitor", Name: "time_jump_back_total", Help: "Counter of system time jumps backward.", }) KeepAliveCounter = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: "tidb", Subsystem: "monitor", Name: "keep_alive_total", Help: "Counter of TiDB keep alive.", }) PlanCacheCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: "tidb", Subsystem: "server", Name: "plan_cache_total", Help: "Counter of query using plan cache.", }, []string{LblType}) HandShakeErrorCounter = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: "tidb", Subsystem: "server", Name: "handshake_error_total", Help: "Counter of hand shake error.", }, ) GetTokenDurationHistogram = prometheus.NewHistogram( prometheus.HistogramOpts{ Namespace: "tidb", Subsystem: "server", Name: "get_token_duration_seconds", Help: "Duration (us) for getting token, it should be small until concurrency limit is reached.", Buckets: prometheus.ExponentialBuckets(1, 2, 22), // 1us ~ 2s }) TotalQueryProcHistogram = prometheus.NewHistogram( prometheus.HistogramOpts{ Namespace: "tidb", Subsystem: "server", Name: "slow_query_process_duration_seconds", Help: "Bucketed histogram of processing time (s) of of slow queries.", Buckets: prometheus.ExponentialBuckets(0.001, 2, 22), // 1ms ~ 4096s }) TotalCopProcHistogram = prometheus.NewHistogram( prometheus.HistogramOpts{ Namespace: "tidb", Subsystem: "server", Name: "slow_query_cop_duration_seconds", Help: "Bucketed histogram of all cop processing time (s) of of slow queries.", Buckets: prometheus.ExponentialBuckets(0.001, 2, 22), }) TotalCopWaitHistogram = prometheus.NewHistogram( prometheus.HistogramOpts{ Namespace: "tidb", Subsystem: "server", Name: "slow_query_wait_duration_seconds", Help: "Bucketed histogram of all cop waiting time (s) of of slow queries.", Buckets: prometheus.ExponentialBuckets(0.001, 2, 22), }) CPUUsagePercentageGauge = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: "tidb", Subsystem: "server", Name: "cpu_usage", Help: "Percentage of CPU usage.", }) ) // ExecuteErrorToLabel converts an execute error to label. func ExecuteErrorToLabel(err error) string { err = errors.Cause(err) switch x := err.(type) { case *terror.Error: return x.Class().String() + ":" + strconv.Itoa(int(x.Code())) default: return "unknown" } }