diff --git a/flask-consul/units/gen_config.py b/flask-consul/units/gen_config.py
index 88f25a0..dfacd4c 100644
--- a/flask-consul/units/gen_config.py
+++ b/flask-consul/units/gen_config.py
@@ -1,4 +1,51 @@
from config import consul_token,consul_url
+
+def rds_config(services_list, exporter):
+ consul_server = consul_url.split("/")[2]
+ configs = f"""
+ - job_name: multi_mysqld_exporter
+ scrape_interval: 15s
+ scrape_timeout: 5s
+ metrics_path: /probe
+ consul_sd_configs:
+ - server: '{consul_server}'
+ token: '{consul_token}'
+ refresh_interval: 30s
+ services: {services_list}
+ relabel_configs:
+ - source_labels: [__meta_consul_service_address,__meta_consul_service_port]
+ regex: ([^:]+)(?::\d+)?;(\d+)
+ target_label: __param_target
+ replacement: $1:$2
+ - source_labels: [__param_target]
+ target_label: instance
+ - target_label: __address__
+ replacement: {exporter}
+ - source_labels: ['__meta_consul_service_metadata_vendor']
+ target_label: vendor
+ - source_labels: ['__meta_consul_service_metadata_region']
+ target_label: region
+ - source_labels: ['__meta_consul_service_metadata_group']
+ target_label: group
+ - source_labels: ['__meta_consul_service_metadata_account']
+ target_label: account
+ - source_labels: ['__meta_consul_service_metadata_name']
+ target_label: name
+ - source_labels: ['__meta_consul_service_metadata_iid']
+ target_label: iid
+ - source_labels: ['__meta_consul_service_metadata_exp']
+ target_label: exp
+ - source_labels: ['__meta_consul_service_metadata_cpu']
+ target_label: cpu
+ - source_labels: ['__meta_consul_service_metadata_mem']
+ target_label: mem
+ - source_labels: ['__meta_consul_service_metadata_disk']
+ target_label: disk
+ - source_labels: ['__meta_consul_service_metadata_itype']
+ target_label: itype
+"""
+ return {'code': 20000,'configs': configs }
+
def ecs_config(services_list,ostype_list):
consul_server = consul_url.split("/")[2]
job_dict = {'linux':'node_exporter','windows':'windows_exporter'}
@@ -39,6 +86,70 @@ def ecs_config(services_list,ostype_list):
"""
configs = configs + config_str
return {'code': 20000,'configs': configs }
+
+def get_rdsrules():
+ rules = """
+groups:
+- name: MySQL-Alert
+ rules:
+ - alert: MySQL_is_down
+ expr: mysql_up == 0
+ for: 3m
+ labels:
+ severity: critical
+ annotations:
+ description: "{{ $labels.group }}_{{ $labels.name }}:MySQL database is down. \\n> {{ $labels.iid }}"
+
+ - alert: MySQL_慢查询过多
+ expr: delta(mysql_global_status_slow_queries[1m]) > 60
+ for: 1m
+ labels:
+ severity: critical
+ annotations:
+ description: "{{ $labels.group }}_{{ $labels.name }}:每分钟慢查询:{{ $value }} \\n> {{ $labels.iid }}"
+
+ - alert: mysql_当前活跃的连接数过多
+ expr: mysql_global_status_threads_running > 100
+ for: 1m
+ labels:
+ severity: critical
+ annotations:
+ description: "{{ $labels.group }}_{{ $labels.name }}:当前活跃的连接数:{{ $value }} \\n> {{ $labels.iid }}"
+
+ - alert: mysql_当前updating状态的线程过多
+ expr: mysql_global_status_threads_running > 100
+ for: 1m
+ labels:
+ severity: critical
+ annotations:
+ description: "{{ $labels.group }}_{{ $labels.name }}:当前updating状态的线程:{{ $value }} \\n> {{ $labels.iid }}"
+
+ - alert: MySQL_High_QPS
+ expr: irate(mysql_global_status_questions[3m]) > 30000
+ for: 2m
+ labels:
+ severity: warning
+ annotations:
+ description: "{{ $labels.group }}_{{ $labels.name }}:Mysql QPS:{{ $value | humanize }} \\n> {{ $labels.iid }}"
+
+ - alert: MySQL_Too_Many_Connections
+ expr: irate(mysql_global_status_threads_connected[3m]) > 1000
+ for: 2m
+ labels:
+ severity: warning
+ annotations:
+ description: "{{ $labels.group }}_{{ $labels.name }}:Mysql Connections:{{ $value | humanize }} \\n> {{ $labels.iid }}"
+
+ - alert: MySQL_is_Restart
+ expr: mysql_global_status_uptime <600
+ for: 2m
+ labels:
+ severity: critical
+ annotations:
+ description: "{{ $labels.group }}_{{ $labels.name }}:MySQL database is Restart. \\n> {{ $labels.iid }}"
+"""
+ return {"code": 20000, "rules": rules}
+
def get_rules():
rules = """
groups:
diff --git a/flask-consul/views/.nodes.py.swp b/flask-consul/views/.nodes.py.swp
deleted file mode 100644
index fb4d4c6..0000000
Binary files a/flask-consul/views/.nodes.py.swp and /dev/null differ
diff --git a/flask-consul/views/nodes.py b/flask-consul/views/nodes.py
index d2be7cf..5d6af09 100644
--- a/flask-consul/views/nodes.py
+++ b/flask-consul/views/nodes.py
@@ -46,8 +46,18 @@ class Nodes(Resource):
serivces = i.split("/")
services_list.append(f'{serivces[0]}_{serivces[1]}_{serivces[2]}')
return {'code': 20000,'services_list': sorted(set(services_list))}
+ elif stype == 'rds_services':
+ jobecs = consul_kv.get_keys_list('ConsulManager/jobs')
+ jobecs_list = [i.split('/jobs/')[1] for i in jobecs if '/rds/' in i]
+ services_list = []
+ for i in jobecs_list:
+ serivces = i.split("/")
+ services_list.append(f'{serivces[0]}_{serivces[1]}_{serivces[2]}')
+ return {'code': 20000,'services_list': sorted(set(services_list))}
elif stype == 'rules':
return gen_config.get_rules()
+ elif stype == 'rdsrules':
+ return gen_config.get_rdsrules()
elif stype == 'cstecsconf':
args = parser.parse_args()
iid = args['iid']
@@ -76,6 +86,10 @@ class Nodes(Resource):
args = parser.parse_args()
services_dict = args['services_dict']
return gen_config.ecs_config(services_dict['services_list'],services_dict['ostype_list'])
+ elif stype == 'rdspconfig':
+ args = parser.parse_args()
+ services_dict = args['services_dict']
+ return gen_config.rds_config(services_dict['services_list'],services_dict['exporter'])
elif stype == 'cstecs':
args = parser.parse_args()
cst_ecs_dict = args['cst_ecs_dict']
diff --git a/vue-consul/src/api/node-exporter.js b/vue-consul/src/api/node-exporter.js
index 946dd33..70d8d36 100644
--- a/vue-consul/src/api/node-exporter.js
+++ b/vue-consul/src/api/node-exporter.js
@@ -59,6 +59,26 @@ export function getServicesList() {
method: 'get'
})
}
+export function getRdsServicesList() {
+ return request({
+ url: '/api/nodes/rds_services',
+ method: 'get'
+ })
+}
+
+export function getRdsConfig(services_dict) {
+ return request({
+ url: '/api/nodes/rdspconfig',
+ method: 'post',
+ data: { services_dict }
+ })
+}
+export function getRdsRules() {
+ return request({
+ url: '/api/nodes/rdsrules',
+ method: 'get'
+ })
+}
export function getConfig(services_dict) {
return request({
url: '/api/nodes/config',
diff --git a/vue-consul/src/views/node-exporter/.jobs.vue.swp b/vue-consul/src/views/node-exporter/.jobs.vue.swp
deleted file mode 100644
index 8d38108..0000000
Binary files a/vue-consul/src/views/node-exporter/.jobs.vue.swp and /dev/null differ
diff --git a/vue-consul/src/views/rds/grafana.vue b/vue-consul/src/views/rds/grafana.vue
index a1b397f..1954b13 100644
--- a/vue-consul/src/views/rds/grafana.vue
+++ b/vue-consul/src/views/rds/grafana.vue
@@ -4,16 +4,12 @@
- Grafana 看板ID:8919
+ 设计中,敬请期待