mirror of
https://github.com/labring/sealos.git
synced 2026-09-01 04:58:47 +08:00
7ad6b8857e
* add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query. * add database logs query.
219 lines
17 KiB
Go
219 lines
17 KiB
Go
package api
|
|
|
|
import "errors"
|
|
|
|
type PromRequest struct {
|
|
User string
|
|
Pwd string
|
|
NS string
|
|
Type string
|
|
Query string
|
|
Cluster string
|
|
Range PromRange
|
|
}
|
|
|
|
type PromRange struct {
|
|
Start string `mapstructure:"start"`
|
|
End string `mapstructure:"end"`
|
|
Step string `mapstructure:"step"`
|
|
Time string `mapstructure:"time"`
|
|
}
|
|
|
|
type QueryResult struct {
|
|
Status string `json:"status"`
|
|
Data struct {
|
|
ResultType string `json:"resultType"`
|
|
Result []struct {
|
|
Metric map[string]string `json:"metric"`
|
|
Values [][]interface{} `json:"values"`
|
|
Value []interface{} `json:"value"`
|
|
} `json:"result"`
|
|
} `json:"data"`
|
|
}
|
|
|
|
type VMRequest struct {
|
|
User string
|
|
Pwd string
|
|
NS string
|
|
Type string
|
|
LaunchPadName string
|
|
PvcName string
|
|
Range VMRange
|
|
}
|
|
|
|
type VMRange struct {
|
|
Start string `mapstructure:"start"`
|
|
End string `mapstructure:"end"`
|
|
Step string `mapstructure:"step"`
|
|
Time string `mapstructure:"time"`
|
|
}
|
|
|
|
type LaunchpadQueryResult struct {
|
|
Status string `json:"status"`
|
|
IsPartial bool `json:"isPartial"`
|
|
Data Data `json:"data"`
|
|
Stats Stats `json:"stats"`
|
|
}
|
|
|
|
type Data struct {
|
|
ResultType string `json:"resultType"`
|
|
Result []Result `json:"result"`
|
|
}
|
|
|
|
type Result struct {
|
|
Metric map[string]string `json:"metric"`
|
|
Value []interface{} `json:"value"`
|
|
Values [][]interface{} `json:"values"`
|
|
}
|
|
|
|
type Stats struct {
|
|
SeriesFetched string `json:"seriesFetched"`
|
|
ExecutionTimeMsec int `json:"executionTimeMsec"`
|
|
}
|
|
|
|
type JSONQuery struct {
|
|
Key string
|
|
// There are a total of four modes,"=" equal,"!" Not equal,"~" including,"!~" Not included.
|
|
Mode string
|
|
Value string
|
|
}
|
|
|
|
type VlogsLaunchpadRequest struct {
|
|
Time string `json:"time"`
|
|
Namespace string `json:"namespace"`
|
|
App string `json:"app"`
|
|
Limit string `json:"limit,omitempty"`
|
|
JSONMode string `json:"jsonMode,omitempty"`
|
|
StderrMode string `json:"stderrMode,omitempty"`
|
|
NumberMode string `json:"numberMode,omitempty"`
|
|
NumberLevel string `json:"numberLevel,omitempty"`
|
|
Pod []string `json:"pod,omitempty"`
|
|
Container []string `json:"container,omitempty"`
|
|
Keyword string `json:"keyword,omitempty"`
|
|
JSONQuery []JSONQuery `json:"jsonQuery,omitempty"`
|
|
PodQuery string `json:"podQuery,omitempty"`
|
|
StartTime string `json:"startTime,omitempty"`
|
|
EndTime string `json:"endTime,omitempty"`
|
|
}
|
|
|
|
type VlogsDatabaseRequest struct {
|
|
Time string `json:"time"`
|
|
Namespace string `json:"namespace"`
|
|
Limit string `json:"limit,omitempty"`
|
|
NumberMode string `json:"numberMode,omitempty"`
|
|
NumberLevel string `json:"numberLevel,omitempty"`
|
|
Pvc []string `json:"pvc,omitempty"`
|
|
Type []string `json:"type,omitempty"`
|
|
Container []string `json:"container,omitempty"`
|
|
Keyword string `json:"keyword,omitempty"`
|
|
StartTime string `json:"startTime,omitempty"`
|
|
EndTime string `json:"endTime,omitempty"`
|
|
}
|
|
|
|
type VlogsLaunchpadResponse struct {
|
|
Time string `json:"_time"`
|
|
Message string `json:"_msg"`
|
|
Container string `json:"container"`
|
|
Pod string `json:"pod"`
|
|
Stream string `json:"stream"`
|
|
}
|
|
|
|
var (
|
|
Mysql = map[string]string{
|
|
"cpu": "round(sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace=~\"#\",pod=~\"@-mysql-\\\\d\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{namespace=~\"#\",pod=~\"@-mysql-\\\\d\"}) by (pod)*100,0.01)",
|
|
"memory": "round(sum(container_memory_working_set_bytes{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\",namespace=~\"#\",container!=\"\", image!=\"\",pod=~\"@-mysql-\\\\d\"}) by(pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{namespace=~\"#\", pod=~\"@-mysql-\\\\d\"}) by (pod) * 100, 0.01)",
|
|
"disk_capacity": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-mysql-\\\\d\"}))",
|
|
"disk_used": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-mysql-\\\\d\"}))",
|
|
"disk": "round((max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-mysql-\\\\d\"})) / (max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-mysql-\\\\d\"})) * 100, 0.01)",
|
|
"uptime": "sum(mysql_global_status_uptime{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}) by (namespace,app_kubernetes_io_instance,pod)",
|
|
"connections": "sum(max_over_time(mysql_global_status_threads_connected{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])) by (namespace,app_kubernetes_io_instance,pod)",
|
|
"commands": "topk(5, rate(mysql_global_status_commands_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m]) > 0)",
|
|
|
|
"innodb": "sum(mysql_global_variables_innodb_buffer_pool_size{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}) by (namespace,app_kubernetes_io_instance,pod)",
|
|
"slow_queries": "sum(rate(mysql_global_status_slow_queries{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])) by (namespace,app_kubernetes_io_instance,pod)",
|
|
|
|
"aborted_connections": "sum(rate(mysql_global_status_aborted_connects{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])) by (namespace,app_kubernetes_io_instance,pod)",
|
|
"table_locks": "sum(rate(mysql_global_status_table_locks_immediate{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])) by (namespace,app_kubernetes_io_instance,pod)",
|
|
}
|
|
Pgsql = map[string]string{
|
|
"cpu": "round(sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace=~\"#\",pod=~\"@-postgresql-\\\\d\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{namespace=~\"#\",pod=~\"@-postgresql-\\\\d\"}) by (pod)*100,0.01)",
|
|
"memory": "round(sum(container_memory_working_set_bytes{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\",namespace=~\"#\",container!=\"\", image!=\"\",pod=~\"@-postgresql-\\\\d\"}) by(pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{namespace=~\"#\", pod=~\"@-postgresql-\\\\d\"}) by (pod) * 100, 0.01)",
|
|
"disk": "round((max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-postgresql-\\\\d\"})) / (max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-postgresql-\\\\d\"})) * 100, 0.01)",
|
|
"disk_capacity": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-postgresql-\\\\d\"}))",
|
|
"disk_used": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-postgresql-\\\\d\"}))",
|
|
"uptime": "avg (time() - pg_postmaster_start_time_seconds{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}) by(namespace, app_kubernetes_io_instance, pod)",
|
|
"connections": "sum(pg_stat_database_numbackends{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"})",
|
|
"commands": "sum by (command,app_kubernetes_io_instance)(label_replace(rate(pg_stat_database_tup_deleted{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m]),\"command\",\"delete\",\"namespace\",\"(.*)\")) or sum by (command,app_kubernetes_io_instance)(label_replace(rate(pg_stat_database_tup_inserted{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m]),\"command\",\"insert\",\"namespace\",\"(.*)\")) or sum by (command,app_kubernetes_io_instance)(label_replace(rate(pg_stat_database_tup_fetched{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m]),\"command\",\"fetch\",\"namespace\",\"(.*)\")) or sum by (command,app_kubernetes_io_instance)(label_replace(rate(pg_stat_database_tup_returned{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m]),\"command\",\"return\",\"namespace\",\"(.*)\")) or sum by (command,app_kubernetes_io_instance)(label_replace(rate(pg_stat_database_tup_updated{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m]),\"command\",\"update\",\"namespace\",\"(.*)\"))",
|
|
|
|
"db_size": "pg_database_size_bytes{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}",
|
|
|
|
"active_connections": " pg_stat_activity_count{namespace=~\"#\", app_kubernetes_io_instance=~\"@\",state=\"active\"}",
|
|
"rollbacks": "rate (pg_stat_database_xact_rollback_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])",
|
|
"commits": "rate (pg_stat_database_xact_commit_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])",
|
|
"tx_duration": "max without(state) (max_over_time(pg_stat_activity_max_tx_duration{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m]))",
|
|
"block_read_time": "rate(pg_stat_database_blk_read_time_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])",
|
|
"block_write_time": "rate(pg_stat_database_blk_write_time_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])",
|
|
}
|
|
|
|
Mongo = map[string]string{
|
|
"cpu": "round(sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace=~\"#\",pod=~\"@-mongodb-\\\\d\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{namespace=~\"#\",pod=~\"@-mongodb-\\\\d\"}) by (pod)*100,0.01)",
|
|
"memory": "round(sum(container_memory_working_set_bytes{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\",namespace=~\"#\",container!=\"\", image!=\"\",pod=~\"@-mongodb-\\\\d\"}) by(pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{namespace=~\"#\", pod=~\"@-mongodb-\\\\d\"}) by (pod) * 100, 0.01)",
|
|
"disk_capacity": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-mongodb-\\\\d\"}))",
|
|
"disk": "round((max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-mongodb-\\\\d\"})) / (max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-mongodb-\\\\d\"})) * 100, 0.01)",
|
|
"disk_used": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-mongodb-\\\\d\"}))",
|
|
"uptime": "sum by(namespace, app_kubernetes_io_instance, pod) (mongodb_instance_uptime_seconds{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"})",
|
|
"connections": "mongodb_connections{namespace=~\"#\", app_kubernetes_io_instance=~\"@\", state=~\"current\"}",
|
|
"commands": "label_replace(rate(mongodb_op_counters_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\", type!=\"command\"}[1m]) or irate(mongodb_op_counters_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\", type!=\"command\"}[1m]), \"command\", \"$1\", \"type\", \"(.*)\")",
|
|
|
|
"db_size": "mongodb_dbstats_dataSize{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}",
|
|
|
|
"document_ops": "rate(mongodb_mongod_metrics_document_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])",
|
|
"pg_faults": "rate(mongodb_extra_info_page_faults_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m]) or irate(mongodb_extra_info_page_faults_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])",
|
|
}
|
|
|
|
Redis = map[string]string{
|
|
"cpu": "round(sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace=~\"#\",pod=~\"@-redis-\\\\d\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{namespace=~\"#\",pod=~\"@-redis-\\\\d\"}) by (pod)*100,0.01)",
|
|
"memory": "round(sum(container_memory_working_set_bytes{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\",namespace=~\"#\",container!=\"\", image!=\"\",pod=~\"@-redis-\\\\d\"}) by(pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{namespace=~\"#\", pod=~\"@-redis-\\\\d\"}) by (pod) * 100, 0.01)",
|
|
"disk_capacity": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-redis-\\\\d\"}))",
|
|
"disk": "round((max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-redis-\\\\d\"})) / (max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-redis-\\\\d\"})) * 100, 0.01)",
|
|
"disk_used": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-redis-\\\\d\"}))",
|
|
"uptime": "redis_uptime_in_seconds{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}",
|
|
"connections": "sum(redis_connected_clients{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"})",
|
|
"commands": "label_replace(sum(irate(redis_commands_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"} [1m])) by (cmd, namespace, app_kubernetes_io_instance), \"command\", \"$1\", \"cmd\", \"(.*)\")",
|
|
|
|
"db_items": "sum (redis_db_keys{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}) by (db)",
|
|
|
|
"hits_ratio": "avg(rate(redis_keyspace_hits_total{namespace=~\"#\",app_kubernetes_io_instance=\"@\"}[1m]) / clamp_min((irate(redis_keyspace_misses_total{namespace=~\"#\",app_kubernetes_io_instance=~\"@\"}[1m]) + irate(redis_keyspace_hits_total{namespace=~\"#\",app_kubernetes_io_instance=\"@\"}[1m])), 0.01)) by (pod, app_kubernetes_io_instance)",
|
|
"commands_duration": "avg(rate(redis_commands_duration_seconds_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])) by (cmd) / avg(irate(redis_commands_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])) by (cmd)",
|
|
"blocked_connections": "sum(redis_blocked_clients{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"})",
|
|
"key_evictions": "irate(redis_evicted_keys_total{namespace=~\"#\", app_kubernetes_io_instance=~\"@\"}[1m])",
|
|
}
|
|
|
|
Minio = map[string]string{
|
|
"minio_bucket_usage_object_total": "minio_bucket_usage_object_total{bucket=\"@\", instance=\"#\"}",
|
|
"minio_bucket_usage_total_bytes": "minio_bucket_usage_total_bytes{bucket=\"@\", instance=\"#\"}",
|
|
"minio_bucket_traffic_received_bytes": "sum(minio_bucket_traffic_received_bytes{bucket=\"@\", instance=\"#\"}) by (bucket, instance, job, namespace)",
|
|
"minio_bucket_traffic_sent_bytes": "sum(minio_bucket_traffic_sent_bytes{bucket=\"@\", instance=\"#\"}) by (bucket, instance, job, namespace)",
|
|
}
|
|
|
|
Kafka = map[string]string{
|
|
"cpu": "round(sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace=~\"#\",pod=~\"@-kafka-.*\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{namespace=~\"#\",pod=~\"@-kafka-.*\"}) by (pod)*100,0.01)",
|
|
"memory": "round(sum(container_memory_working_set_bytes{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\",namespace=~\"#\",container!=\"\", image!=\"\",pod=~\"@-kafka-.*\"}) by(pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{namespace=~\"#\", pod=~\"@-kafka-.*\"}) by (pod) * 100, 0.01)",
|
|
"disk_capacity": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-(kafka-broker|kafka-server)-\\\\d\"}))",
|
|
"disk": "round((max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-(kafka-broker|kafka-server)-\\\\d\"})) / (max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-(kafka-broker|kafka-server)-\\\\d\"})) * 100, 0.01)",
|
|
"disk_used": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes {namespace=~\"#\", persistentvolumeclaim=~\"data-@-(kafka-broker|kafka-server)-\\\\d\"}))",
|
|
}
|
|
Milvus = map[string]string{
|
|
"cpu": "round(sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace=~\"#\",pod=~\"@-milvus-.*\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{namespace=~\"#\",pod=~\"@-milvus-.*\"}) by (pod)*100,0.01)",
|
|
"memory": "round(sum(container_memory_working_set_bytes{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\",namespace=~\"#\",container!=\"\", image!=\"\",pod=~\"@-milvus-.*\"}) by(pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{namespace=~\"#\", pod=~\"@-milvus-.*\"}) by (pod) * 100, 0.01)",
|
|
}
|
|
)
|
|
|
|
var (
|
|
ErrNoVMHost = errors.New("unable to get the victoria-metrics host")
|
|
ErrNoPromHost = errors.New("unable to get the prometheus host")
|
|
ErrUncompleteParam = errors.New("at least provide both namespace and query")
|
|
ErrEmptyKubeconfig = errors.New("empty kubeconfig")
|
|
ErrNilNs = errors.New("namespace not found")
|
|
)
|