diff options
| author | shizhendong <[email protected]> | 2024-05-14 17:53:37 +0800 |
|---|---|---|
| committer | shizhendong <[email protected]> | 2024-05-14 17:53:37 +0800 |
| commit | 87485957b0f5629fc46753e233ff48d066482af8 (patch) | |
| tree | 377518bbfefcea7eec17e1bd0474f3e3f22405d4 | |
| parent | fec13581ca0436fa6c490bc398509d381d3d6861 (diff) | |
fix: NEZ-3400 解决 R__AZ_sys_config.sql 覆盖自定义配置问题rel-24.01.22
1. R__AZ_sys_config.sql 负责维护后端用到的配置
2. 通过 V__xxx.sql 维护用户可自定义的配置
| -rw-r--r-- | nz-admin/src/main/resources/db/R__AZ_sys_config.sql | 18 | ||||
| -rw-r--r-- | nz-admin/src/main/resources/db/V2024.05.14__add custom config to sys_config.sql | 13 |
2 files changed, 19 insertions, 12 deletions
diff --git a/nz-admin/src/main/resources/db/R__AZ_sys_config.sql b/nz-admin/src/main/resources/db/R__AZ_sys_config.sql index 766f65e1..7467c9a2 100644 --- a/nz-admin/src/main/resources/db/R__AZ_sys_config.sql +++ b/nz-admin/src/main/resources/db/R__AZ_sys_config.sql @@ -26,9 +26,7 @@ * 修改密码策略,增加修改密码定时提醒 */ -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'prom_yml_tmpl', '{\r\n \"global\": {\r\n \"scrape_interval\": \"${scrape_interval}s\",\r\n \"scrape_timeout\": <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n \"evaluation_interval\": \"${scrape_interval}s\"\r\n },\r\n \r\n <#-- alert 配置 -->\r\n <#if isAlert>\r\n \"alerting\": {\r\n \"alertmanagers\": [{\r\n \"path_prefix\": \"${path_prefix}\",\r\n \"static_configs\": [{\r\n \"targets\": [\"${alert_url}\"]\r\n }]\r\n }],\r\n \"alert_relabel_configs\": [{\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }, {\r\n \"regex\": \"replica\",\r\n \"action\": \"labeldrop\"\r\n }]\r\n },\r\n \"rule_files\": [\"rule.yml\"],\r\n </#if>\r\n \r\n \r\n \r\n <#-- per-datacenter 配置 -->\r\n <#if !isGlobal>\r\n \"scrape_configs\": [\r\n <#list jobList as jobPojo>\r\n {\r\n \"job_name\": \"${jobPojo.job_name}\",\r\n \"scheme\": \"${jobPojo.scheme?default(\"http\")}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": <#if jobPojo.metrics_path?default(\"\")?trim?length gt 0>\r\n \"${jobPojo.metrics_path}\",\r\n <#else>\r\n \"/metrics\",\r\n </#if>\r\n \"static_configs\":[\r\n <#list jobPojo.staticConfigList as staticConf >\r\n {\r\n \"targets\": [\r\n <#list staticConf.targets as targetConf>\r\n \"${targetConf}\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#if staticConf.labels ??&& (staticConf.labels?size >0)>\r\n ,\r\n \"labels\": {\r\n <#list staticConf.labels?keys as itemKey>\r\n \"${itemKey}\":<#if staticConf.labels[itemKey]?default(\"\")?trim?length gt 0>\r\n \"${staticConf.labels[itemKey]}\"\r\n <#else>\"\"</#if><#sep>,</#sep>\r\n </#list>\r\n } \r\n </#if>\r\n }<#sep>,</#sep>\r\n </#list>\r\n ],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if !jobPojo.instanceRelabel> \r\n ,\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n </#if>\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if !jobPojo.instanceRelabel> \r\n ,\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n </#if>\r\n ]\r\n }<#sep>,</#sep>\r\n </#list>\r\n <#if jobList??&&(jobList?size>0)>\r\n ,\r\n </#if>\r\n <#list endpointList as endpoint>\r\n {\r\n \"job_name\": ${endpoint.id?c},\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": <#if endpoint.config.metrics_path?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.metrics_path}\",\r\n <#else>\r\n <#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\">\r\n \"/metrics\",\r\n <#else>\r\n \"/snmp\",\r\n </#if>\r\n </#if>\r\n \"scrape_interval\": <#if endpoint.config.scrape_interval?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.scrape_interval?c}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if endpoint.config.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.scrape_timeout?c}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n\r\n\r\n\r\n <#if endpoint.config.basic_auth??&& (endpoint.config.basic_auth?size >0)>\r\n <#if endpoint.config.basic_auth.username?default(\"\")?trim?length gt 0 && endpoint.config.basic_auth.password?default(\"\")?trim?length gt 0>\r\n \"basic_auth\":{\r\n \"username\": \"${endpoint.config.basic_auth.username}\",\r\n \"password\": \"${endpoint.config.basic_auth.password}\"\r\n },\r\n </#if>\r\n </#if>\r\n \r\n <#if endpoint.config.bearer_token??&&endpoint.config.bearer_token?trim?length gt 0>\r\n \"authorization\":{\r\n \"type\":\"Bearer\",\r\n \"credentials\":\"${endpoint.config.bearer_token}\"\r\n },\r\n </#if>\r\n\r\n \r\n <#-- params 不为空且类型为 http ,添加 params -->\r\n <#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\" >\r\n \"scheme\": \"${endpoint.config.protocol}\",\r\n <#if endpoint.config.params?? && (endpoint.config.params?size >0) >\r\n \"params\":{\r\n <#list endpoint.config.params?keys as itemKey>\r\n \"${itemKey}\":[\r\n <#list endpoint.config.params[itemKey] as pojo>\r\n \"${pojo}\"\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#sep>,</#sep>\r\n </#list>\r\n },\r\n </#if>\r\n <#elseif endpoint.config.protocol == \"snmp\">\r\n <#-- 类型是 snmp ,组织 param 数据 , 原来params弃用,因为 snmp_exporter 不支持其他参数 -->\r\n \"params\":{\r\n \"target\":[ \"${endpoint.config.host}:${endpoint.config.port?c}\" ],\r\n \"module\":[ \"${endpoint.module.name}\" ]\r\n },\r\n </#if>\r\n \r\n \"static_configs\": [{\r\n \"targets\": [<#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\">\r\n \"${endpoint.config.host}:${endpoint.config.port?c}\"\r\n <#else>\r\n \"127.0.0.1:19116\"\r\n </#if>\r\n ],\r\n \"labels\": {\r\n \"datacenter\": \"${endpoint.dc.name}\",\r\n \"datacenter_id\":${endpoint.dc.id?c},\r\n \r\n \"project\": \"${endpoint.project.name}\",\r\n \"project_id\": ${endpoint.project.id?c},\r\n \r\n \"asset\": \"${endpoint.asset.name}\",\r\n \"asset_id\": ${endpoint.asset.id?c},\r\n \r\n \"module\": \"${endpoint.module.name}\",\r\n \"module_id\": ${endpoint.module.id?c},\r\n \r\n \"endpoint\": \"${endpoint.name}\",\r\n \"endpoint_id\": ${endpoint.id?c},\r\n \r\n <#if endpoint.asset.parent??&&(endpoint.asset.parent?size >0)>\r\n \"parent_asset\" : \"${endpoint.asset.parent.name}\",\r\n \"parent_asset_id\" : ${endpoint.asset.parent.id?c},\r\n </#if>\r\n\r\n \"nz_agent_id\": ${endpoint.agent.id?c}\r\n \r\n \r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n ,\r\n </#if>\r\n <#-- 补充用户自定义 Labels -->\r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n <#list endpoint.config.labels?keys as key>\r\n <#if key != \"datacenter\" && key != \"datacenter_id\" && key != \"project\" && key != \"project_id\" && key != \"asset\" && key != \"asset_id\" && key != \"module\" && key != \"module_id\" && key != \"endpoint\" && key != \"endpoint_id\">\r\n \"${key}\":\"${endpoint.config.labels[key]}\"<#sep>,</#sep>\r\n </#if>\r\n </#list>\r\n </#if>\r\n }\r\n }],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if endpoint.config.relabel_config??&& (endpoint.config.relabel_config?size >0)>\r\n <#list endpoint.config.relabel_config as relabel>\r\n ,{\r\n <#if relabel.action?? && (relabel.action == \'labeldrop\' || relabel.action == \'labelkeep\')>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'labelmap\'>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && (relabel.action == \'drop\' || relabel.action == \'keep\')>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'replace\'>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"separator\": \"${((relabel.separator!\'\')?length>0)?string((relabel.separator!\'\'),\";\")}\", \r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"target_label\": \"${(relabel.target_label)!\'\'}\"\r\n </#if>\r\n }\r\n </#list>\r\n </#if>\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n \r\n <#-- ping 配置 -->\r\n \r\n <#if endpointList??&&(endpointList?size>0)>\r\n ,\r\n </#if>\r\n \r\n <#list assetList as asset>\r\n {\r\n \"job_name\": \"asset_ping_${asset.id?c}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": \"/probe\",\r\n \"scrape_interval\": <#if asset.assetPingInterval?default(\"\")?trim?length gt 0>\r\n \"${asset.assetPingInterval}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if asset.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${asset.scrape_timeout}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n \"params\": {\r\n \"target\":[ \"${asset.manageIp}\" ],\r\n \"module\":[ \"ping\" ]\r\n },\r\n \"static_configs\": [{\r\n \"targets\": [\"127.0.0.1:19115\"],\r\n \"labels\": {\r\n \"datacenter\": \"${asset.dc.name}\",\r\n \"host\": \"${asset.manageIp}\",\r\n \"module\": \"ping\",\r\n \"source_ip\": \"${asset.agent.host}\",\r\n \"nz_agent_id\": ${asset.agent.id?c}\r\n }\r\n }],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#-- cortex 处理 -->\r\n ,\r\n \"remote_write\": [\r\n <#list remoteWriteUrlInfos as remoteConf>\r\n {\r\n \"url\": \"${remoteConf.url}\",\r\n \"authorization\": {\r\n \"type\": \"Bearer\",\r\n \"credentials\": \"${remoteConf.token}\"\r\n },\r\n \"tls_config\":{\r\n \"insecure_skip_verify\":true\r\n },\r\n \"write_relabel_configs\": [\r\n {\r\n \"source_labels\": [\"nz_agent_id\"],\r\n \"regex\": \"${currentAgent.id?c}\",\r\n \"action\": \"keep\"\r\n }\r\n ],\r\n \"queue_config\":{\r\n \"capacity\": 5000,\r\n \"max_samples_per_send\": 1000,\r\n \"min_shards\": 5,\r\n \"max_shards\": 10,\r\n \"min_backoff\": \"20ms\",\r\n \"min_backoff\": \"50ms\"\r\n }\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#else>\r\n <#-- global 配置 -->\r\n \"scrape_configs\": [\r\n <#list jobList as jobPojo>\r\n {\r\n \"job_name\": \"${jobPojo.job_name}\",\r\n \"scheme\": \"${jobPojo.scheme?default(\"http\")}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n <#if jobPojo.isFederate> \r\n \"honor_labels\": ${jobPojo.honor_labels},\r\n \"params\": {\r\n \"match[]\": [\r\n \"{__name__=~\\\".+\\\",nz_agent_id != \\\"${jobPojo.excludeAgentId?c}\\\"}\"\r\n ]\r\n },\r\n \"authorization\":{\r\n \"type\":\"Bearer\",\r\n \"credentials\":\"${jobPojo.token}\"\r\n },\r\n </#if>\r\n \"metrics_path\": <#if jobPojo.metrics_path?default(\"\")?trim?length gt 0>\r\n \"${jobPojo.metrics_path}\",\r\n <#else>\r\n \"/metrics\",\r\n </#if>\r\n \"static_configs\":[\r\n <#list jobPojo.staticConfigList as staticConf >\r\n {\r\n \"targets\": [\r\n <#list staticConf.targets as targetConf>\r\n \"${targetConf}\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#if staticConf.labels ??&& (staticConf.labels?size >0)>\r\n ,\r\n \"labels\": {\r\n <#list staticConf.labels?keys as itemKey>\r\n \"${itemKey}\":<#if staticConf.labels[itemKey]?default(\"\")?trim?length gt 0>\r\n \"${staticConf.labels[itemKey]}\"\r\n <#else>\"\"</#if><#sep>,</#sep>\r\n </#list>\r\n } \r\n </#if>\r\n }<#sep>,</#sep>\r\n </#list>\r\n ],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if !jobPojo.instanceRelabel> \r\n ,\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n </#if>\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if !jobPojo.instanceRelabel> \r\n ,\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n </#if>\r\n ]\r\n }<#sep>,</#sep>\r\n </#list>\r\n \r\n <#-- ping 配置 -->\r\n \r\n <#if jobList??&&(jobList?size>0)>\r\n ,\r\n </#if>\r\n \r\n <#list assetList as asset>\r\n {\r\n \"job_name\": \"asset_ping_${asset.id?c}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": \"/probe\",\r\n \"scrape_interval\": <#if asset.assetPingInterval?default(\"\")?trim?length gt 0>\r\n \"${asset.assetPingInterval}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if asset.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${asset.scrape_timeout}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n \"params\": {\r\n \"target\":[ \"${asset.manageIp}\" ],\r\n \"module\":[ \"ping\" ]\r\n },\r\n \"static_configs\": [{\r\n \"targets\": [\"127.0.0.1:19115\"],\r\n \"labels\": {\r\n \"datacenter\": \"${asset.dc.name}\",\r\n \"host\": \"${asset.manageIp}\",\r\n \"module\": \"ping\",\r\n \"source_ip\": \"${asset.agent.host}\",\r\n \"nz_agent_id\": ${asset.agent.id?c}\r\n }\r\n }],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n \r\n \r\n <#if ( jobList??&&(jobList?size>0)) || assetList??&&(assetList?size>0)>\r\n ,\r\n </#if>\r\n \r\n <#list endpointList as endpoint>\r\n {\r\n \"job_name\": ${endpoint.id?c},\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": <#if endpoint.config.metrics_path?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.metrics_path}\",\r\n <#else>\r\n <#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\">\r\n \"/metrics\",\r\n <#else>\r\n \"/snmp\",\r\n </#if>\r\n </#if>\r\n \"scrape_interval\": <#if endpoint.config.scrape_interval?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.scrape_interval?c}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if endpoint.config.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.scrape_timeout?c}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n\r\n\r\n\r\n <#if endpoint.config.basic_auth??&& (endpoint.config.basic_auth?size >0)>\r\n <#if endpoint.config.basic_auth.username?default(\"\")?trim?length gt 0 && endpoint.config.basic_auth.password?default(\"\")?trim?length gt 0>\r\n \"basic_auth\":{\r\n \"username\": \"${endpoint.config.basic_auth.username}\",\r\n \"password\": \"${endpoint.config.basic_auth.password}\"\r\n },\r\n </#if>\r\n </#if>\r\n \r\n \r\n <#if endpoint.config.bearer_token??&&endpoint.config.bearer_token?trim?length gt 0>\r\n \"authorization\":{\r\n \"type\":\"Bearer\",\r\n \"credentials\":\"${endpoint.config.bearer_token}\"\r\n },\r\n </#if>\r\n\r\n \r\n <#-- params 不为空且类型为 http ,添加 params -->\r\n <#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\" >\r\n \"scheme\": \"${endpoint.config.protocol}\",\r\n <#if endpoint.config.params?? && (endpoint.config.params?size >0) >\r\n \"params\":{\r\n <#list endpoint.config.params?keys as itemKey>\r\n \"${itemKey}\":[\r\n <#list endpoint.config.params[itemKey] as pojo>\r\n \"${pojo}\"\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#sep>,</#sep>\r\n </#list>\r\n },\r\n </#if>\r\n <#elseif endpoint.config.protocol == \"snmp\">\r\n <#-- 类型是 snmp ,组织 param 数据 , 原来params弃用,因为 snmp_exporter 不支持其他参数 -->\r\n \"params\":{\r\n \"target\":[ \"${endpoint.config.host}:${endpoint.config.port?c}\" ],\r\n \"module\":[ \"${endpoint.module.name}\" ]\r\n },\r\n </#if>\r\n \r\n \"static_configs\": [{\r\n \"targets\": [<#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\">\r\n \"${endpoint.config.host}:${endpoint.config.port?c}\"\r\n <#else>\r\n \"127.0.0.1:19116\"\r\n </#if>\r\n ],\r\n \"labels\": {\r\n \"datacenter\": \"${endpoint.dc.name}\",\r\n \"datacenter_id\":${endpoint.dc.id?c},\r\n \r\n \"project\": \"${endpoint.project.name}\",\r\n \"project_id\": ${endpoint.project.id?c},\r\n \r\n \"asset\": \"${endpoint.asset.name}\",\r\n \"asset_id\": ${endpoint.asset.id?c},\r\n \r\n \"module\": \"${endpoint.module.name}\",\r\n \"module_id\": ${endpoint.module.id?c},\r\n \r\n \"endpoint\": \"${endpoint.name}\",\r\n \"endpoint_id\": ${endpoint.id?c},\r\n \r\n <#if endpoint.asset.parent??&&(endpoint.asset.parent?size >0)>\r\n \"parent_asset\" : \"${endpoint.asset.parent.name}\",\r\n \"parent_asset_id\" : ${endpoint.asset.parent.id?c},\r\n </#if>\r\n \r\n \"nz_agent_id\": ${endpoint.agent.id?c}\r\n \r\n \r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n ,\r\n </#if>\r\n <#-- 补充用户自定义 Labels -->\r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n <#list endpoint.config.labels?keys as key>\r\n <#if key != \"datacenter\" && key != \"datacenter_id\" && key != \"project\" && key != \"project_id\" && key != \"asset\" && key != \"asset_id\" && key != \"module\" && key != \"module_id\" && key != \"endpoint\" && key != \"endpoint_id\">\r\n \"${key}\":\"${endpoint.config.labels[key]}\"<#sep>,</#sep>\r\n </#if>\r\n </#list>\r\n </#if>\r\n }\r\n }],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if endpoint.config.relabel_config??&& (endpoint.config.relabel_config?size >0)>\r\n <#list endpoint.config.relabel_config as relabel>\r\n ,{\r\n <#if relabel.action?? && (relabel.action == \'labeldrop\' || relabel.action == \'labelkeep\')>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'labelmap\'>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && (relabel.action == \'drop\' || relabel.action == \'keep\')>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'replace\'>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"separator\": \"${((relabel.separator!\'\')?length>0)?string((relabel.separator!\'\'),\";\")}\", \r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"target_label\": \"${(relabel.target_label)!\'\'}\"\r\n </#if>\r\n }\r\n </#list>\r\n </#if>\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n \r\n ]\r\n \r\n <#-- cortex 处理 -->\r\n ,\r\n \"remote_write\": [\r\n <#list remoteWriteUrlInfos as remoteConf>\r\n { \r\n \"url\": \"${remoteConf.url}\",\r\n \"authorization\": {\r\n \"type\": \"Bearer\",\r\n \"credentials\": \"${remoteConf.token}\"\r\n },\r\n \"tls_config\":{\r\n \"insecure_skip_verify\":true\r\n },\r\n \"write_relabel_configs\": [\r\n {\r\n \"source_labels\": [\"nz_agent_id\"],\r\n \"regex\": \"${currentAgent.id?c}\",\r\n \"action\": \"keep\"\r\n }\r\n ],\r\n \"queue_config\":{\r\n \"capacity\": 5000,\r\n \"max_samples_per_send\": 1000,\r\n \"min_shards\": 5,\r\n \"max_shards\": 10,\r\n \"min_backoff\": \"20ms\",\r\n \"min_backoff\": \"50ms\"\r\n }\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n ] \r\n </#if>\r\n \r\n <#-- tsdb 配置 -->\r\n ,\r\n \"storage\": {\r\n \"tsdb\": {\r\n \"out_of_order_time_window\": \"${systemConfig.prometheus_tsdb_out_of_order_time_window}h\"\r\n }\r\n }\r\n}', 1, 'prometheus config文件模板'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'promtail_yml_tmpl', '{\r\n \"server\": {\r\n \"http_listen_address\": \"0.0.0.0\",\r\n \"http_listen_port\": 19080,\r\n \"grpc_listen_port\": 19081\r\n },\r\n \"clients\": [\r\n <#list clientsMapList as clientMap>\r\n {\r\n \"url\" : \"${clientMap.url}\",\r\n \"bearer_token\": \"${clientMap.token}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\":true\r\n }\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n ],\r\n \"positions\": {\r\n \"filename\": \"/opt/nezha/promtail/positions.yaml\"\r\n },\r\n \"scrape_configs\": [\r\n <#list endpointList as endpoint>\r\n {\r\n \"job_name\": \"${endpoint.id?c}_${endpoint_index}\",\r\n \"pipeline_stages\": [\r\n <#if endpoint.config.pipeline??&&(endpoint.config.pipeline?size>0)>\r\n <#list endpoint.config.pipeline as pipeline>\r\n {\r\n <#if pipeline.type == \"regex\">\r\n \"regex\": {\r\n \"expression\": \"${pipeline.expression}\",\r\n \"source\": \"${pipeline.source}\"\r\n }\r\n </#if>\r\n <#if pipeline.type == \"json\">\r\n \"json\": {\r\n \"expressions\": {\r\n <#if pipeline.expressions??&& (pipeline.expressions?size >0)>\r\n <#list pipeline.expressions?keys as key>\r\n \"${key}\":\"${pipeline.expressions[key]}\"\r\n <#sep>,</#sep>\r\n </#list>\r\n </#if>\r\n },\r\n \"source\": \"${pipeline.source}\"\r\n }\r\n </#if>\r\n <#if pipeline.type == \"template\">\r\n \"template\": {\r\n \"source\": \"${pipeline.source}\",\r\n \"template\": \"${pipeline.template}\"\r\n }\r\n </#if>\r\n <#if pipeline.type == \"timestamp\">\r\n \"timestamp\": {\r\n \"source\": \"${pipeline.source}\",\r\n \"format\": \"${pipeline.format}\"\r\n }\r\n </#if>\r\n <#if pipeline.type == \"labels\"> \r\n \"labels\": { \r\n <#if pipeline.labels??&& (pipeline.labels?size >0)>\r\n <#list pipeline.labels?keys as key>\r\n \"${key}\":\"${pipeline.labels[key]}\"\r\n <#sep>,</#sep>\r\n </#list>\r\n </#if>\r\n }\r\n </#if> \r\n <#if pipeline.type == \"output\"> \r\n \"output\": {\r\n \"source\": \"${pipeline.source}\"\r\n }\r\n </#if> \r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n </#if>\r\n ],\r\n \"relabel_configs\": [\r\n <#if endpoint.config.relabel_config ??&& (endpoint.config.relabel_config?size >0)>\r\n <#list endpoint.config.relabel_config as relabel>\r\n {\r\n <#if relabel.action?? && (relabel.action == \'labeldrop\' || relabel.action == \'labelkeep\')>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'labelmap\'>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && (relabel.action == \'drop\' || relabel.action == \'keep\')>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'replace\'>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"separator\": \"${((relabel.separator!\'\')?length>0)?string((relabel.separator!\'\'),\";\")}\", \r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"target_label\": \"${(relabel.target_label)!\'\'}\"\r\n </#if>\r\n }<#sep>,</#sep>\r\n </#list>\r\n <#-- 自定义 relabel_config 为空,补充默认配置 -->\r\n <#if endpoint.config.type == \"syslog\">\r\n ,{\r\n \"source_labels\": [\r\n \"__syslog_message_app_name\"\r\n ],\r\n \"regex\":\"${endpoint.config.appName}\",\r\n \"action\":\"keep\"\r\n },\r\n {\r\n \"source_labels\": [\r\n \"__syslog_message_app_name\"\r\n ],\r\n \"target_label\": \"appName\"\r\n }\r\n </#if>\r\n \r\n <#if endpoint.config.type == \"journal\">\r\n ,{\r\n \"source_labels\": [\r\n \"__journal__systemd_unit\"\r\n ],\r\n \"regex\":\"${endpoint.config.unit}\",\r\n \"action\":\"keep\"\r\n },\r\n {\r\n \"source_labels\": [\r\n \"__journal__systemd_unit\"\r\n ],\r\n \"target_label\": \"unit\"\r\n }\r\n </#if>\r\n <#else>\r\n <#-- 自定义 relabel_config 为空,补充默认配置 -->\r\n <#if endpoint.config.type == \"syslog\">\r\n {\r\n \"source_labels\": [\r\n \"__syslog_message_app_name\"\r\n ],\r\n \"regex\":\"${endpoint.config.appName}\",\r\n \"action\":\"keep\"\r\n },\r\n {\r\n \"source_labels\": [\r\n \"__syslog_message_app_name\"\r\n ],\r\n \"target_label\": \"appName\"\r\n }\r\n </#if>\r\n \r\n <#if endpoint.config.type == \"journal\">\r\n {\r\n \"source_labels\": [\r\n \"__journal__systemd_unit\"\r\n ],\r\n \"regex\":\"${endpoint.config.unit}\",\r\n \"action\":\"keep\"\r\n },\r\n {\r\n \"source_labels\": [\r\n \"__journal__systemd_unit\"\r\n ],\r\n \"target_label\": \"unit\"\r\n }\r\n </#if>\r\n </#if>\r\n ],\r\n <#if endpoint.config.type == \"file\">\r\n \"static_configs\": [\r\n {\r\n \"labels\": {\r\n \"__path__\": \"${endpoint.config.fileName}\",\r\n \"datacenter\": \"${endpoint.dc.name}\",\r\n \r\n \"project\": \"${endpoint.project.name}\",\r\n \r\n \"asset\": \"${endpoint.asset.name}\",\r\n \r\n \"module\": \"${endpoint.module.name}\",\r\n \r\n \"endpoint\": \"${endpoint.name}\",\r\n \r\n <#if endpoint.asset.parent??&&(endpoint.asset.parent?size >0)>\r\n \"parent_asset\" : \"${endpoint.asset.parent.name}\"\r\n </#if>\r\n \r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n ,\r\n </#if>\r\n <#-- 补充用户自定义 Labels -->\r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n <#list endpoint.config.labels?keys as key>\r\n <#if key != \"datacenter\" && key != \"project\" && key != \"asset\" && key != \"module\" && key != \"endpoint\">\r\n \"${key}\":\"${endpoint.config.labels[key]}\"<#sep>,</#sep>\r\n </#if>\r\n </#list>\r\n </#if>\r\n }\r\n }\r\n ]\r\n <#elseif endpoint.config.type == \"syslog\">\r\n \"syslog\": {\r\n \"listen_address\": \"${endpoint.config.listenAddress}\",\r\n \"labels\": {\r\n \"datacenter\": \"${endpoint.dc.name}\",\r\n \r\n \"project\": \"${endpoint.project.name}\",\r\n \r\n \"asset\": \"${endpoint.asset.name}\",\r\n \r\n \"module\": \"${endpoint.module.name}\",\r\n \r\n \"endpoint\": \"${endpoint.name}\",\r\n \r\n <#if endpoint.asset.parent??&&(endpoint.asset.parent?size >0)>\r\n \"parent_asset\" : \"${endpoint.asset.parent.name}\"\r\n </#if>\r\n \r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n ,\r\n </#if>\r\n <#-- 补充用户自定义 Labels -->\r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n <#list endpoint.config.labels?keys as key>\r\n <#if key != \"datacenter\" && key != \"project\" && key != \"asset\" && key != \"module\" && key != \"endpoint\">\r\n \"${key}\":\"${endpoint.config.labels[key]}\"<#sep>,</#sep>\r\n </#if>\r\n </#list>\r\n </#if>\r\n }\r\n }\r\n <#elseif endpoint.config.type == \"journal\">\r\n \"journal\": {\r\n \"labels\": {\r\n \"datacenter\": \"${endpoint.dc.name}\",\r\n \r\n \"project\": \"${endpoint.project.name}\",\r\n \r\n \"asset\": \"${endpoint.asset.name}\",\r\n \r\n \"module\": \"${endpoint.module.name}\",\r\n \r\n \"endpoint\": \"${endpoint.name}\",\r\n \r\n <#if endpoint.asset.parent??&&(endpoint.asset.parent?size >0)>\r\n \"parent_asset\" : \"${endpoint.asset.parent.name}\"\r\n </#if>\r\n \r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n ,\r\n </#if>\r\n <#-- 补充用户自定义 Labels -->\r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n <#list endpoint.config.labels?keys as key>\r\n <#if key != \"datacenter\" && key != \"project\" && key != \"asset\" && key != \"module\" && key != \"endpoint\">\r\n \"${key}\":\"${endpoint.config.labels[key]}\"<#sep>,</#sep>\r\n </#if>\r\n </#list>\r\n </#if>\r\n\r\n }\r\n } \r\n <#elseif endpoint.config.type == \"kubernetes\">\r\n \"kubernetes_sd_configs\": [\r\n {\r\n \"api_server\": \"${((endpoint.config.apiServer!\'\')?length>0)?string((endpoint.config.apiServer!\'\'),\"127.0.0.1\")}\",\r\n \"role\": \"${((endpoint.config.role!\'\')?length>0)?string((endpoint.config.role!\'\'),\"pod\")}\",\r\n \r\n <#if endpoint.config.basic_auth??&& (endpoint.config.basic_auth?size >0)>\r\n <#if endpoint.config.basic_auth.username?default(\"\")?trim?length gt 0 && endpoint.config.basic_auth.password?default(\"\")?trim?length gt 0>\r\n \"basic_auth\":{\r\n \"username\": \"${endpoint.config.basic_auth.username}\",\r\n \"password\": \"${endpoint.config.basic_auth.password}\"\r\n },\r\n </#if>\r\n </#if>\r\n \r\n <#if endpoint.config.bearer_token??&&endpoint.config.bearer_token?trim?length gt 0>\r\n \"bearer_token\": \"${endpoint.config.bearer_token}\",\r\n </#if>\r\n \r\n \"namespaces\": {\r\n \"names\": [\r\n <#if endpoint.config.namespaces.names ??&& (endpoint.config.namespaces.names?size >0)>\r\n <#list endpoint.config.namespaces.names as namespace>\r\n \"${namespace}\"<#sep>,</#sep>\r\n </#list>\r\n </#if>\r\n ]\r\n }\r\n }\r\n ]\r\n </#if>\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n}', 1, 'promtail.yml 配置模板'); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'pin_policy', '{\"enable\":0,\"length\":6,\"num\":1,\"lower\":1,\"upper\":1,\"spec\":1,\"valid\":30,\"remind\":3,\"retry\":2,\"lockTime\":30}', 1, NULL); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'snmp_exporter_prometheus_path', '/metrics', 1, NULL); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'blackbox_exporter_prometheus_path', '/metrics', 1, NULL); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'snmp_exporter_prometheus_port', '19116', 1, NULL); @@ -47,19 +45,13 @@ REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'blackbox_exporter_prometheus_host', '127.0.0.1', 1, NULL); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'system_version', '24.01', 1, 'NZ系统版本'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'prometheus_default_retention_time_when_s3', '1', 1, 'metrics 对象存储时普罗米修斯默认保留时间 单位: d'); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'interface_name', 'eth0,en0,bond0,ens2f0,enp0s31f6', 1, NULL); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'stat_query_json', '[\r\n {\r\n \"name\": \"asset\",\r\n \"datasql\": \"SELECT t.name as asset,t.*,atc.vm,atc.vmh,atc.NAME AS type,assc.NAME AS state,ab.NAME AS brand,am.NAME AS model,dc.NAME AS datacenter,cabinet.NAME AS cabinet,(CASE ap.`status` WHEN 1 THEN \'Up\' WHEN 0 THEN \'Down\' ELSE \'Suspended\' END) AS ping,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count,(CASE WHEN mc.c IS NULL THEN 0 ELSE mc.c END) AS endpoint_count FROM asset_asset t LEFT JOIN asset_type_conf atc ON t.type_id=atc.id LEFT JOIN asset_state_conf assc ON t.state_id=assc.id LEFT JOIN asset_brand ab ON t.brand_id=ab.id LEFT JOIN asset_model am ON t.model_id=am.id LEFT JOIN dc ON t.dc_id=dc.id LEFT JOIN cabinet ON t.cabinet_id=cabinet.id LEFT JOIN asset_ping ap ON t.id=ap.asset_id LEFT JOIN (SELECT asset_id,count(1) AS c FROM alert_message_active ama WHERE ama.asset_id IS NOT NULL GROUP BY asset_id) amc ON amc.asset_id=t.id LEFT JOIN (SELECT asset_id,count(1) AS c FROM monitor_endpoint me GROUP BY asset_id) mc ON mc.asset_id=t.id\",\r\n \"group\": [\r\n {\r\n \"name\": \"ping\",\r\n \"expr\": \"ping\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"asset_type\",\r\n \"expr\": \"type\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"asset_state\",\r\n \"expr\": \"state\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"brand\",\r\n \"expr\": \"brand\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"model\",\r\n \"expr\": \"model\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"datacenter\",\r\n \"expr\": \"datacenter\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"cabinet\",\r\n \"expr\": \"cabinet\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"asset\",\r\n \"expr\": \"asset\",\r\n \"type\": 2\r\n }\r\n ],\r\n \"select\": [\r\n {\r\n \"name\": \"count\",\r\n \"expr\": \"count(1)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"alert_message_sum\",\r\n \"expr\": \"sum(alert_message_count)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"endpoint_sum\",\r\n \"expr\": \"sum(endpoint_count)\",\r\n \"type\": 1\r\n }\r\n ],\r\n \"filter\": [\r\n {\r\n \"name\": \"datacenter\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_datacenter_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"dc.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"dc.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"dc.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"dc.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"asset\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_asset_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"t.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"t.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"t.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"t.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"asset type\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_asset_type_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"atc.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"atc.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"atc.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"atc.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"asset state\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_asset_state_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"assc.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"assc.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"assc.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"assc.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"asset brand\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_asset_brand_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"ab.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"ab.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"ab.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"ab.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"asset model\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_asset_model_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"am.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"am.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"am.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"am.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"id\",\r\n \"type\": 1,\r\n \"rule\": [\r\n {\r\n \"regex\": \"\\\\d+\",\r\n \"tip\": \"filter_asset_id_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \">\",\r\n \"expr\": \"t.id > {{value}}\"\r\n },\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"t.id = {{value}}\"\r\n },\r\n {\r\n \"name\": \"<\",\r\n \"expr\": \"t.id < {{value}}\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"t.id != {{value}}\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"datacenter\",\r\n \"datasql\": \"SELECT t.id,t.name as datacenter,(CASE WHEN cc.c IS NULL THEN 0 ELSE cc.c END) AS cabinet_count,(CASE WHEN ac.c IS NULL THEN 0 ELSE ac.c END) AS asset_count,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count FROM dc t LEFT JOIN (SELECT dc_id,count(1) AS c FROM cabinet GROUP BY dc_id) cc ON cc.dc_id=t.id LEFT JOIN (SELECT dc_id,count(1) AS c FROM asset_asset GROUP BY dc_id) ac ON ac.dc_id=t.id LEFT JOIN (SELECT dc_id,count(1) AS c FROM alert_message_active ama WHERE ama.dc_id IS NOT NULL GROUP BY dc_id) amc ON amc.dc_id=t.id\",\r\n \"group\": [\r\n {\r\n \"name\": \"datacenter\",\r\n \"expr\": \"datacenter\",\r\n \"type\": 2\r\n }\r\n ],\r\n \"select\": [\r\n {\r\n \"name\": \"count\",\r\n \"expr\": \"count(1)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"alert_message_sum\",\r\n \"expr\": \"sum(alert_message_count)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"cabinet_sum\",\r\n \"expr\": \"sum(cabinet_count)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"asset_sum\",\r\n \"expr\": \"sum(asset_count)\",\r\n \"type\": 1\r\n }\r\n ],\r\n \"filter\": [\r\n {\r\n \"name\": \"datacenter\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_datacenter_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"t.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"t.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"t.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"t.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"project\",\r\n \"datasql\": \"SELECT t.id,t.name as project,(CASE WHEN mm.c IS NULL THEN 0 ELSE mm.c END) AS module_count,(CASE WHEN aec.c IS NULL THEN 0 ELSE aec.c END) AS endpoint_count,(CASE WHEN aec.ac IS NULL THEN 0 ELSE aec.ac END) AS asset_count,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count FROM monitor_project t LEFT JOIN (SELECT project_id,count(1) AS c FROM monitor_module GROUP BY project_id) mm ON mm.project_id=t.id LEFT JOIN (SELECT project_id,count(1) AS c FROM alert_message_active ama WHERE ama.project_id IS NOT NULL GROUP BY project_id) amc ON amc.project_id=t.id LEFT JOIN (SELECT project_id,count(1) AS c,count(DISTINCT e.asset_id) AS ac FROM monitor_endpoint e LEFT JOIN monitor_module m ON m.id=e.module_id GROUP BY m.project_id) aec ON aec.project_id=t.id\",\r\n \"group\": [\r\n {\r\n \"name\": \"project\",\r\n \"expr\": \"project\",\r\n \"type\": 2\r\n }\r\n ],\r\n \"select\": [\r\n {\r\n \"name\": \"count\",\r\n \"expr\": \"count(1)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"alert_message_sum\",\r\n \"expr\": \"sum(alert_message_count)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"module_sum\",\r\n \"expr\": \"sum(module_count)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"endpoint_sum\",\r\n \"expr\": \"sum(endpoint_count)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"asset_sum\",\r\n \"expr\": \"sum(asset_count)\",\r\n \"type\": 1\r\n }\r\n ],\r\n \"filter\": [\r\n {\r\n \"name\": \"project\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_project_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"t.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"t.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"t.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"t.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"module\",\r\n \"datasql\": \"SELECT t.id,t.NAME AS module,mp.NAME AS project,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count,(CASE WHEN mc.c IS NULL THEN 0 ELSE mc.c END) AS endpoint_count,(CASE WHEN mc.ac IS NULL THEN 0 ELSE mc.ac END) AS asset_count FROM monitor_module t LEFT JOIN monitor_project mp ON t.project_id=mp.id LEFT JOIN (SELECT module_id,count(1) AS c FROM alert_message_active ama WHERE ama.module_id IS NOT NULL GROUP BY module_id) amc ON amc.module_id=t.id LEFT JOIN (SELECT module_id,count(1) AS c,count(DISTINCT asset_id) AS ac FROM monitor_endpoint me GROUP BY module_id) mc ON mc.module_id=t.id\",\r\n \"group\": [\r\n {\r\n \"name\": \"project\",\r\n \"expr\": \"project\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"module\",\r\n \"expr\": \"module\",\r\n \"type\": 2\r\n }\r\n ],\r\n \"select\": [\r\n {\r\n \"name\": \"count\",\r\n \"expr\": \"count(1)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"alert_message_sum\",\r\n \"expr\": \"sum(alert_message_count)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"endpoint_sum\",\r\n \"expr\": \"sum(endpoint_count)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"asset_sum\",\r\n \"expr\": \"sum(asset_count)\",\r\n \"type\": 1\r\n }\r\n ],\r\n \"filter\": [\r\n {\r\n \"name\": \"project\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_project_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"mp.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"mp.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"mp.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"mp.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"module\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_module_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"t.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"t.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"t.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"t.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"endpoint\",\r\n \"datasql\": \"SELECT \\tt.NAME AS endpoint, \\tt.*, \\tmm.NAME AS module, \\tmp.NAME AS project, \\tdc.NAME AS datacenter, \\taa.NAME AS asset, \\tatc.vm, \\tatc.vmh, \\tatc.NAME AS type, \\tassc.NAME AS state, \\tab.NAME AS brand, \\tam.NAME AS model, \\tcabinet.NAME AS cabinet, \\t( CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END ) AS alert_message_count FROM \\tmonitor_endpoint t \\tLEFT JOIN monitor_module mm ON t.module_id = mm.id \\tLEFT JOIN monitor_project mp ON mm.project_id = mp.id \\tLEFT JOIN asset_asset aa ON t.asset_id = aa.id \\tLEFT JOIN asset_type_conf atc ON aa.type_id = atc.id \\tLEFT JOIN asset_state_conf assc ON aa.state_id = assc.id \\tLEFT JOIN asset_brand ab ON aa.brand_id = ab.id \\tLEFT JOIN asset_model am ON aa.model_id = am.id \\tLEFT JOIN dc ON aa.dc_id = dc.id \\tLEFT JOIN cabinet ON aa.cabinet_id = cabinet.id \\tLEFT JOIN asset_ping ap ON aa.id = ap.asset_id \\tLEFT JOIN ( SELECT endpoint_id, count( 1 ) AS c FROM alert_message_active ama WHERE ama.endpoint_id IS NOT NULL GROUP BY endpoint_id ) amc ON amc.endpoint_id = t.id\",\r\n \"group\": [\r\n {\r\n \"name\": \"project\",\r\n \"expr\": \"project\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"module\",\r\n \"expr\": \"module\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"datacenter\",\r\n \"expr\": \"datacenter\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"asset\",\r\n \"expr\": \"asset\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"endpoint\",\r\n \"expr\": \"endpoint\",\r\n \"type\": 2\r\n }\r\n ],\r\n \"select\": [\r\n {\r\n \"name\": \"count\",\r\n \"expr\": \"count(1)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"alert_message_sum\",\r\n \"expr\": \"sum(alert_message_count)\",\r\n \"type\": 1\r\n }\r\n ],\r\n \"filter\": [\r\n {\r\n \"name\": \"project\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_project_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"mp.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"mp.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"mp.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"mp.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"module\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_module_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"mm.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"mm.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"mm.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"mm.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"endpoint\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_endpoint_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"t.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"t.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"t.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"t.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"datacenter\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_datacenter_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"dc.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"dc.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"dc.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"dc.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"asset\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_asset_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"aa.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"aa.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"aa.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"aa.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"alert rule\",\r\n \"datasql\": \"SELECT t.id,t.NAME AS \'alertRule\',(CASE t.state WHEN 1 THEN \'Enabled\' WHEN 0 THEN \'Disabled\' ELSE \'Unkown\' END) AS state,(CASE t.type WHEN 1 THEN \'Metrics\' WHEN 2 THEN \'Logs\' WHEN 3 THEN \'SNMPTRAP\' ELSE \'Unkown\' END) AS typename,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count FROM alert_rule t LEFT JOIN (SELECT rule_id,count(1) AS c FROM alert_message_active ama WHERE ama.rule_id IS NOT NULL GROUP BY rule_id) amc ON amc.rule_id=t.id\",\r\n \"group\": [\r\n {\r\n \"name\": \"type\",\r\n \"expr\": \"typename\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"state\",\r\n \"expr\": \"state\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"alert_rule\",\r\n \"expr\": \"alertRule\",\r\n \"type\": 2\r\n }\r\n ],\r\n \"select\": [\r\n {\r\n \"name\": \"count\",\r\n \"expr\": \"count(1)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"alert_message_sum\",\r\n \"expr\": \"sum(alert_message_count)\",\r\n \"type\": 1\r\n }\r\n ],\r\n \"filter\": [\r\n {\r\n \"name\": \"alert rule\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_alert_rule_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"t.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"t.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"t.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"t.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"alert message\",\r\n \"datasql\": \"SELECT t.id,t.asset_id,t.endpoint_id,t.rule_id,t.project_id,t.module_id,t.dc_id,alsc.NAME AS severity,ar.NAME AS alert,(CASE ar.type WHEN 1 THEN \'Metrics\' WHEN 2 THEN \'Logs\' WHEN 3 THEN \'SNMPTRAP\' ELSE \'Unkown\' END) AS alertType,mp.NAME AS project,mm.NAME AS module,me.NAME AS endpoint,aa.NAME AS asset,dc.NAME AS datacenter FROM alert_message_active t LEFT JOIN alert_rule ar ON t.rule_id=ar.id LEFT JOIN monitor_project mp ON t.project_id=mp.id LEFT JOIN monitor_module mm ON t.module_id=mm.id LEFT JOIN monitor_endpoint me ON t.endpoint_id=me.id LEFT JOIN asset_asset aa ON t.asset_id=aa.id LEFT JOIN dc ON t.dc_id=dc.id LEFT JOIN alert_severity_conf alsc ON t.severity_id=alsc.id\",\r\n \"group\": [\r\n {\r\n \"name\": \"datacenter\",\r\n \"expr\": \"datacenter\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"project\",\r\n \"expr\": \"project\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"module\",\r\n \"expr\": \"module\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"endpoint\",\r\n \"expr\": \"endpoint\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"asset\",\r\n \"expr\": \"asset\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"alert_rule\",\r\n \"expr\": \"alert\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"priority\",\r\n \"expr\": \"severity\",\r\n \"type\": 2\r\n }\r\n ],\r\n \"select\": [\r\n {\r\n \"name\": \"count\",\r\n \"expr\": \"count(1)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"affected_asset\",\r\n \"expr\": \"count(DISTINCT t.asset_id)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"affected_datacenter\",\r\n \"expr\": \"count(DISTINCT t.dc_id)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"affected_project\",\r\n \"expr\": \"count(DISTINCT t.project_id)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"affected_module\",\r\n \"expr\": \"count(DISTINCT t.module_id)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"affected_endpoint\",\r\n \"expr\": \"count(DISTINCT t.endpoint_id)\",\r\n \"type\": 1\r\n },\r\n {\r\n \"name\": \"affected_alert_rule\",\r\n \"expr\": \"count(DISTINCT t.rule_id)\",\r\n \"type\": 1\r\n }\r\n ],\r\n \"filter\": [\r\n {\r\n \"name\": \"project\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_project_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"mp.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"mp.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"mp.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"mp.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"module\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_module_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"mm.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"mm.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"mm.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"mm.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"endpoint\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_endpoint_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"me.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"me.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"me.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"me.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"datacenter\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_datacenter_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"dc.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"dc.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"dc.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"dc.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"asset\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_asset_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"aa.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"aa.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"aa.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"aa.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"priority\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_priority_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"alsc.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"alsc.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"alsc.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"alsc.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"alert rule\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_alert_rule_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"ar.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"ar.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"ar.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"ar.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"agent\",\r\n \"datasql\": \"SELECT \\tt.id, \\tt.type, \\t( CASE t.STATUS WHEN 1 THEN \'Up\' ELSE \'Down\' END ) AS STATUS, \\t( CASE t.type WHEN 1 THEN \'Global\' WHEN 2 THEN \'Per-datacenter\' ELSE \'Unkown\' END ) AS typename, \\tdc.NAME AS datacenter FROM \\tagent t \\tLEFT JOIN dc ON t.dc_id = dc.id\",\r\n \"group\": [\r\n {\r\n \"name\": \"type\",\r\n \"expr\": \"type\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"state\",\r\n \"expr\": \"status\",\r\n \"type\": 2\r\n },\r\n {\r\n \"name\": \"datacenter\",\r\n \"expr\": \"datacenter\",\r\n \"type\": 2\r\n }\r\n ],\r\n \"select\": [\r\n {\r\n \"name\": \"count\",\r\n \"expr\": \"count(1)\",\r\n \"type\": 1\r\n }\r\n ],\r\n \"filter\": [\r\n {\r\n \"name\": \"datacenter\",\r\n \"type\": 2,\r\n \"rule\": [\r\n {\r\n \"regex\": \".+\",\r\n \"tip\": \"filter_datacenter_is_null\"\r\n }\r\n ],\r\n \"opers\": [\r\n {\r\n \"name\": \"=\",\r\n \"expr\": \"dc.name = \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"~=\",\r\n \"expr\": \"dc.name like \'%{{value}}%\'\"\r\n },\r\n {\r\n \"name\": \"!=\",\r\n \"expr\": \"dc.name != \'{{value}}\'\"\r\n },\r\n {\r\n \"name\": \"!~\",\r\n \"expr\": \"dc.name not like \'%{{value}}%\'\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n]', 1, NULL); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'expretmpl_export_header', '[{\"name\":\"name\",\"i18n\":\"config.exprTemp.name\",\"comment\":\"config.exprTemp.name.comment\"},{\"name\":\"group name\",\"i18n\":\"config.exprTemp.gname\",\"comment\":\"config.exprTemp.gname.comment\"},{\"name\":\"expression\",\"i18n\":\"config.exprTemp.expression\",\"comment\":\"config.exprTemp.expression.comment\"},{\"name\":\"remark\",\"i18n\":\"config.exprTemp.remark\",\"comment\":\"config.exprTemp.remark.comment\"}]', 1, '表达式导入导出模板表头信息'); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'system_favicon', '', 1, null); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'system_bgImg', '', 1, null); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'system_name', 'Network Zodiac', 1, null); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'cortex_yml_tmpl', '{\n \"auth_enabled\": false,\n \"server\": {\n \"http_listen_port\": <#if port?default(\"\")?trim?length gt 0> ${port?c\n } <#else>10093</#if>,\n \"grpc_listen_port\": 10094,\n \"grpc_server_max_recv_msg_size\": 104857600,\n \"grpc_server_max_send_msg_size\": 104857600,\n \"grpc_server_max_concurrent_streams\": 1000,\n \"http_server_read_timeout\": \"300s\",\n \"http_server_write_timeout\": \"300s\"\n },\n \"distributor\": {\n \"shard_by_all_labels\": true,\n \"pool\": {\n \"health_check_ingesters\": true\n }\n },\n \"ingester_client\": {\n \"grpc_client_config\": {\n \"max_recv_msg_size\": 104857600,\n \"max_send_msg_size\": 104857600,\n \"grpc_compression\": \"gzip\"\n }\n },\n <#if isMemberlistStore && !isLocalStorage>\n \"ingester\": {\n \"lifecycler\": {\n \"id\": \"${localAgent.name}-${localAgent.id}\",\n \"join_after\": \"10s\",\n \"min_ready_duration\": \"0s\",\n \"final_sleep\": \"5s\",\n \"num_tokens\": 512,\n \"ring\": {\n \"kvstore\": {\n \"store\": \"memberlist\"\n },\n \"replication_factor\": 1\n },\n \"interface_names\": [\n <#list interfaceNameList as name>\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"\n <#sep>,</#sep>\n </#list>\n ]\n }\n },\n \"memberlist\": {\n \"node_name\": \"${localAgent.name}-${localAgent.id}\",\n \"bind_port\": <#if gossIp?default(\"\")?trim?length gt 0>${gossIp?c\n }<#else>7946</#if>,\n \"join_members\": [\n <#list joinMemberList as joinIp>\n \"${joinIp}:<#if gossIp?default(\"\")?trim?length gt 0>${gossIp?c}<#else>7946</#if>\"\n <#sep>,</#sep>\n </#list>\n ],\n \"abort_if_cluster_join_fails\": false,\n \"rejoin_interval\": \"10s\"\n },\n <#else>\n \"ingester\": {\n \"lifecycler\": {\n \"id\": \"${localAgent.name}-${localAgent.id}\",\n \"join_after\": \"10s\",\n \"min_ready_duration\": \"0s\",\n \"final_sleep\": \"5s\",\n \"num_tokens\": 512,\n \"ring\": {\n \"kvstore\": {\n \"store\": \"inmemory\"\n },\n \"replication_factor\": 1\n },\n \"interface_names\": [\n <#list interfaceNameList as name>\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"\n <#sep>,</#sep>\n </#list>\n ]\n }\n },\n </#if>\n \n \"storage\": {\n \"engine\": \"blocks\"\n },\n \"blocks_storage\": {\n \"tsdb\": {\n \"dir\": \"${systemConfig.metrics_storage_local_path}/tsdb\"\n },\n \"bucket_store\": {\n \"sync_dir\": \"${systemConfig.metrics_storage_local_path}/tsdb-sync\"\n },\n <#if isLocalStorage>\n \"backend\": \"filesystem\",\n \"filesystem\": {\n \"dir\": \"${systemConfig.metrics_storage_local_path}/data/tsdb\"\n }\n <#else>\n \"backend\": \"s3\",\n \"s3\": {\n \"endpoint\": \"${objectStroageUrl}\",\n \"bucket_name\": \"${bucketName}\",\n \"access_key_id\": \"${accessKey}\",\n \"secret_access_key\": \"${secret}\",\n \"insecure\": <#if insecure?default(\"\")?trim?length gt 0>${insecure\n }<#else>true</#if>,\n \"region\": <#if systemConfig.metrics_storage_s3_region?default(\"\")?trim?length gt 0>\"${systemConfig.metrics_storage_s3_region}\"<#else>\"\"</#if>\n }\n </#if>\n },\n \"store_gateway\": {\n \"sharding_enabled\": true,\n \"sharding_ring\": {\n \"kvstore\": {\n \"store\": <#if isMemberlistStore && !isLocalStorage> \"memberlist\" <#else> \"inmemory\" </#if>\n },\n \"instance_interface_names\": [\n <#list interfaceNameList as name>\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"\n <#sep>,</#sep>\n </#list>\n ]\n }\n },\n \"compactor\": {\n \"data_dir\": \"${systemConfig.metrics_storage_local_path}/compactor\",\n \"sharding_ring\": {\n \"kvstore\": {\n \"store\": <#if isMemberlistStore && !isLocalStorage> \"memberlist\" <#else> \"inmemory\" </#if>\n },\n \"instance_interface_names\": [\n <#list interfaceNameList as name>\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"\n <#sep>,</#sep>\n </#list>\n ]\n }\n },\n \"frontend_worker\": {\n \"match_max_concurrent\": true\n },\n \n <#if isAlert>\n \"ruler\": {\n \"enable_api\": true,\n \"enable_sharding\": true,\n \"rule_path\": \"${systemConfig.metrics_storage_local_path}/rules\",\n \"ring\": {\n \"num_tokens\": 512,\n \"kvstore\": {\n \"store\": <#if isMemberlistStore && !isLocalStorage> \"memberlist\" <#else> \"inmemory\" </#if>\n },\n \"instance_interface_names\": [\n <#list interfaceNameList as name>\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"\n <#sep>,</#sep>\n </#list>\n ]\n },\n \"alertmanager_url\": \"${systemConfig.alert_api}${systemConfig.alert_path_prefix}\"\n },\n \"ruler_storage\": {\n \"backend\": \"local\",\n \"local\": {\n \"directory\": \"${systemConfig.metrics_storage_local_path}/rules\"\n }\n },\n </#if>\n \"limits\": {\n \"max_series_per_metric\": 500000000,\n \"ingestion_rate\": 500000000,\n \"max_metadata_per_user\": 500000000,\n \"max_label_names_per_series\": 40,\n \"max_metadata_per_metric\": 20\n },\n \"api\": {\n \"alertmanager_http_prefix\": \"/\"\n }\n}', 1, 'cortex.yml 配置文件模板'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'loki_yml_tmpl', '{\r\n \"auth_enabled\": false,\r\n \"server\": {\r\n \"http_listen_port\": <#if httpPort?default(\"\")?trim?length gt 0> ${httpPort?c} <#else>13100</#if>,\r\n \"grpc_listen_port\":10095\r\n },\r\n \"ingester\": {\r\n \"lifecycler\": {\r\n \"ring\": {\r\n \"kvstore\": {\r\n \"store\": <#if isMemberlistStore> \"memberlist\" <#else> \"inmemory\" </#if>\r\n },\r\n \"replication_factor\": 1\r\n },\r\n \"final_sleep\": \"0s\",\r\n \"join_after\":\"30s\",\r\n \"interface_names\":[\r\n <#list interfaceNameList as name>\r\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n },\r\n \"chunk_idle_period\": \"5m\",\r\n \"chunk_retain_period\": \"30s\"\r\n },\r\n <#if isMemberlistStore> \r\n \"memberlist\": {\r\n \"node_name\": \"${localAgent.name}-${localAgent.id}\",\r\n \"bind_port\": <#if gossIp?default(\"\")?trim?length gt 0>${gossIp?c}<#else>7947</#if>,\r\n \"join_members\": [\r\n <#list joinMemberList as joinIp>\r\n \"${joinIp}:<#if gossIp?default(\"\")?trim?length gt 0>${gossIp?c}<#else>7947</#if>\"\r\n <#sep>,</#sep>\r\n </#list>\r\n ],\r\n \"abort_if_cluster_join_fails\": false,\r\n \"rejoin_interval\": \"10s\"\r\n },\r\n </#if>\r\n \"schema_config\": {\r\n \"configs\": [\r\n {\r\n \"from\": \"${schemaConfigFrom}\",\r\n <#if openAws>\r\n \"store\": \"boltdb-shipper\",\r\n \"object_store\": \"aws\",\r\n \"schema\": \"v11\",\r\n \"index\": {\r\n \"prefix\": \"index_\",\r\n \"period\": \"24h\"\r\n }\r\n <#else> \r\n \"store\": \"boltdb\",\r\n \"object_store\": \"filesystem\",\r\n \"schema\": \"v11\",\r\n \"index\": {\r\n \"prefix\": \"index_\",\r\n \"period\": \"168h\"\r\n }\r\n </#if>\r\n }\r\n ]\r\n },\r\n <#if openAws>\r\n \"compactor\": {\r\n \"working_directory\": \"/loki/compactor\",\r\n \"shared_store\": \"aws\"\r\n },\r\n \"storage_config\": {\r\n \"boltdb_shipper\": {\r\n \"shared_store\": \"aws\",\r\n \"active_index_directory\": \"/loki/index\",\r\n \"cache_location\": \"/loki/boltdb-cache\"\r\n },\r\n \"aws\": {\r\n \"s3\": \"s3://${accessKey}:${secret}@${objectStroageUrl}/${bucketName}\",\r\n \"s3forcepathstyle\": true,\r\n \"region\": <#if systemConfig.logs_storage_s3_region?default(\"\")?trim?length gt 0>\"${systemConfig.logs_storage_s3_region}\"<#else>\"\"</#if>,\r\n \"insecure\": <#if insecure?default(\"\")?trim?length gt 0>${insecure}<#else>false</#if>\r\n }\r\n },\r\n \"limits_config\": {\r\n \"ruler_alertmanager_config\": {\r\n \"alertmanager_url\": \"\"\r\n },\r\n \"ruler_remote_write_sigv4_config\": {\r\n \"region\": \"\"\r\n }\r\n },\r\n <#else> \r\n \"storage_config\": {\r\n \"boltdb\": {\r\n \"directory\": \"${storageLocalPath}/index\"\r\n },\r\n \"filesystem\": {\r\n \"directory\": \"${storageLocalPath}/chunks\"\r\n }\r\n },\r\n \"limits_config\": {\r\n \"enforce_metric_name\": false,\r\n \"reject_old_samples\": true,\r\n \"reject_old_samples_max_age\": \"${storageRetention}h\",\r\n \"ingestion_rate_mb\": 15,\r\n \"ruler_alertmanager_config\": {\r\n \"alertmanager_url\": \"\"\r\n },\r\n \"ruler_remote_write_sigv4_config\": {\r\n \"region\": \"\"\r\n }\r\n },\r\n \"chunk_store_config\": {\r\n \"max_look_back_period\": \"2160h\"\r\n },\r\n </#if>\r\n \"table_manager\": {\r\n \"retention_deletes_enabled\": true,\r\n \"retention_period\": \"${(((((systemConfig.logs_storage_retention!7)?number)/7)?ceiling)*7*24)?c}h\"\r\n },\r\n \"ruler\": {\r\n \"remote_write\": {\r\n \"client\": {\r\n \"url\": \"\"\r\n }\r\n }\r\n }\r\n}', 1, 'loki.yml 配置文件模板'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'license_product_name', 'NZ', 1, NULL); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'nz_alerts_metrics_enabled', 'on', 1, 'nz-web metrics 是否暴露 alert active message labels 监控项'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'snapshot_template_path', '/opt/nezha/nz-web/public', 1, null); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'chart_export_header', '[{\"name\":\"Chart name\",\"i18n\":\"dashboard.dashboard.chartForm.name\",\"comment\":\"dashboard.dashboard.chartForm.name.comment\"},{\"name\":\"Width\",\"i18n\":\"dashboard.dashboard.chartForm.width\",\"comment\":\"dashboard.dashboard.chartForm.width.comment\"},{\"name\":\"High\",\"i18n\":\"dashboard.dashboard.chartForm.high\",\"comment\":\"dashboard.dashboard.chartForm.high.comment\"},{\"name\":\"Type\",\"i18n\":\"overall.type\",\"comment\":\"dashboard.dashboard.chartForm.type.comment\"},{\"name\":\"Unit\",\"i18n\":\"dashboard.dashboard.chartForm.unit\",\"comment\":\"dashboard.dashboard.chartForm.unit.comment\"},{\"name\":\"Weight\",\"i18n\":\"dashboard.dashboard.chartForm.weight\"},{\"name\":\"LegendValue\",\"i18n\":\"dashboard.dashboard.chartForm.legendValue\",\"comment\":\"dashboard.dashboard.chartForm.legendValue.comment\"},{\"name\":\"Remark\",\"i18n\":\"overall.remark\",\"comment\":\"dashboard.dashboard.chartForm.remark.comment\"},{\"name\":\"X\",\"i18n\":\"dashboard.dashboard.chartForm.x\",\"comment\":\"dashboard.dashboard.chartForm.x.comment\"},{\"name\":\"Y\",\"i18n\":\"dashboard.dashboard.chartForm.y\",\"comment\":\"dashboard.dashboard.chartForm.y.comment\"},{\"name\":\"Element\",\"i18n\":\"dashboard.dashboard.chartForm.element\",\"comment\":\"dashboard.dashboard.chartForm.element.comment\"},{\"name\":\"Datasource\",\"i18n\":\"dashboard.dashboard.chartForm.datasource\",\"comment\":\"dashboard.dashboard.chartForm.datasource.comment\"},{\"name\":\"Children\",\"i18n\":\"dashboard.dashboard.chartForm.children\"}]', 1, NULL); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'dc_export_header', '[{\"name\":\"Name\",\"i18n\":\"overall.name\",\"comment\":\"config.dc.name.comment\"},{\"name\":\"Location\",\"i18n\":\"asset.location\",\"comment\":\"config.dc.location.comment\"},{\"name\":\"Telephone\",\"i18n\":\"config.dc.tel\",\"comment\":\"config.dc.tel.comment\"},{\"name\":\"Principal\",\"i18n\":\"config.dc.principal\",\"comment\":\"config.dc.principal.comment\"},{\"name\":\"Longitude\",\"i18n\":\"config.dc.longitude\",\"comment\":\"config.dc.longitude.comment\"},{\"name\":\"Latitude\",\"i18n\":\"config.dc.latitude\",\"comment\":\"config.dc.latitude.comment\"},{\"name\":\"State\",\"i18n\":\"overall.state\",\"comment\":\"config.dc.state.comment\"}]', 1, 'dc 导入导出表头信息'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'model_export_header', '[{\"name\":\"Name\",\"i18n\":\"config.model.name\",\"comment\":\"config.model.name.comment\"},{\"name\":\"Brand\",\"i18n\":\"asset.brand\",\"comment\":\"config.model.brand.comment\"},{\"name\":\"dashboard template\",\"i18n\":\"model.dashboardtemplate\",\"comment\":\"config.model.dashboardtemplate.comment\"},{\"name\":\"Description\",\"i18n\":\"overall.remark\",\"comment\":\"config.model.remark.comment\"},{\"name\":\"Type\",\"i18n\":\"overall.type\",\"comment\":\"asset.assetType.comment\"},{\"name\":\"SysObjectId\",\"i18n\":\"config.model.sysObjectId\",\"comment\":\"config.model.sysObjectId.comment\"}]', 1, 'asset model 导入导出表头信息'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'monitor_endpoint_export_header', '[{\"name\":\"Project Name\",\"i18n\":\"project.project.projectName\",\"comment\":\"project.project.projectName.comment\"},{\"name\":\"Module Name\",\"i18n\":\"overall.module\",\"comment\":\"project.endpoint.moduleName.comment\"},{\"name\":\"Name\",\"i18n\":\"overall.name\",\"comment\":\"project.endpoint.name.comment\"},{\"name\":\"Asset Name\",\"i18n\":\"asset.asset\",\"comment\":\"project.endpoint.asset.comment\"},{\"name\":\"Config\",\"i18n\":\"overall.config\",\"comment\":\"project.endpoint.configs.comment\"}]', 1, 'monitor endpoint 导入表头'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'rule_export_header', '[{\"name\":\"name\",\"i18n\":\"overall.name\",\"comment\":\"alert.config.name.comment\"},{\"name\":\"type\",\"i18n\":\"overall.type\",\"comment\":\"alert.type.comment\"},{\"name\":\"Execution cycle\",\"i18n\":\"alert.config.inr\",\"comment\":\"alert.config.inr.comment\"},{\"name\":\"timeout\",\"i18n\":\"alert.config.timeout\",\"comment\":\"alert.config.timeout.comment\"},{\"name\":\"expr\",\"i18n\":\"alert.config.expr\",\"comment\":\"alert.config.expr.comment\"},{\"name\":\"condition\",\"i18n\":\"alert.config.condition\",\"comment\":\"alert.config.condition.comment\"},{\"name\":\"extLabels\",\"i18n\":\"alert.config.extLabels\",\"comment\":\"alert.config.extLabels.comment\"},{\"name\":\"unit\",\"i18n\":\"dashboard.dashboard.chartForm.unit\",\"comment\":\"alert.config.unit.comment\"},{\"name\":\"last\",\"i18n\":\"alert.config.for\",\"comment\":\"alert.config.for.comment\"},{\"name\":\"summary\",\"i18n\":\"alert.summary\",\"comment\":\"alert.summary.comment\"},{\"name\":\"description\",\"i18n\":\"overall.remark\",\"comment\":\"alert.description.comment\"},{\"name\":\"receiver\",\"i18n\":\"alert.receiver\",\"comment\":\"alert.receiver.comment\"},{\"name\":\"notify\",\"i18n\":\"alert.notify\",\"comment\":\"alert.notify.comment\"},{\"name\":\"state\",\"i18n\":\"overall.state\",\"comment\":\"alert.state.comment\"},{\"name\":\"autoExpired\",\"i18n\":\"alert.config.autoExpired\",\"comment\":\"alert.config.autoExpired.comment\"},{\"name\":\"schedEnable\",\"i18n\":\"alert.config.schedEnable\",\"comment\":\"alert.config.schedEnable.comment\"},{\"name\":\"schedDays\",\"i18n\":\"alert.config.schedDays\",\"comment\":\"alert.config.schedDays.comment\"},{\"name\":\"startAt\",\"i18n\":\"overall.startTime\",\"comment\":\"alert.startAt.comment\"},{\"name\":\"endAt\",\"i18n\":\"overall.endTime\",\"comment\":\"alert.endAt.comment\"},{\"name\":\"notifyActive\",\"i18n\":\"alert.config.notifyActive\",\"comment\":\"alert.config.notifyActive.comment\"},{\"name\":\"notifyExpired\",\"i18n\":\"alert.config.notifyExpired\",\"comment\":\"alert.config.notifyExpired.comment\"},{\"name\":\"trbShot\",\"i18n\":\"alert.config.trbShot\",\"comment\":\"alert.config.trbShot.comment\"},{\"name\":\"param\",\"i18n\":\"alert.config.param\",\"comment\":\"alert.config.param.comment\"}]', 1, NULL); @@ -78,7 +70,6 @@ REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'vsys_restconf_auth', '{\"protocol\":\"http\",\"port\":8447,\"type\":\"none\",\"username\":\"admin\",\"password\":\"admin\"}', 1, 'type 可选值:basicAuth , none'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'record_rule_import_header', '[{\"name\": \"Name\",\"i18n\": \"overall.name\",\"comment\": \"config.ipamip.name.comment\"},{\"name\": \"Type\",\"i18n\": \"overall.type\",\"comment\": \"alert.type.comment\"},{\"name\": \"Expr\",\"i18n\": \"config.exprTemp.expression\",\"comment\": \"alert.config.expr.comment\"},{\"name\": \"Inr\",\"i18n\": \"config.record.inr\",\"comment\": \"config.record.inr.comment\"},{\"name\": \"State\",\"i18n\": \"overall.state\",\"comment\": \"alert.state.comment\"},{\"name\": \"Labels\",\"i18n\": \"project.endpoint.labels2\",\"comment\": \"config.record.labels.comment\"},{\"name\": \"Remark\",\"i18n\": \"config.exprTemp.remark\",\"comment\": \"config.exprTemp.remark.comment\"}]', 1, 'record headea'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'vsys_default_rule_config', '[{\"id\":1}]', 1, 'VSYS 默认流量规则配置'); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'terminal_storage_type', '1', 1, '存储模式,1: 本地存储,2:S3对象存储'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'cortex_init_yml_tmpl', '{\r\n \"auth_enabled\": false,\r\n \"server\": {\r\n \"http_listen_port\": 10093,\r\n \"grpc_listen_port\": 10094\r\n },\r\n \"distributor\": {\r\n \"shard_by_all_labels\": true,\r\n \"pool\": {\r\n \"health_check_ingesters\": true\r\n }\r\n },\r\n \"ingester_client\": {\r\n \"grpc_client_config\": {\r\n \"max_recv_msg_size\": 104857600,\r\n \"max_send_msg_size\": 104857600,\r\n \"grpc_compression\": \"gzip\"\r\n }\r\n },\r\n \"ingester\": {\r\n \"lifecycler\": {\r\n \"ring\": {\r\n \"kvstore\": {\r\n \"store\": \"inmemory\"\r\n }\r\n },\r\n \"interface_names\": [\r\n <#list systemConfig.interface_name?default(\"eth0,en0,bond0,ens2f0,enp0s31f6\")?split(\",\") as name> \r\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n }\r\n },\r\n \"storage\": {\r\n \"engine\": \"blocks\"\r\n },\r\n \"blocks_storage\": {\r\n \"tsdb\": {\r\n \"dir\": \"/opt/nezha/nz-agent/cortex/tsdb\"\r\n },\r\n \"bucket_store\": {\r\n \"sync_dir\": \"/opt/nezha/nz-agent/cortex/tsdb-sync\"\r\n },\r\n \"backend\": \"filesystem\",\r\n \"filesystem\": {\r\n \"dir\": \"/opt/nezha/nz-agent/cortex/data/tsdb\"\r\n }\r\n },\r\n \"store_gateway\": {\r\n \"sharding_enabled\": true,\r\n \"sharding_ring\": {\r\n \"kvstore\": {\r\n \"store\": \"inmemory\"\r\n },\r\n \"instance_interface_names\": [\r\n <#list systemConfig.interface_name?default(\"eth0,en0,bond0,ens2f0,enp0s31f6\")?split(\",\") as name> \r\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n }\r\n },\r\n \"compactor\": {\r\n \"data_dir\": \"/opt/nezha/nz-agent/cortex/compactor\",\r\n \"sharding_ring\": {\r\n \"kvstore\": {\r\n \"store\": \"inmemory\"\r\n },\r\n \"instance_interface_names\": [\r\n <#list systemConfig.interface_name?default(\"eth0,en0,bond0,ens2f0,enp0s31f6\")?split(\",\") as name> \r\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n }\r\n },\r\n \"frontend_worker\": {\r\n \"match_max_concurrent\": true\r\n },\r\n \"ruler\": {\r\n \"enable_api\": true,\r\n \"enable_sharding\": true,\r\n \"ring\": {\r\n \"num_tokens\": 512,\r\n \"kvstore\": {\r\n \"store\": \"inmemory\"\r\n },\r\n \"instance_interface_names\": [\r\n <#list systemConfig.interface_name?default(\"eth0,en0,bond0,ens2f0,enp0s31f6\")?split(\",\") as name> \r\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n }\r\n },\r\n \"ruler_storage\": {\r\n \"backend\": \"local\",\r\n \"local\": {\r\n \"directory\": \"/opt/nezha/nz-agent/cortex/rules\"\r\n }\r\n }\r\n}', 1, NULL); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'loki_init_yml_tmpl', '{\r\n \"auth_enabled\": false,\r\n \"server\": {\r\n \"http_listen_port\": 13100,\r\n \"grpc_listen_port\": 10095\r\n },\r\n \"ingester\": {\r\n \"lifecycler\": {\r\n \"address\": \"127.0.0.1\",\r\n \"ring\": {\r\n \"kvstore\": {\r\n \"store\": \"inmemory\"\r\n },\r\n \"replication_factor\": 1\r\n },\r\n \"final_sleep\": \"0s\",\r\n \"interface_names\":[\r\n <#list systemConfig.interface_name?default(\"eth0,en0,bond0,ens2f0,enp0s31f6\")?split(\",\") as name> \r\n \"<#if name?default(\"\")?trim?length gt 0>${name}</#if>\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n },\r\n \"chunk_idle_period\": \"5m\",\r\n \"chunk_retain_period\": \"30s\"\r\n },\r\n \"schema_config\": {\r\n \"configs\": [\r\n {\r\n \"from\": \"2021-09-15\",\r\n \"store\": \"boltdb\",\r\n \"object_store\": \"filesystem\",\r\n \"schema\": \"v11\",\r\n \"index\": {\r\n \"prefix\": \"index_\",\r\n \"period\": \"168h\"\r\n }\r\n }\r\n ]\r\n },\r\n \"storage_config\": {\r\n \"boltdb\": {\r\n \"directory\": \"/tmp/loki/index\"\r\n },\r\n \"filesystem\": {\r\n \"directory\": \"/tmp/loki/chunks\"\r\n }\r\n },\r\n \"limits_config\": {\r\n \"enforce_metric_name\": false,\r\n \"reject_old_samples\": true,\r\n \"reject_old_samples_max_age\": \"168h\",\r\n \"ruler_alertmanager_config\": {\r\n \"alertmanager_url\": \"\"\r\n },\r\n \"ruler_remote_write_sigv4_config\": {\r\n \"region\": \"\"\r\n }\r\n },\r\n \"ruler\": {\r\n \"remote_write\": {\r\n \"client\": {\r\n \"url\": \"\"\r\n }\r\n }\r\n }\r\n}', 1, NULL); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'dashboard_export_header', '[{\"name\":\"dashboard name\",\"i18n\":\"dashboard.dashboard.dashboardForm.dashboardName\",\"comment\":\"dashboard.dashboard.dashboardForm.dashboardName.comment\"},{\"name\":\"type\",\"i18n\":\"overall.type\",\"comment\":\"dashboard.dashboard.chartForm.type.comment\"},{\"name\":\"Template type\",\"i18n\":\"dashboard.dashboard.chartForm.varType\",\"comment\":\"dashboard.dashboard.chartForm.varType.comment\"},{\"name\":\"Params\",\"i18n\":\"config.assetLabel.params\"},{\"name\":\"remark\",\"i18n\":\"overall.remark\",\"comment\":\"dashboard.dashboard.chartForm.remark.comment\"},{\"name\":\"Charts\",\"i18n\":\"dashboard.dashboard.chartForm.charts\"},{\"name\":\"Children\",\"i18n\":\"dashboard.dashboard.children\"}]', 1, NULL); @@ -88,13 +79,16 @@ REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'asset_discovery_snmp_mode', '1', 1, '1:nz-web 使用 snmp 探测;2:nz-agent 使用 snmp 探测;默认为 1'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'fulltext_metadata_conf', '{\"dc\":[{\"name\":\"id\",\"type\":\"number\",\"i18n\":\"ID\",\"show\":\"1\"},{\"name\":\"principal\",\"type\":\"number\",\"i18n\":\"config.dc.principal\",\"show\":\"1\"},{\"name\":\"name\",\"type\":\"text\",\"i18n\":\"overall.name\",\"show\":\"1\"},{\"name\":\"location\",\"type\":\"text\",\"i18n\":\"asset.location\",\"show\":\"1\"},{\"name\":\"tel\",\"type\":\"text\",\"i18n\":\"config.dc.tel\",\"show\":\"1\"},{\"name\":\"starred\",\"type\":\"enum\",\"i18n\":\"overall.starred\",\"values\":[{\"color\":\"#24bc9c\",\"i18n\":\"overall.starred\",\"value\":\"1\",\"desc\":\"Starred 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"overall.unstarred\",\"value\":\"0\",\"desc\":\"Unstarred 灰色\"}],\"show\":\"1\"},{\"name\":\"state\",\"type\":\"enum\",\"i18n\":\"overall.state\",\"values\":[{\"color\":\"#24bc9c\",\"i18n\":\"overall.enabled\",\"value\":\"ON\",\"desc\":\"Enabled 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"overall.disabled\",\"value\":\"OFF\",\"desc\":\"Disabled 灰色\"}],\"show\":\"1\"}],\"project\":[{\"name\":\"id\",\"type\":\"number\",\"i18n\":\"ID\",\"show\":\"1\"},{\"name\":\"name\",\"type\":\"text\",\"i18n\":\"overall.name\",\"show\":\"1\"},{\"name\":\"starred\",\"type\":\"enum\",\"i18n\":\"overall.starred\",\"values\":[{\"color\":\"#24bc9c\",\"i18n\":\"overall.starred\",\"value\":\"1\",\"desc\":\"Starred 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"overall.unstarred\",\"value\":\"0\",\"desc\":\"Unstarred 灰色\"}],\"show\":\"1\"}],\"module\":[{\"name\":\"id\",\"type\":\"number\",\"i18n\":\"ID\",\"show\":\"1\"},{\"name\":\"projectId\",\"type\":\"number\",\"i18n\":\"overall.projectId\",\"show\":\"1\"},{\"name\":\"name\",\"type\":\"text\",\"i18n\":\"overall.name\",\"show\":\"1\"},{\"name\":\"project\",\"type\":\"keyword\",\"i18n\":\"project.project.projectName\",\"show\":\"1\"},{\"name\":\"starred\",\"type\":\"enum\",\"i18n\":\"overall.starred\",\"values\":[{\"color\":\"#24bc9c\",\"i18n\":\"overall.starred\",\"value\":\"1\",\"desc\":\"Starred 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"overall.unstarred\",\"value\":\"0\",\"desc\":\"Unstarred 灰色\"}],\"show\":\"1\"}],\"endpoint\":[{\"name\":\"id\",\"type\":\"number\",\"i18n\":\"ID\",\"show\":\"1\"},{\"name\":\"projectId\",\"type\":\"number\",\"i18n\":\"overall.projectId\",\"show\":\"1\"},{\"name\":\"assetId\",\"type\":\"number\",\"i18n\":\"overall.assetId\",\"show\":\"1\"},{\"name\":\"moduleId\",\"type\":\"number\",\"i18n\":\"overall.module\",\"show\":\"1\"},{\"name\":\"name\",\"type\":\"text\",\"i18n\":\"overall.name\",\"show\":\"1\"},{\"name\":\"asset\",\"type\":\"keyword\",\"i18n\":\"overall.asset\",\"show\":\"1\"},{\"name\":\"project\",\"type\":\"keyword\",\"i18n\":\"project.project.projectName\",\"show\":\"1\"},{\"name\":\"module\",\"type\":\"keyword\",\"i18n\":\"overall.module\",\"show\":\"1\"},{\"name\":\"metricsStates\",\"type\":\"enum\",\"i18n\":\"endpoint.metricEnable\",\"values\":[{\"color\":\"#ec7c64\",\"i18n\":\"down\",\"value\":\"0\",\"desc\":\"Down 红色\"},{\"color\":\"#24bc9c\",\"i18n\":\"up\",\"value\":\"1\",\"desc\":\"Up 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"suspended\",\"value\":\"2\",\"desc\":\"Suspended 灰色\"}],\"show\":\"1\"},{\"name\":\"logsStates\",\"type\":\"enum\",\"i18n\":\"endpoint.logEnable\",\"values\":[{\"color\":\"#ec7c64\",\"i18n\":\"down\",\"value\":\"0\",\"desc\":\"Down 红色\"},{\"color\":\"#24bc9c\",\"i18n\":\"up\",\"value\":\"1\",\"desc\":\"Up 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"suspended\",\"value\":\"2\",\"desc\":\"Suspended 灰色\"}],\"show\":\"1\"},{\"name\":\"state\",\"type\":\"enum\",\"i18n\":\"overall.state\",\"values\":[{\"color\":\"#ec7c64\",\"i18n\":\"down\",\"value\":\"0\",\"desc\":\"Down 红色\"},{\"color\":\"#24bc9c\",\"i18n\":\"up\",\"value\":\"1\",\"desc\":\"Up 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"suspended\",\"value\":\"2\",\"desc\":\"Suspended 灰色\"}],\"show\":\"1\"},{\"name\":\"starred\",\"type\":\"enum\",\"i18n\":\"overall.starred\",\"values\":[{\"color\":\"#24bc9c\",\"i18n\":\"overall.starred\",\"value\":\"1\",\"desc\":\"Starred 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"overall.unstarred\",\"value\":\"0\",\"desc\":\"Unstarred 灰色\"}],\"show\":\"1\"}],\"rule\":[{\"name\":\"id\",\"type\":\"number\",\"i18n\":\"ID\",\"show\":\"1\"},{\"name\":\"last\",\"type\":\"number\",\"i18n\":\"alert.config.for\",\"show\":\"1\"},{\"name\":\"buildIn\",\"type\":\"number\",\"i18n\":\"overall.buildIn\",\"show\":\"1\"},{\"name\":\"name\",\"type\":\"text\",\"i18n\":\"overall.name\",\"show\":\"1\"},{\"name\":\"expr\",\"type\":\"text\",\"i18n\":\"alert.config.expr\",\"show\":\"1\"},{\"name\":\"summary\",\"type\":\"text\",\"i18n\":\"alert.summary\",\"show\":\"1\"},{\"name\":\"description\",\"type\":\"text\",\"i18n\":\"overall.remark\",\"show\":\"1\"},{\"name\":\"receiver\",\"type\":\"text\",\"i18n\":\"alert.receiver\",\"show\":\"1\"},{\"name\":\"starred\",\"type\":\"enum\",\"i18n\":\"overall.starred\",\"values\":[{\"color\":\"#24bc9c\",\"i18n\":\"overall.starred\",\"value\":\"1\",\"desc\":\"Starred 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"overall.unstarred\",\"value\":\"0\",\"desc\":\"Unstarred 灰色\"}],\"show\":\"1\"},{\"name\":\"type\",\"type\":\"enum\",\"i18n\":\"overall.type\",\"values\":[{\"color\":\"\",\"i18n\":\"overall.metrics\",\"value\":\"1\",\"desc\":\"Metrics\"},{\"color\":\"\",\"i18n\":\"overall.logs\",\"value\":\"2\",\"desc\":\"Logs\"},{\"color\":\"\",\"i18n\":\"overall.SNMPTrap\",\"value\":\"3\",\"desc\":\"SNMP TRAP\"}],\"show\":\"1\"},{\"name\":\"state\",\"type\":\"enum\",\"i18n\":\"overall.state\",\"values\":[{\"color\":\"#24bc9c\",\"i18n\":\"overall.enabled\",\"value\":\"1\",\"desc\":\"Enabled 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"overall.disabled\",\"value\":\"0\",\"desc\":\"Disabled 灰色\"}],\"show\":\"1\"}],\"asset\":[{\"name\":\"id\",\"type\":\"number\",\"i18n\":\"ID\",\"show\":\"1\"},{\"name\":\"pid\",\"type\":\"number\",\"i18n\":\"asset.parent\",\"show\":\"1\"},{\"name\":\"brandId\",\"type\":\"number\",\"i18n\":\"overall.brandId\",\"show\":\"1\"},{\"name\":\"modelId\",\"type\":\"number\",\"i18n\":\"overall.modelId\",\"show\":\"1\"},{\"name\":\"dcId\",\"type\":\"number\",\"i18n\":\"overall.dcId\",\"show\":\"1\"},{\"name\":\"cabinetId\",\"type\":\"number\",\"i18n\":\"overall.cabinetId\",\"show\":\"1\"},{\"name\":\"typeId\",\"type\":\"number\",\"i18n\":\"overall.typeId\",\"show\":\"1\"},{\"name\":\"stateId\",\"type\":\"number\",\"i18n\":\"overall.state\",\"show\":\"1\"},{\"name\":\"sn\",\"type\":\"text\",\"i18n\":\"asset.sn\",\"show\":\"1\"},{\"name\":\"name\",\"type\":\"text\",\"i18n\":\"overall.name\",\"show\":\"1\"},{\"name\":\"manageIp\",\"type\":\"text\",\"i18n\":\"asset.manageIp\",\"show\":\"1\"},{\"name\":\"fields\",\"type\":\"text\",\"i18n\":\"overall.labels\",\"show\":\"1\"},{\"name\":\"comment\",\"type\":\"text\",\"i18n\":\"overall.comments\",\"show\":\"1\"},{\"name\":\"dc\",\"type\":\"keyword\",\"i18n\":\"overall.dc\",\"show\":\"1\"},{\"name\":\"brand\",\"type\":\"keyword\",\"i18n\":\"asset.brand\",\"show\":\"1\"},{\"name\":\"model\",\"type\":\"keyword\",\"i18n\":\"asset.model\",\"show\":\"1\"},{\"name\":\"assetType\",\"type\":\"keyword\",\"i18n\":\"overall.type\",\"show\":\"1\"},{\"name\":\"starred\",\"type\":\"enum\",\"i18n\":\"overall.starred\",\"values\":[{\"color\":\"#24bc9c\",\"i18n\":\"overall.starred\",\"value\":\"1\",\"desc\":\"Starred 绿色\"},{\"color\":\"#9c9c9c\",\"i18n\":\"overall.unstarred\",\"value\":\"0\",\"desc\":\"Unstarred 灰色\"}],\"show\":\"1\"},{\"name\":\"state\",\"type\":\"enum\",\"i18n\":\"overall.state\",\"values\":[{\"color\":\"\",\"i18n\":\"asset.inStock\",\"value\":\"1\",\"desc\":\"Not in stock\"},{\"color\":\"\",\"i18n\":\"asset.inUse\",\"value\":\"2\",\"desc\":\"In use\"},{\"color\":\"\",\"i18n\":\"asset.Idle\",\"value\":\"3\",\"desc\":\"Idle\"},{\"color\":\"\",\"i18n\":\"asset.repair\",\"value\":\"4\",\"desc\":\"Repair\"},{\"color\":\"\",\"i18n\":\"asset.scrapped\",\"value\":\"5\",\"desc\":\"Scrapped\"}],\"show\":\"1\"},{\"name\":\"ping\",\"type\":\"enum\",\"i18n\":\"ping\",\"values\":[{\"color\":\"#ec7c64\",\"i18n\":\"down\",\"value\":\"0\",\"desc\":\"Down 红色\"},{\"color\":\"#24bc9c\",\"i18n\":\"up\",\"value\":\"1\",\"desc\":\"Up 绿色\"}],\"show\":\"1\"},{\"name\":\"authProtocol\",\"type\":\"enum\",\"i18n\":\"asset.authProtocol\",\"values\":[{\"color\":\"\",\"i18n\":\"none\",\"value\":\"0\",\"desc\":\"无\"},{\"color\":\"\",\"i18n\":\"ssh\",\"value\":\"1\",\"desc\":\"ssh\"},{\"color\":\"\",\"i18n\":\"telnet\",\"value\":\"2\",\"desc\":\"telnet\"}],\"show\":\"1\"},{\"name\":\"vmh\",\"type\":\"enum\",\"i18n\":\"config.assetType.vmh\",\"values\":[{\"color\":\"\",\"i18n\":\"N\",\"value\":\"0\",\"desc\":\"不是宿主机,不支持挂载 子设备\"},{\"color\":\"\",\"i18n\":\"Y\",\"value\":\"1\",\"desc\":\"是宿主机,支持挂载子设备\"}],\"show\":\"1\"},{\"name\":\"vm\",\"type\":\"enum\",\"i18n\":\"config.assetType.vm\",\"values\":[{\"color\":\"\",\"i18n\":\"N\",\"value\":\"0\",\"desc\":\"不是子设备\"},{\"color\":\"\",\"i18n\":\"Y\",\"value\":\"1\",\"desc\":\"是子设备\"}],\"show\":\"1\"},{\"name\":\"snmpEnable\",\"type\":\"enum\",\"i18n\":\"config.assetType.snmpEnable\",\"values\":[{\"color\":\"\",\"i18n\":\"N\",\"value\":\"0\",\"desc\":\"不支持\"},{\"color\":\"\",\"i18n\":\"Y\",\"value\":\"1\",\"desc\":\"支持\"}],\"show\":\"1\"}],\"alertmessage\":[{\"name\":\"id\",\"type\":\"number\",\"i18n\":\"ID\",\"show\":\"1\"},{\"name\":\"ruleId\",\"type\":\"number\",\"i18n\":\"overall.ruleId\",\"show\":\"0\"},{\"name\":\"dcId\",\"type\":\"number\",\"i18n\":\"overall.dcId\",\"show\":\"0\"},{\"name\":\"assetId\",\"type\":\"number\",\"i18n\":\"overall.assetId\",\"show\":\"0\"},{\"name\":\"projectId\",\"type\":\"number\",\"i18n\":\"overall.projectId\",\"show\":\"0\"},{\"name\":\"moduleId\",\"type\":\"number\",\"i18n\":\"overall.moduleId\",\"show\":\"0\"},{\"name\":\"endpointId\",\"type\":\"number\",\"i18n\":\"overall.endpointId\",\"show\":\"0\"},{\"name\":\"silenceId\",\"type\":\"number\",\"i18n\":\"overall.silenceId\",\"show\":\"0\"},{\"name\":\"project\",\"type\":\"keyword\",\"i18n\":\"project.project.projectName\",\"show\":\"1\"},{\"name\":\"module\",\"type\":\"keyword\",\"i18n\":\"overall.module\",\"show\":\"1\"},{\"name\":\"endpoint\",\"type\":\"keyword\",\"i18n\":\"asset.endpoint\",\"show\":\"1\"},{\"name\":\"rule\",\"type\":\"keyword\",\"i18n\":\"alert.rule\",\"show\":\"1\"},{\"name\":\"dc\",\"type\":\"keyword\",\"i18n\":\"overall.dc\",\"show\":\"1\"},{\"name\":\"asset\",\"type\":\"keyword\",\"i18n\":\"overall.asset\",\"show\":\"1\"},{\"name\":\"priority\",\"type\":\"enum\",\"i18n\":\"alert.severity\",\"values\":[{\"color\":\"#eb1010\",\"i18n\":\"alert.config.P1\",\"value\":\"1\",\"desc\":\"P1\"},{\"color\":\"#f89984\",\"i18n\":\"P2\",\"value\":\"alert.config.P2\",\"desc\":\"P2\"},{\"color\":\"#f7ba78\",\"i18n\":\"alert.config.P3\",\"value\":\"3\",\"desc\":\"P3\"}],\"show\":\"1\"}]}', 1, '全文检索元数据配置,JSON'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'fulltext_mode', '1', 1, '全文检索模式,1: mysql 2.redis'); -INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'date_format', 'YYYY-MM-DD HH:mm:ss', 1, '时间格式化'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'prometheus_agent_mode', '1', 1, 'prometheus agent 模式;对应启动项 ’--enable-feature=agent‘;默认开启;1开启 0关闭'); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'prom_cmd_tmpl', '<#if currentAgent.type == 1>\r\nOPTION=\"--config.file=\'/opt/nezha/nz-agent/prometheus/prometheus.yml\' --web.listen-address=\'0.0.0.0:10091\' --storage.tsdb.retention.time=<#if systemConfig.metrics_storage_type?trim == \"1\">${systemConfig.metrics_storage_retention?trim}d<#else>${systemConfig.prometheus_default_retention_time_when_s3?trim}d</#if> --storage.tsdb.path=\'/data/prometheusData\' --web.enable-admin-api --enable-feature=\'remote-write-receiver\' --web.enable-lifecycle \"\r\n<#else>\r\nOPTION=\"--config.file=\'/opt/nezha/nz-agent/prometheus/prometheus.yml\' --web.listen-address=\'0.0.0.0:10091\' <#if systemConfig.prometheus_agent_mode?trim == \"1\">--enable-feature=remote-write-receiver,agent <#else> --enable-feature=\'remote-write-receiver\' --storage.tsdb.path=\'/data/prometheusData\' --storage.tsdb.retention.time=<#if systemConfig.metrics_storage_type?trim == \"1\">${systemConfig.metrics_storage_retention?trim}d<#else>${systemConfig.prometheus_default_retention_time_when_s3?trim}d</#if></#if> --web.enable-admin-api --web.enable-lifecycle \"\r\n</#if>', 1, 'prometheus 启动参数模板'); -REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'prometheus_tsdb_out_of_order_time_window', '2', 1, 'prometheus 允许摄取无序样本的最大时长,默认:2h,单位:h'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'backup_file_path', '/var/nezha/nz-web/backup', 1, 'nezha备份数据默认存储路径'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'backup_exclude_tables', 'alert_message_active,alert_message_history,sys_leader_election', 1, 'nezha备份排除表名'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'license_feature_name_mapping', '{\"100\":\"TSG-OS\",\"10000\":\"TSG-CM\",\"20001\":\"Network Zodiac\"}', 1, 'feature name mapping'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'notebook_snapshot_markdown_template', '```\r\n ${generateInfoStr}\r\n ${timeRangeStr}\r\n```\r\n\r\n # ${notebook.name} \r\n\r\n\r\n<#-- 文字部分 -->\r\n<#list paragraphList as pg>\r\n <#if pg.chart.type == \"text\">\r\n${pg.chart.param.text}\r\n <#else>\r\n ### ${pg.chart.name!\"\"}\r\n\r\n\r\n![graph image][img-${pg.chart.id?c}]\r\n </#if>\r\n\r\n\r\n\r\n</#list>\r\n\r\n\r\n\r\n<#-- 图片部分 -->\r\n<#list paragraphList as pg>\r\n <#if pg.chart.type != \"text\">\r\n\r\n\r\n[img-${pg.chart.id?c}]:\r\n${pg.imageDataStr}\r\n </#if>\r\n</#list>', 1, 'notebook 快照 markdown 模板'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'license_status_complete_tsg_device', '0', 1, '是否补全未关联 软件资产 的 TSG 硬件资产 license 状态。0:不补全,1:补全 默认:0'); REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'license_status_complete_tsg_device_model_ids', '', 1, '当 license_status_complete_tsg_device=1 时,根据 license_status_complete_tsg_device_model_ids 设置的型号进行补全关联 硬件资产 的 license 状态,多个使用逗号分割'); +REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'prometheus_replication_mode', '0', 1, 'prometheus多副本模式,只在 非联邦,本地存储模式时有效. nz-agent(Global) 配置一致(互为备份); 1:开启,0:关闭'); +REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'dc_export_header', '[{\"name\":\"Name\",\"i18n\":\"overall.name\",\"comment\":\"config.dc.name.comment\"},{\"name\":\"Location\",\"i18n\":\"asset.location\",\"comment\":\"config.dc.location.comment\"},{\"name\":\"Telephone\",\"i18n\":\"config.dc.tel\",\"comment\":\"config.dc.tel.comment\"},{\"name\":\"Principal\",\"i18n\":\"config.dc.principal\",\"comment\":\"config.dc.principal.comment\"},{\"name\":\"Longitude\",\"i18n\":\"config.dc.longitude\",\"comment\":\"config.dc.longitude.comment\"},{\"name\":\"Latitude\",\"i18n\":\"config.dc.latitude\",\"comment\":\"config.dc.latitude.comment\"},{\"name\":\"State\",\"i18n\":\"overall.state\",\"comment\":\"config.dc.state.comment\"},{\"name\":\"Remark\",\"i18n\":\"overall.dc.remark\",\"comment\":\"config.dc.remark.comment\"}]', 1, 'dc 导入导出表头信息'); +REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'stat_query_json', '[{\n \"name\": \"asset\",\n \"datasql\": \"SELECT t.name as asset,t.*,atc.vm,atc.vmh,atc.NAME AS type,assc.NAME AS state,ab.NAME AS brand,am.NAME AS model,dc.NAME AS datacenter,cabinet.NAME AS cabinet,(CASE ap.`status` WHEN 1 THEN \'Up\' WHEN 0 THEN \'Down\' ELSE \'Suspended\' END) AS ping,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count,(CASE WHEN mc.c IS NULL THEN 0 ELSE mc.c END) AS endpoint_count FROM asset_asset t LEFT JOIN asset_type_conf atc ON t.type_id=atc.id LEFT JOIN asset_state_conf assc ON t.state_id=assc.id LEFT JOIN asset_brand ab ON t.brand_id=ab.id LEFT JOIN asset_model am ON t.model_id=am.id LEFT JOIN dc ON t.dc_id=dc.id LEFT JOIN cabinet ON t.cabinet_id=cabinet.id LEFT JOIN (select * from asset_ping where type = \'mgt\') ap ON t.id=ap.asset_id LEFT JOIN (SELECT asset_id,count(1) AS c FROM alert_message_active ama WHERE ama.asset_id IS NOT NULL GROUP BY asset_id) amc ON amc.asset_id=t.id LEFT JOIN (SELECT asset_id,count(1) AS c FROM monitor_endpoint me GROUP BY asset_id) mc ON mc.asset_id=t.id\",\n \"group\": [{\n \"name\": \"ping\",\n \"expr\": \"ping\",\n \"type\": 2\n }, {\n \"name\": \"asset_type\",\n \"expr\": \"type\",\n \"type\": 2\n }, {\n \"name\": \"asset_state\",\n \"expr\": \"state\",\n \"type\": 2\n }, {\n \"name\": \"brand\",\n \"expr\": \"brand\",\n \"type\": 2\n }, {\n \"name\": \"model\",\n \"expr\": \"model\",\n \"type\": 2\n }, {\n \"name\": \"datacenter\",\n \"expr\": \"datacenter\",\n \"type\": 2\n }, {\n \"name\": \"cabinet\",\n \"expr\": \"cabinet\",\n \"type\": 2\n }, {\n \"name\": \"asset\",\n \"expr\": \"asset\",\n \"type\": 2\n }\n ],\n \"select\": [{\n \"name\": \"count\",\n \"expr\": \"count(1)\",\n \"type\": 1\n }, {\n \"name\": \"alert_message_sum\",\n \"expr\": \"sum(alert_message_count)\",\n \"type\": 1\n }, {\n \"name\": \"endpoint_sum\",\n \"expr\": \"sum(endpoint_count)\",\n \"type\": 1\n }\n ],\n \"filter\": [{\n \"name\": \"datacenter\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_datacenter_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"dc.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"dc.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"dc.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"dc.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"asset\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_asset_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"t.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"t.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"t.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"t.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"asset type\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_asset_type_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"atc.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"atc.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"atc.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"atc.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"asset state\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_asset_state_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"assc.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"assc.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"assc.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"assc.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"asset brand\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_asset_brand_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"ab.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"ab.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"ab.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"ab.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"asset model\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_asset_model_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"am.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"am.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"am.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"am.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"id\",\n \"type\": 1,\n \"rule\": [{\n \"regex\": \"\\\\d+\",\n \"tip\": \"filter_asset_id_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \">\",\n \"expr\": \"t.id > {{value}}\"\n }, {\n \"name\": \"=\",\n \"expr\": \"t.id = {{value}}\"\n }, {\n \"name\": \"<\",\n \"expr\": \"t.id < {{value}}\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"t.id != {{value}}\"\n }\n ]\n }\n ]\n }, {\n \"name\": \"datacenter\",\n \"datasql\": \"SELECT t.id,t.name as datacenter,(CASE WHEN cc.c IS NULL THEN 0 ELSE cc.c END) AS cabinet_count,(CASE WHEN ac.c IS NULL THEN 0 ELSE ac.c END) AS asset_count,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count FROM dc t LEFT JOIN (SELECT dc_id,count(1) AS c FROM cabinet GROUP BY dc_id) cc ON cc.dc_id=t.id LEFT JOIN (SELECT dc_id,count(1) AS c FROM asset_asset GROUP BY dc_id) ac ON ac.dc_id=t.id LEFT JOIN (SELECT dc_id,count(1) AS c FROM alert_message_active ama WHERE ama.dc_id IS NOT NULL GROUP BY dc_id) amc ON amc.dc_id=t.id\",\n \"group\": [{\n \"name\": \"datacenter\",\n \"expr\": \"datacenter\",\n \"type\": 2\n }\n ],\n \"select\": [{\n \"name\": \"count\",\n \"expr\": \"count(1)\",\n \"type\": 1\n }, {\n \"name\": \"alert_message_sum\",\n \"expr\": \"sum(alert_message_count)\",\n \"type\": 1\n }, {\n \"name\": \"cabinet_sum\",\n \"expr\": \"sum(cabinet_count)\",\n \"type\": 1\n }, {\n \"name\": \"asset_sum\",\n \"expr\": \"sum(asset_count)\",\n \"type\": 1\n }\n ],\n \"filter\": [{\n \"name\": \"datacenter\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_datacenter_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"t.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"t.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"t.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"t.name not like \'%{{value}}%\'\"\n }\n ]\n }\n ]\n }, {\n \"name\": \"project\",\n \"datasql\": \"SELECT t.id,t.name as project,(CASE WHEN mm.c IS NULL THEN 0 ELSE mm.c END) AS module_count,(CASE WHEN aec.c IS NULL THEN 0 ELSE aec.c END) AS endpoint_count,(CASE WHEN aec.ac IS NULL THEN 0 ELSE aec.ac END) AS asset_count,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count FROM monitor_project t LEFT JOIN (SELECT project_id,count(1) AS c FROM monitor_module GROUP BY project_id) mm ON mm.project_id=t.id LEFT JOIN (SELECT project_id,count(1) AS c FROM alert_message_active ama WHERE ama.project_id IS NOT NULL GROUP BY project_id) amc ON amc.project_id=t.id LEFT JOIN (SELECT project_id,count(1) AS c,count(DISTINCT e.asset_id) AS ac FROM monitor_endpoint e LEFT JOIN monitor_module m ON m.id=e.module_id GROUP BY m.project_id) aec ON aec.project_id=t.id\",\n \"group\": [{\n \"name\": \"project\",\n \"expr\": \"project\",\n \"type\": 2\n }\n ],\n \"select\": [{\n \"name\": \"count\",\n \"expr\": \"count(1)\",\n \"type\": 1\n }, {\n \"name\": \"alert_message_sum\",\n \"expr\": \"sum(alert_message_count)\",\n \"type\": 1\n }, {\n \"name\": \"module_sum\",\n \"expr\": \"sum(module_count)\",\n \"type\": 1\n }, {\n \"name\": \"endpoint_sum\",\n \"expr\": \"sum(endpoint_count)\",\n \"type\": 1\n }, {\n \"name\": \"asset_sum\",\n \"expr\": \"sum(asset_count)\",\n \"type\": 1\n }\n ],\n \"filter\": [{\n \"name\": \"project\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_project_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"t.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"t.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"t.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"t.name not like \'%{{value}}%\'\"\n }\n ]\n }\n ]\n }, {\n \"name\": \"module\",\n \"datasql\": \"SELECT t.id,t.NAME AS module,mp.NAME AS project,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count,(CASE WHEN mc.c IS NULL THEN 0 ELSE mc.c END) AS endpoint_count,(CASE WHEN mc.ac IS NULL THEN 0 ELSE mc.ac END) AS asset_count FROM monitor_module t LEFT JOIN monitor_project mp ON t.project_id=mp.id LEFT JOIN (SELECT module_id,count(1) AS c FROM alert_message_active ama WHERE ama.module_id IS NOT NULL GROUP BY module_id) amc ON amc.module_id=t.id LEFT JOIN (SELECT module_id,count(1) AS c,count(DISTINCT asset_id) AS ac FROM monitor_endpoint me GROUP BY module_id) mc ON mc.module_id=t.id\",\n \"group\": [{\n \"name\": \"project\",\n \"expr\": \"project\",\n \"type\": 2\n }, {\n \"name\": \"module\",\n \"expr\": \"module\",\n \"type\": 2\n }\n ],\n \"select\": [{\n \"name\": \"count\",\n \"expr\": \"count(1)\",\n \"type\": 1\n }, {\n \"name\": \"alert_message_sum\",\n \"expr\": \"sum(alert_message_count)\",\n \"type\": 1\n }, {\n \"name\": \"endpoint_sum\",\n \"expr\": \"sum(endpoint_count)\",\n \"type\": 1\n }, {\n \"name\": \"asset_sum\",\n \"expr\": \"sum(asset_count)\",\n \"type\": 1\n }\n ],\n \"filter\": [{\n \"name\": \"project\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_project_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"mp.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"mp.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"mp.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"mp.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"module\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_module_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"t.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"t.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"t.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"t.name not like \'%{{value}}%\'\"\n }\n ]\n }\n ]\n }, {\n \"name\": \"endpoint\",\n \"datasql\": \"SELECT \\tt.NAME AS endpoint, \\tt.*, \\tmm.NAME AS module, \\tmp.NAME AS project, \\tdc.NAME AS datacenter, \\taa.NAME AS asset, \\tatc.vm, \\tatc.vmh, \\tatc.NAME AS type, \\tassc.NAME AS state, \\tab.NAME AS brand, \\tam.NAME AS model, \\tcabinet.NAME AS cabinet, \\t( CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END ) AS alert_message_count FROM \\tmonitor_endpoint t \\tLEFT JOIN monitor_module mm ON t.module_id = mm.id \\tLEFT JOIN monitor_project mp ON mm.project_id = mp.id \\tLEFT JOIN asset_asset aa ON t.asset_id = aa.id \\tLEFT JOIN asset_type_conf atc ON aa.type_id = atc.id \\tLEFT JOIN asset_state_conf assc ON aa.state_id = assc.id \\tLEFT JOIN asset_brand ab ON aa.brand_id = ab.id \\tLEFT JOIN asset_model am ON aa.model_id = am.id \\tLEFT JOIN dc ON aa.dc_id = dc.id \\tLEFT JOIN cabinet ON aa.cabinet_id = cabinet.id \\tLEFT JOIN (select * from asset_ping where type = \'mgt\') ap ON aa.id = ap.asset_id \\tLEFT JOIN ( SELECT endpoint_id, count( 1 ) AS c FROM alert_message_active ama WHERE ama.endpoint_id IS NOT NULL GROUP BY endpoint_id ) amc ON amc.endpoint_id = t.id\",\n \"group\": [{\n \"name\": \"project\",\n \"expr\": \"project\",\n \"type\": 2\n }, {\n \"name\": \"module\",\n \"expr\": \"module\",\n \"type\": 2\n }, {\n \"name\": \"datacenter\",\n \"expr\": \"datacenter\",\n \"type\": 2\n }, {\n \"name\": \"asset\",\n \"expr\": \"asset\",\n \"type\": 2\n }, {\n \"name\": \"endpoint\",\n \"expr\": \"endpoint\",\n \"type\": 2\n }\n ],\n \"select\": [{\n \"name\": \"count\",\n \"expr\": \"count(1)\",\n \"type\": 1\n }, {\n \"name\": \"alert_message_sum\",\n \"expr\": \"sum(alert_message_count)\",\n \"type\": 1\n }\n ],\n \"filter\": [{\n \"name\": \"project\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_project_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"mp.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"mp.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"mp.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"mp.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"module\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_module_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"mm.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"mm.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"mm.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"mm.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"endpoint\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_endpoint_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"t.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"t.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"t.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"t.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"datacenter\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_datacenter_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"dc.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"dc.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"dc.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"dc.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"asset\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_asset_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"aa.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"aa.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"aa.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"aa.name not like \'%{{value}}%\'\"\n }\n ]\n }\n ]\n }, {\n \"name\": \"alert rule\",\n \"datasql\": \"SELECT t.id,t.NAME AS \'alertRule\',(CASE t.state WHEN 1 THEN \'Enabled\' WHEN 0 THEN \'Disabled\' ELSE \'Unkown\' END) AS state,(CASE t.type WHEN 1 THEN \'Metrics\' WHEN 2 THEN \'Logs\' WHEN 3 THEN \'SNMPTRAP\' ELSE \'Unkown\' END) AS typename,(CASE WHEN amc.c IS NULL THEN 0 ELSE amc.c END) AS alert_message_count FROM alert_rule t LEFT JOIN (SELECT rule_id,count(1) AS c FROM alert_message_active ama WHERE ama.rule_id IS NOT NULL GROUP BY rule_id) amc ON amc.rule_id=t.id\",\n \"group\": [{\n \"name\": \"type\",\n \"expr\": \"typename\",\n \"type\": 2\n }, {\n \"name\": \"state\",\n \"expr\": \"state\",\n \"type\": 2\n }, {\n \"name\": \"alert_rule\",\n \"expr\": \"alertRule\",\n \"type\": 2\n }\n ],\n \"select\": [{\n \"name\": \"count\",\n \"expr\": \"count(1)\",\n \"type\": 1\n }, {\n \"name\": \"alert_message_sum\",\n \"expr\": \"sum(alert_message_count)\",\n \"type\": 1\n }\n ],\n \"filter\": [{\n \"name\": \"alert rule\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_alert_rule_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"t.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"t.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"t.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"t.name not like \'%{{value}}%\'\"\n }\n ]\n }\n ]\n }, {\n \"name\": \"alert message\",\n \"datasql\": \"SELECT t.id,t.asset_id,t.endpoint_id,t.rule_id,t.project_id,t.module_id,t.dc_id,alsc.NAME AS severity,ar.NAME AS alert,(CASE ar.type WHEN 1 THEN \'Metrics\' WHEN 2 THEN \'Logs\' WHEN 3 THEN \'SNMPTRAP\' ELSE \'Unkown\' END) AS alertType,mp.NAME AS project,mm.NAME AS module,me.NAME AS endpoint,aa.NAME AS asset,dc.NAME AS datacenter FROM alert_message_active t LEFT JOIN alert_rule ar ON t.rule_id=ar.id LEFT JOIN monitor_project mp ON t.project_id=mp.id LEFT JOIN monitor_module mm ON t.module_id=mm.id LEFT JOIN monitor_endpoint me ON t.endpoint_id=me.id LEFT JOIN asset_asset aa ON t.asset_id=aa.id LEFT JOIN dc ON t.dc_id=dc.id LEFT JOIN alert_severity_conf alsc ON t.severity_id=alsc.id\",\n \"group\": [{\n \"name\": \"datacenter\",\n \"expr\": \"datacenter\",\n \"type\": 2\n }, {\n \"name\": \"project\",\n \"expr\": \"project\",\n \"type\": 2\n }, {\n \"name\": \"module\",\n \"expr\": \"module\",\n \"type\": 2\n }, {\n \"name\": \"endpoint\",\n \"expr\": \"endpoint\",\n \"type\": 2\n }, {\n \"name\": \"asset\",\n \"expr\": \"asset\",\n \"type\": 2\n }, {\n \"name\": \"alert_rule\",\n \"expr\": \"alert\",\n \"type\": 2\n }, {\n \"name\": \"priority\",\n \"expr\": \"severity\",\n \"type\": 2\n }\n ],\n \"select\": [{\n \"name\": \"count\",\n \"expr\": \"count(1)\",\n \"type\": 1\n }, {\n \"name\": \"affected_asset\",\n \"expr\": \"count(DISTINCT t.asset_id)\",\n \"type\": 1\n }, {\n \"name\": \"affected_datacenter\",\n \"expr\": \"count(DISTINCT t.dc_id)\",\n \"type\": 1\n }, {\n \"name\": \"affected_project\",\n \"expr\": \"count(DISTINCT t.project_id)\",\n \"type\": 1\n }, {\n \"name\": \"affected_module\",\n \"expr\": \"count(DISTINCT t.module_id)\",\n \"type\": 1\n }, {\n \"name\": \"affected_endpoint\",\n \"expr\": \"count(DISTINCT t.endpoint_id)\",\n \"type\": 1\n }, {\n \"name\": \"affected_alert_rule\",\n \"expr\": \"count(DISTINCT t.rule_id)\",\n \"type\": 1\n }\n ],\n \"filter\": [{\n \"name\": \"project\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_project_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"mp.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"mp.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"mp.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"mp.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"module\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_module_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"mm.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"mm.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"mm.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"mm.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"endpoint\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_endpoint_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"me.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"me.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"me.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"me.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"datacenter\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_datacenter_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"dc.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"dc.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"dc.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"dc.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"asset\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_asset_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"aa.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"aa.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"aa.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"aa.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"priority\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_priority_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"alsc.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"alsc.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"alsc.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"alsc.name not like \'%{{value}}%\'\"\n }\n ]\n }, {\n \"name\": \"alert rule\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_alert_rule_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"ar.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"ar.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"ar.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"ar.name not like \'%{{value}}%\'\"\n }\n ]\n }\n ]\n }, {\n \"name\": \"agent\",\n \"datasql\": \"SELECT \\tt.id, \\tt.type, \\t( CASE t.STATUS WHEN 1 THEN \'Up\' ELSE \'Down\' END ) AS STATUS, \\t( CASE t.type WHEN 1 THEN \'Global\' WHEN 2 THEN \'Per-datacenter\' ELSE \'Unkown\' END ) AS typename, \\tdc.NAME AS datacenter FROM \\tagent t \\tLEFT JOIN dc ON t.dc_id = dc.id\",\n \"group\": [{\n \"name\": \"type\",\n \"expr\": \"type\",\n \"type\": 2\n }, {\n \"name\": \"state\",\n \"expr\": \"status\",\n \"type\": 2\n }, {\n \"name\": \"datacenter\",\n \"expr\": \"datacenter\",\n \"type\": 2\n }\n ],\n \"select\": [{\n \"name\": \"count\",\n \"expr\": \"count(1)\",\n \"type\": 1\n }\n ],\n \"filter\": [{\n \"name\": \"datacenter\",\n \"type\": 2,\n \"rule\": [{\n \"regex\": \".+\",\n \"tip\": \"filter_datacenter_is_null\"\n }\n ],\n \"opers\": [{\n \"name\": \"=\",\n \"expr\": \"dc.name = \'{{value}}\'\"\n }, {\n \"name\": \"~=\",\n \"expr\": \"dc.name like \'%{{value}}%\'\"\n }, {\n \"name\": \"!=\",\n \"expr\": \"dc.name != \'{{value}}\'\"\n }, {\n \"name\": \"!~\",\n \"expr\": \"dc.name not like \'%{{value}}%\'\"\n }\n ]\n }\n ]\n }\n]\n', 1, NULL); +REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'prom_cmd_tmpl', '<#if currentAgent.type == 1>\r\nOPTION=\"--config.file=\'/opt/nezha/nz-agent/prometheus/prometheus.yml\' --web.listen-address=\'0.0.0.0:10091\' --storage.tsdb.retention.time=<#if systemConfig.metrics_storage_type?trim == \"1\">${systemConfig.metrics_storage_retention?trim}d<#else>${systemConfig.prometheus_default_retention_time_when_s3?trim}d</#if> --storage.tsdb.path=\'/data/prometheusData\' --web.enable-admin-api --enable-feature=\'remote-write-receiver\' --web.enable-lifecycle \"\r\n<#else>\r\nOPTION=\"--config.file=\'/opt/nezha/nz-agent/prometheus/prometheus.yml\' --web.listen-address=\'0.0.0.0:10091\' <#if systemConfig.prometheus_agent_mode?trim == \"1\">--enable-feature=remote-write-receiver,agent --storage.agent.retention.min-time=1h --storage.agent.retention.max-time=2h --storage.agent.wal-truncate-frequency=5m<#else> --enable-feature=\'remote-write-receiver\' --storage.tsdb.path=\'/data/prometheusData\' --storage.tsdb.retention.time=<#if systemConfig.metrics_storage_type?trim == \"1\">${systemConfig.metrics_storage_retention?trim}d<#else>${systemConfig.prometheus_default_retention_time_when_s3?trim}d</#if></#if> --web.enable-admin-api --web.enable-lifecycle \"\r\n</#if>', 1, 'prometheus 启动参数模板'); +REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'prom_yml_tmpl', '{\r\n \"global\": {\r\n \"scrape_interval\": \"${scrape_interval}s\",\r\n \"scrape_timeout\": <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n \"evaluation_interval\": \"${scrape_interval}s\"\r\n },\r\n \r\n <#-- alert 配置 -->\r\n <#if isAlert>\r\n \"alerting\": {\r\n \"alertmanagers\": [{\r\n \"path_prefix\": \"${path_prefix}\",\r\n \"static_configs\": [{\r\n \"targets\": [\"${alert_url}\"]\r\n }]\r\n }],\r\n \"alert_relabel_configs\": [{\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }, {\r\n \"regex\": \"replica\",\r\n \"action\": \"labeldrop\"\r\n }]\r\n },\r\n \"rule_files\": [\"rule.yml\"],\r\n </#if>\r\n \r\n \r\n \r\n <#-- per-datacenter 配置 -->\r\n <#if !isGlobal>\r\n \"scrape_configs\": [\r\n <#list jobList as jobPojo>\r\n {\r\n \"job_name\": \"${jobPojo.job_name}\",\r\n \"scheme\": \"${jobPojo.scheme?default(\"http\")}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": <#if jobPojo.metrics_path?default(\"\")?trim?length gt 0>\r\n \"${jobPojo.metrics_path}\",\r\n <#else>\r\n \"/metrics\",\r\n </#if>\r\n \"static_configs\":[\r\n <#list jobPojo.staticConfigList as staticConf >\r\n {\r\n \"targets\": [\r\n <#list staticConf.targets as targetConf>\r\n \"${targetConf}\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#if staticConf.labels ??&& (staticConf.labels?size >0)>\r\n ,\r\n \"labels\": {\r\n <#list staticConf.labels?keys as itemKey>\r\n \"${itemKey}\":<#if staticConf.labels[itemKey]?default(\"\")?trim?length gt 0>\r\n \"${staticConf.labels[itemKey]}\"\r\n <#else>\"\"</#if><#sep>,</#sep>\r\n </#list>\r\n } \r\n </#if>\r\n }<#sep>,</#sep>\r\n </#list>\r\n ],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if !jobPojo.instanceRelabel> \r\n ,\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n </#if>\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if !jobPojo.instanceRelabel> \r\n ,\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n </#if>\r\n ]\r\n }<#sep>,</#sep>\r\n </#list>\r\n <#if jobList??&&(jobList?size>0)>\r\n ,\r\n </#if>\r\n <#list endpointList as endpoint>\r\n {\r\n \"job_name\": ${endpoint.id?c},\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": <#if endpoint.config.metrics_path?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.metrics_path}\",\r\n <#else>\r\n <#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\">\r\n \"/metrics\",\r\n <#else>\r\n \"/snmp\",\r\n </#if>\r\n </#if>\r\n \"scrape_interval\": <#if endpoint.config.scrape_interval?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.scrape_interval?c}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if endpoint.config.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.scrape_timeout?c}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n\r\n\r\n\r\n <#if endpoint.config.basic_auth??&& (endpoint.config.basic_auth?size >0)>\r\n <#if endpoint.config.basic_auth.username?default(\"\")?trim?length gt 0 && endpoint.config.basic_auth.password?default(\"\")?trim?length gt 0>\r\n \"basic_auth\":{\r\n \"username\": \"${endpoint.config.basic_auth.username}\",\r\n \"password\": \"${endpoint.config.basic_auth.password}\"\r\n },\r\n </#if>\r\n </#if>\r\n \r\n <#if endpoint.config.bearer_token??&&endpoint.config.bearer_token?trim?length gt 0>\r\n \"authorization\":{\r\n \"type\":\"Bearer\",\r\n \"credentials\":\"${endpoint.config.bearer_token}\"\r\n },\r\n </#if>\r\n\r\n \r\n <#-- params 不为空且类型为 http ,添加 params -->\r\n <#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\" >\r\n \"scheme\": \"${endpoint.config.protocol}\",\r\n <#if endpoint.config.params?? && (endpoint.config.params?size >0) >\r\n \"params\":{\r\n <#list endpoint.config.params?keys as itemKey>\r\n \"${itemKey}\":[\r\n <#list endpoint.config.params[itemKey] as pojo>\r\n \"${pojo}\"\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#sep>,</#sep>\r\n </#list>\r\n },\r\n </#if>\r\n <#elseif endpoint.config.protocol == \"snmp\">\r\n <#-- 类型是 snmp ,组织 param 数据 , 原来params弃用,因为 snmp_exporter 不支持其他参数 -->\r\n \"params\":{\r\n \"target\":[ \"${endpoint.config.host}:${endpoint.config.port?c}\" ],\r\n \"module\":[ \"${endpoint.module.name}\" ]\r\n },\r\n </#if>\r\n \r\n \"static_configs\": [{\r\n \"targets\": [<#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\">\r\n \"${endpoint.config.host}:${endpoint.config.port?c}\"\r\n <#else>\r\n \"127.0.0.1:19116\"\r\n </#if>\r\n ],\r\n \"labels\": {\r\n \"datacenter\": \"${endpoint.dc.name}\",\r\n \"datacenter_id\":${endpoint.dc.id?c},\r\n \r\n \"project\": \"${endpoint.project.name}\",\r\n \"project_id\": ${endpoint.project.id?c},\r\n \r\n \"asset\": \"${endpoint.asset.name}\",\r\n \"asset_id\": ${endpoint.asset.id?c},\r\n \r\n \"module\": \"${endpoint.module.name}\",\r\n \"module_id\": ${endpoint.module.id?c},\r\n \r\n \"endpoint\": \"${endpoint.name}\",\r\n \"endpoint_id\": ${endpoint.id?c},\r\n \r\n <#if endpoint.asset.parent??&&(endpoint.asset.parent?size >0)>\r\n \"parent_asset\" : \"${endpoint.asset.parent.name}\",\r\n \"parent_asset_id\" : ${endpoint.asset.parent.id?c},\r\n </#if>\r\n\r\n \"nz_agent_id\": ${endpoint.agent.id?c}\r\n \r\n \r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n ,\r\n </#if>\r\n <#-- 补充用户自定义 Labels -->\r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n <#list endpoint.config.labels?keys as key>\r\n <#if key != \"datacenter\" && key != \"datacenter_id\" && key != \"project\" && key != \"project_id\" && key != \"asset\" && key != \"asset_id\" && key != \"module\" && key != \"module_id\" && key != \"endpoint\" && key != \"endpoint_id\">\r\n \"${key}\":\"${endpoint.config.labels[key]}\"<#sep>,</#sep>\r\n </#if>\r\n </#list>\r\n </#if>\r\n }\r\n }],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if endpoint.config.relabel_config??&& (endpoint.config.relabel_config?size >0)>\r\n <#list endpoint.config.relabel_config as relabel>\r\n ,{\r\n <#if relabel.action?? && (relabel.action == \'labeldrop\' || relabel.action == \'labelkeep\')>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'labelmap\'>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && (relabel.action == \'drop\' || relabel.action == \'keep\')>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'replace\'>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"separator\": \"${((relabel.separator!\'\')?length>0)?string((relabel.separator!\'\'),\";\")}\", \r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"target_label\": \"${(relabel.target_label)!\'\'}\"\r\n </#if>\r\n }\r\n </#list>\r\n </#if>\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n \r\n <#-- ping 配置 -->\r\n \r\n <#if endpointList??&&(endpointList?size>0)>\r\n ,\r\n </#if>\r\n \r\n <#-- ipmi_ip 配置 -->\r\n <#list blackboxIpmiJobList as asset>\r\n {\r\n \"job_name\": \"ipmi_ip_ping_${asset.id?c}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": \"/probe\",\r\n \"scrape_interval\": <#if asset.assetPingInterval?default(\"\")?trim?length gt 0>\r\n \"${asset.assetPingInterval}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if asset.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${asset.scrape_timeout}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n \"params\": {\r\n \"target\":[ \"${asset.ipmiIp}\" ],\r\n \"module\":[ \"ping\" ]\r\n },\r\n \"static_configs\": [{\r\n \"targets\": [\"127.0.0.1:19115\"],\r\n \"labels\": {\r\n \"datacenter\": \"${asset.dc.name}\",\r\n \"asset\": \"${asset.name}\",\r\n \"host\": \"${asset.ipmiIp}\",\r\n \"module\": \"ping\",\r\n \"source_ip\": \"${asset.agent.host}\",\r\n \"nz_agent_id\": ${asset.agent.id?c},\r\n \"type\": \"ipmi\"\r\n }\r\n }],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n \r\n <#if blackboxIpmiJobList??&&(blackboxIpmiJobList?size>0)>\r\n ,\r\n </#if>\r\n \r\n <#list blackboxMgtIpJobList as asset>\r\n {\r\n \"job_name\": \"asset_ping_${asset.id?c}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": \"/probe\",\r\n \"scrape_interval\": <#if asset.assetPingInterval?default(\"\")?trim?length gt 0>\r\n \"${asset.assetPingInterval}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if asset.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${asset.scrape_timeout}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n \"params\": {\r\n \"target\":[ \"${asset.manageIp}\" ],\r\n \"module\":[ \"ping\" ]\r\n },\r\n \"static_configs\": [{\r\n \"targets\": [\"127.0.0.1:19115\"],\r\n \"labels\": {\r\n \"datacenter\": \"${asset.dc.name}\",\r\n \"asset\": \"${asset.name}\",\r\n \"host\": \"${asset.manageIp}\",\r\n \"module\": \"ping\",\r\n \"source_ip\": \"${asset.agent.host}\",\r\n \"nz_agent_id\": ${asset.agent.id?c},\r\n \"type\": \"mgt\"\r\n }\r\n }],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#-- cortex 处理 -->\r\n ,\r\n \"remote_write\": [\r\n <#list remoteWriteUrlInfos as remoteConf>\r\n {\r\n \"url\": \"${remoteConf.url}\",\r\n \"authorization\": {\r\n \"type\": \"Bearer\",\r\n \"credentials\": \"${remoteConf.token}\"\r\n },\r\n \"tls_config\":{\r\n \"insecure_skip_verify\":true\r\n },\r\n \"write_relabel_configs\": [\r\n {\r\n \"source_labels\": [\"nz_agent_id\"],\r\n \"regex\": \"${currentAgent.id?c}\",\r\n \"action\": \"keep\"\r\n }\r\n ],\r\n \"queue_config\":{\r\n \"capacity\": 5000,\r\n \"max_samples_per_send\": 1000,\r\n \"min_shards\": 5,\r\n \"max_shards\": 10,\r\n \"min_backoff\": \"20ms\",\r\n \"min_backoff\": \"50ms\",\r\n \"sample_age_limit\": \"2h\"\r\n }\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#else>\r\n <#-- global 配置 -->\r\n \"scrape_configs\": [\r\n <#list jobList as jobPojo>\r\n {\r\n \"job_name\": \"${jobPojo.job_name}\",\r\n \"scheme\": \"${jobPojo.scheme?default(\"http\")}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n <#if jobPojo.isFederate> \r\n \"honor_labels\": ${jobPojo.honor_labels},\r\n \"params\": {\r\n \"match[]\": [\r\n \"{__name__=~\\\".+\\\",nz_agent_id = \\\"${jobPojo.excludeAgentId?c}\\\"}\"\r\n ]\r\n },\r\n \"authorization\":{\r\n \"type\":\"Bearer\",\r\n \"credentials\":\"${jobPojo.token}\"\r\n },\r\n </#if>\r\n \"metrics_path\": <#if jobPojo.metrics_path?default(\"\")?trim?length gt 0>\r\n \"${jobPojo.metrics_path}\",\r\n <#else>\r\n \"/metrics\",\r\n </#if>\r\n \"static_configs\":[\r\n <#list jobPojo.staticConfigList as staticConf >\r\n {\r\n \"targets\": [\r\n <#list staticConf.targets as targetConf>\r\n \"${targetConf}\"<#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#if staticConf.labels ??&& (staticConf.labels?size >0)>\r\n ,\r\n \"labels\": {\r\n <#list staticConf.labels?keys as itemKey>\r\n \"${itemKey}\":<#if staticConf.labels[itemKey]?default(\"\")?trim?length gt 0>\r\n \"${staticConf.labels[itemKey]}\"\r\n <#else>\"\"</#if><#sep>,</#sep>\r\n </#list>\r\n } \r\n </#if>\r\n }<#sep>,</#sep>\r\n </#list>\r\n ],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if !jobPojo.instanceRelabel> \r\n ,\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n </#if>\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if !jobPojo.instanceRelabel> \r\n ,\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n </#if>\r\n ]\r\n }<#sep>,</#sep>\r\n </#list>\r\n \r\n <#-- ping 配置 -->\r\n \r\n <#if jobList??&&(jobList?size>0)>\r\n ,\r\n </#if>\r\n \r\n <#-- ipmi_ip 配置 -->\r\n <#list blackboxIpmiJobList as asset>\r\n {\r\n \"job_name\": \"ipmi_ip_ping_${asset.id?c}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": \"/probe\",\r\n \"scrape_interval\": <#if asset.assetPingInterval?default(\"\")?trim?length gt 0>\r\n \"${asset.assetPingInterval}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if asset.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${asset.scrape_timeout}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n \"params\": {\r\n \"target\":[ \"${asset.ipmiIp}\" ],\r\n \"module\":[ \"ping\" ]\r\n },\r\n \"static_configs\": [{\r\n \"targets\": [\"127.0.0.1:19115\"],\r\n \"labels\": {\r\n \"datacenter\": \"${asset.dc.name}\",\r\n \"asset\": \"${asset.name}\",\r\n \"host\": \"${asset.ipmiIp}\",\r\n \"module\": \"ping\",\r\n \"source_ip\": \"${asset.agent.host}\",\r\n \"nz_agent_id\": ${asset.agent.id?c},\r\n \"type\": \"ipmi\"\r\n }\r\n }],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n \r\n <#if blackboxIpmiJobList??&&(blackboxIpmiJobList?size>0)>\r\n ,\r\n </#if>\r\n \r\n <#-- manage_ip 配置 -->\r\n <#list blackboxMgtIpJobList as asset>\r\n {\r\n \"job_name\": \"asset_ping_${asset.id?c}\",\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": \"/probe\",\r\n \"scrape_interval\": <#if asset.assetPingInterval?default(\"\")?trim?length gt 0>\r\n \"${asset.assetPingInterval}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if asset.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${asset.scrape_timeout}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n \"params\": {\r\n \"target\":[ \"${asset.manageIp}\" ],\r\n \"module\":[ \"ping\" ]\r\n },\r\n \"static_configs\": [{\r\n \"targets\": [\"127.0.0.1:19115\"],\r\n \"labels\": {\r\n \"datacenter\": \"${asset.dc.name}\",\r\n \"asset\": \"${asset.name}\",\r\n \"host\": \"${asset.manageIp}\",\r\n \"module\": \"ping\",\r\n \"source_ip\": \"${asset.agent.host}\",\r\n \"nz_agent_id\": ${asset.agent.id?c},\r\n \"type\": \"mgt\"\r\n }\r\n }],\r\n \"relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n \r\n <#if blackboxMgtIpJobList??&&(blackboxMgtIpJobList?size>0)>\r\n ,\r\n </#if>\r\n \r\n <#list endpointList as endpoint>\r\n {\r\n \"job_name\": ${endpoint.id?c},\r\n \"tls_config\":{\r\n \"insecure_skip_verify\": true\r\n },\r\n \"metrics_path\": <#if endpoint.config.metrics_path?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.metrics_path}\",\r\n <#else>\r\n <#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\">\r\n \"/metrics\",\r\n <#else>\r\n \"/snmp\",\r\n </#if>\r\n </#if>\r\n \"scrape_interval\": <#if endpoint.config.scrape_interval?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.scrape_interval?c}s\",\r\n <#else>\r\n \"${scrape_interval}s\",\r\n </#if>\r\n \"scrape_timeout\": <#if endpoint.config.scrape_timeout?default(\"\")?trim?length gt 0>\r\n \"${endpoint.config.scrape_timeout?c}s\",\r\n <#else>\r\n <#if scrape_timeout??> \r\n \"${scrape_timeout}s\",\r\n <#else>\r\n \"10s\",\r\n </#if>\r\n </#if>\r\n\r\n\r\n\r\n <#if endpoint.config.basic_auth??&& (endpoint.config.basic_auth?size >0)>\r\n <#if endpoint.config.basic_auth.username?default(\"\")?trim?length gt 0 && endpoint.config.basic_auth.password?default(\"\")?trim?length gt 0>\r\n \"basic_auth\":{\r\n \"username\": \"${endpoint.config.basic_auth.username}\",\r\n \"password\": \"${endpoint.config.basic_auth.password}\"\r\n },\r\n </#if>\r\n </#if>\r\n \r\n \r\n <#if endpoint.config.bearer_token??&&endpoint.config.bearer_token?trim?length gt 0>\r\n \"authorization\":{\r\n \"type\":\"Bearer\",\r\n \"credentials\":\"${endpoint.config.bearer_token}\"\r\n },\r\n </#if>\r\n\r\n \r\n <#-- params 不为空且类型为 http ,添加 params -->\r\n <#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\" >\r\n \"scheme\": \"${endpoint.config.protocol}\",\r\n <#if endpoint.config.params?? && (endpoint.config.params?size >0) >\r\n \"params\":{\r\n <#list endpoint.config.params?keys as itemKey>\r\n \"${itemKey}\":[\r\n <#list endpoint.config.params[itemKey] as pojo>\r\n \"${pojo}\"\r\n <#sep>,</#sep>\r\n </#list>\r\n ]\r\n <#sep>,</#sep>\r\n </#list>\r\n },\r\n </#if>\r\n <#elseif endpoint.config.protocol == \"snmp\">\r\n <#-- 类型是 snmp ,组织 param 数据 , 原来params弃用,因为 snmp_exporter 不支持其他参数 -->\r\n \"params\":{\r\n \"target\":[ \"${endpoint.config.host}:${endpoint.config.port?c}\" ],\r\n \"module\":[ \"${endpoint.module.name}\" ]\r\n },\r\n </#if>\r\n \r\n \"static_configs\": [{\r\n \"targets\": [<#if endpoint.config.protocol == \"http\" || endpoint.config.protocol == \"https\">\r\n \"${endpoint.config.host}:${endpoint.config.port?c}\"\r\n <#else>\r\n \"127.0.0.1:19116\"\r\n </#if>\r\n ],\r\n \"labels\": {\r\n \"datacenter\": \"${endpoint.dc.name}\",\r\n \"datacenter_id\":${endpoint.dc.id?c},\r\n \r\n \"project\": \"${endpoint.project.name}\",\r\n \"project_id\": ${endpoint.project.id?c},\r\n \r\n \"asset\": \"${endpoint.asset.name}\",\r\n \"asset_id\": ${endpoint.asset.id?c},\r\n \r\n \"module\": \"${endpoint.module.name}\",\r\n \"module_id\": ${endpoint.module.id?c},\r\n \r\n \"endpoint\": \"${endpoint.name}\",\r\n \"endpoint_id\": ${endpoint.id?c},\r\n \r\n <#if endpoint.asset.parent??&&(endpoint.asset.parent?size >0)>\r\n \"parent_asset\" : \"${endpoint.asset.parent.name}\",\r\n \"parent_asset_id\" : ${endpoint.asset.parent.id?c},\r\n </#if>\r\n \r\n \"nz_agent_id\": ${endpoint.agent.id?c}\r\n \r\n \r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n ,\r\n </#if>\r\n <#-- 补充用户自定义 Labels -->\r\n <#if endpoint.config.labels??&& (endpoint.config.labels?size >0)>\r\n <#list endpoint.config.labels?keys as key>\r\n <#if key != \"datacenter\" && key != \"datacenter_id\" && key != \"project\" && key != \"project_id\" && key != \"asset\" && key != \"asset_id\" && key != \"module\" && key != \"module_id\" && key != \"endpoint\" && key != \"endpoint_id\">\r\n \"${key}\":\"${endpoint.config.labels[key]}\"<#sep>,</#sep>\r\n </#if>\r\n </#list>\r\n </#if>\r\n }\r\n }],\r\n \"metric_relabel_configs\": [\r\n {\r\n \"regex\": \"job\",\r\n \"action\": \"labeldrop\"\r\n },\r\n {\r\n \"regex\": \"instance\",\r\n \"action\": \"labeldrop\"\r\n }\r\n <#if endpoint.config.relabel_config??&& (endpoint.config.relabel_config?size >0)>\r\n <#list endpoint.config.relabel_config as relabel>\r\n ,{\r\n <#if relabel.action?? && (relabel.action == \'labeldrop\' || relabel.action == \'labelkeep\')>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'labelmap\'>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && (relabel.action == \'drop\' || relabel.action == \'keep\')>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\"\r\n </#if>\r\n <#if relabel.action?? && relabel.action == \'replace\'>\r\n <#if relabel.source_labels??&& (relabel.source_labels?size >0)>\r\n \"source_labels\":[\r\n <#list relabel.source_labels as label>\r\n \"${label!\'\'}\"<#sep>,</#sep>\r\n </#list>\r\n ],\r\n </#if>\r\n \"separator\": \"${((relabel.separator!\'\')?length>0)?string((relabel.separator!\'\'),\";\")}\", \r\n \"regex\": \"${(relabel.regex)!\'\'}\",\r\n \"replacement\": \"${(relabel.replacement)!\'\'}\",\r\n \"action\": \"${(relabel.action)!\'\'}\",\r\n \"target_label\": \"${(relabel.target_label)!\'\'}\"\r\n </#if>\r\n }\r\n </#list>\r\n </#if>\r\n ]\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n \r\n ]\r\n \r\n <#-- cortex 处理 -->\r\n ,\r\n \"remote_write\": [\r\n <#list remoteWriteUrlInfos as remoteConf>\r\n { \r\n \"url\": \"${remoteConf.url}\",\r\n \"authorization\": {\r\n \"type\": \"Bearer\",\r\n \"credentials\": \"${remoteConf.token}\"\r\n },\r\n \"tls_config\":{\r\n \"insecure_skip_verify\":true\r\n },\r\n \"write_relabel_configs\": [\r\n {\r\n \"source_labels\": [\"nz_agent_id\"],\r\n \"regex\": \"${currentAgent.id?c}\",\r\n \"action\": \"keep\"\r\n }\r\n ],\r\n \"queue_config\":{\r\n \"capacity\": 5000,\r\n \"max_samples_per_send\": 1000,\r\n \"min_shards\": 5,\r\n \"max_shards\": 10,\r\n \"min_backoff\": \"20ms\",\r\n \"min_backoff\": \"50ms\",\r\n \"sample_age_limit\": \"2h\"\r\n }\r\n }\r\n <#sep>,</#sep>\r\n </#list>\r\n ] \r\n </#if>\r\n \r\n <#-- tsdb 配置 -->\r\n ,\r\n \"storage\": {\r\n \"tsdb\": {\r\n \"out_of_order_time_window\": \"${systemConfig.prometheus_tsdb_out_of_order_time_window}h\"\r\n }\r\n }\r\n}', 1, 'prometheus config文件模板'); +REPLACE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'prometheus_tsdb_out_of_order_time_window', '3', 1, 'prometheus 允许摄取无序样本的最大时长,默认:2h,单位:h'); diff --git a/nz-admin/src/main/resources/db/V2024.05.14__add custom config to sys_config.sql b/nz-admin/src/main/resources/db/V2024.05.14__add custom config to sys_config.sql new file mode 100644 index 00000000..2a170dff --- /dev/null +++ b/nz-admin/src/main/resources/db/V2024.05.14__add custom config to sys_config.sql @@ -0,0 +1,13 @@ +/** + * 添加用户可自定义的配置项,如果之前存在配置项则不添加 + */ + +INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'date_format', 'YYYY-MM-DD HH:mm:ss', 1, '时间格式化'); +INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'pin_policy', '{\"enable\":0,\"length\":6,\"num\":1,\"lower\":1,\"upper\":1,\"spec\":1,\"valid\":30,\"remind\":3,\"retry\":2,\"lockTime\":30}', 1, NULL); +INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'system_bgImg', '', 1, null); +INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'system_favicon', '', 1, null); +INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'interface_name', 'eth0,en0,bond0,ens2f0,enp0s31f6', 1, NULL); +INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'terminal_storage_type', '1', 1, '存储模式,1: 本地存储,2:S3对象存储'); +INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'language', 'en', 1, NULL); +INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (null, 'theme', 'light', 1, NULL); +UPDATE `sys_config` SET `param_value`='Network Zodiac' WHERE `param_key`='system_name' AND `param_value`='One-stop monitoring system'; |
