feat(web): 增加服务日志跳转

This commit is contained in:
2024-02-01 19:07:03 +08:00
parent 72a914daf1
commit 7c9ba2876f
5 changed files with 170 additions and 31 deletions

View File

@@ -1,3 +1,23 @@
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/queue/queue/all?name=compaction-queue-b1
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
Cookie: JSESSIONID=A671FB3CA5360CA75F871BE9CBA3671E
Accept-Encoding: br,deflate,gzip,x-gzip
<> 2024-01-31T151734.200.json
###
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/queue/queue/all/compaction-queue-b1
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
Cookie: JSESSIONID=22E06ED40F4625C6226C2118C5675363
Accept-Encoding: br,deflate,gzip,x-gzip
<> 2024-01-31T151720.404.json
###
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/service_cloud_query/cloud/targets
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
@@ -442,23 +462,3 @@ Accept-Encoding: br,deflate,gzip,x-gzip
###
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/service_scheduler/schedule/schedule_times
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
Cookie: JSESSIONID=72C86B35CEC2C7C8EAD234351B7EF959
Accept-Encoding: br,deflate,gzip,x-gzip
<> 2024-01-15T145017.200.json
###
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/service_scheduler/schedule/schedule_times
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
Cookie: JSESSIONID=0C3AEB91AD103B11FD674356CB0FCC2B
Accept-Encoding: br,deflate,gzip,x-gzip
<> 2024-01-15T144904.200.json
###

View File

@@ -1,24 +1,131 @@
function commonInfo() {
return {
// baseUrl: 'http://132.126.207.131:35690/hudi_services/service_web',
baseUrl: '/hudi_services/service_web',
baseUrl: 'http://132.126.207.131:35690/hudi_services/service_web',
// baseUrl: '/hudi_services/service_web',
loki: {
grafanaUrl: 'http://132.126.207.125:35700',
hudi: {
url: 'http://132.126.207.125:35700',
datasource: 'f648174e-7593-45cf-8fe8-8f8d5cf0fdde',
},
service: {
datasource: 'b6fee51c-facd-4261-a0eb-8c69a975fba3',
}
},
}
}
/**
* Queries
* {datasource, queryMap}
*/
function generateLokiPanel(queries) {
return {
LWF: {
queries: [
...queries.map(item => {
let name = item['name']
let datasource = item['datasource']
let queryMap = item['queryMap']
let query = Object.keys(queryMap)
.sort()
.map(key => `${key}="${queryMap[key]}"`)
let match = "\\d{4}-(?P<time>\\d{2}-\\d{2}\\s*\\d{2}:\\d{2}:\\d{2}).+#@#\\s*(?P<content>[\\w\\W]+)"
let format = "{{.time}} [{{.host}}] [{{.level}}] [{{.app}}] {{.content}}"
// language=TEXT
let expression = `{${query.join(",")}}\n| regexp "${match.replaceAll('\\', '\\\\')}"\n| line_format \`${format}\``
return {
refId: name,
expr: expression,
queryType: "range",
datasource: {
type: "loki",
uid: datasource
},
editorMode: "code"
}
})
],
range: {
from: "now-1h",
to: "now"
}
}
}
}
function generateQuery(name, datasource, queryMap) {
return {
name: name,
datasource: datasource,
queryMap: queryMap,
}
}
function generateLokiUrl(baseUrl, queries) {
return `${baseUrl}/explore?panes=${encodeURIComponent(JSON.stringify(generateLokiPanel(queries)))}&schemaVersion=1&orgId=1`
}
function targetHudiSyncLokiUrlByAlias(flinkJobId) {
return `${commonInfo().loki.hudi.url}/explore?panes=%7B%22LWF%22:%7B%22datasource%22:%22${commonInfo().loki.hudi.datasource}%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22expr%22:%22%7Bapp%3D%5C%22hudi-sync%5C%22,%20flink_job_id%3D%5C%22${flinkJobId}%5C%22%7D%5Cn%7C%20regexp%20%5C%22%5C%5C%5C%5Cd%7B4%7D-%28%3FP%3Ctime%3E%5C%5C%5C%5Cd%7B2%7D-%5C%5C%5C%5Cd%7B2%7D%5C%5C%5C%5Cs%2A%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D%29.%2B%23@%23%5C%5C%5C%5C%5Cs%2A%28%3FP%3Ccontent%3E%5B%5C%5C%5C%5Cw%5C%5C%5C%5CW%5D%2B%29%5C%22%5Cn%7C%20line_format%20%60%7B%7B.time%7D%7D%20%5B%7B%7B.host%7D%7D%5D%20%5B%7B%7B.level%7D%7D%5D%20%5B%7B%7B.app%7D%7D%5D%20%7B%7B.content%7D%7D%60%22,%22queryType%22:%22range%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22f648174e-7593-45cf-8fe8-8f8d5cf0fdde%22%7D,%22editorMode%22:%22code%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D%7D&schemaVersion=1&orgId=1`
return generateLokiUrl(
commonInfo().loki.grafanaUrl,
[
generateQuery(
"Hudi 运行日志",
commonInfo().loki.hudi.datasource,
{"flink_job_id": flinkJobId}
)
]
)
}
function targetHudiCompactionLokiUrlByAlias(alias) {
return `${commonInfo().loki.hudi.url}/explore?panes=%7B%22LWF%22:%7B%22datasource%22:%22${commonInfo().loki.hudi.datasource}%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22expr%22:%22%7Bapp%3D%5C%22hudi-compaction%5C%22,%20alias%3D%5C%22${alias}%5C%22%7D%5Cn%7C%20regexp%20%5C%22%5C%5C%5C%5Cd%7B4%7D-%28%3FP%3Ctime%3E%5C%5C%5C%5Cd%7B2%7D-%5C%5C%5C%5Cd%7B2%7D%5C%5C%5C%5Cs%2A%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D%29.%2B%23@%23%5C%5C%5C%5C%5Cs%2A%28%3FP%3Ccontent%3E%5B%5C%5C%5C%5Cw%5C%5C%5C%5CW%5D%2B%29%5C%22%5Cn%7C%20line_format%20%60%7B%7B.time%7D%7D%20%5B%7B%7B.host%7D%7D%5D%20%5B%7B%7B.level%7D%7D%5D%20%5B%7B%7B.app%7D%7D%5D%20%7B%7B.content%7D%7D%60%22,%22queryType%22:%22range%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22f648174e-7593-45cf-8fe8-8f8d5cf0fdde%22%7D,%22editorMode%22:%22code%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D%7D&schemaVersion=1&orgId=1`
return generateLokiUrl(
commonInfo().loki.grafanaUrl,
[
generateQuery(
"Hudi 运行日志",
commonInfo().loki.hudi.datasource,
{"alias": alias}
)
]
)
}
function targetYarnApplicationLokiUrlByAppId(applicationId) {
return `${commonInfo().loki.hudi.url}/explore?panes=%7B%22LWF%22:%7B%22datasource%22:%22${commonInfo().loki.hudi.datasource}%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22expr%22:%22%7Bapp_id%3D%5C%22${applicationId}%5C%22%7D%5Cn%7C%20regexp%20%5C%22%5C%5C%5C%5Cd%7B4%7D-%28%3FP%3Ctime%3E%5C%5C%5C%5Cd%7B2%7D-%5C%5C%5C%5Cd%7B2%7D%5C%5C%5C%5Cs%2A%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D%29.%2B%23@%23%5C%5C%5C%5C%5Cs%2A%28%3FP%3Ccontent%3E%5B%5C%5C%5C%5Cw%5C%5C%5C%5CW%5D%2B%29%5C%22%5Cn%7C%20line_format%20%60%7B%7B.time%7D%7D%20%5B%7B%7B.host%7D%7D%5D%20%5B%7B%7B.level%7D%7D%5D%20%5B%7B%7B.app%7D%7D%5D%20%7B%7B.content%7D%7D%60%22,%22queryType%22:%22range%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22f648174e-7593-45cf-8fe8-8f8d5cf0fdde%22%7D,%22editorMode%22:%22code%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D%7D&schemaVersion=1&orgId=1`
}
return generateLokiUrl(
commonInfo().loki.grafanaUrl,
[
generateQuery(
"Hudi 运行日志",
commonInfo().loki.hudi.datasource,
{"app_id": applicationId}
)
]
)
}
function serviceLogByAppName(name) {
return generateLokiUrl(
commonInfo().loki.grafanaUrl,
[
generateQuery(
"Service 运行日志",
commonInfo().loki.service.datasource,
{"app": name}
)
]
)
}
function serviceLogByAppNameAndHost(name, host) {
return generateLokiUrl(
commonInfo().loki.grafanaUrl,
[
generateQuery(
"Service 运行日志",
commonInfo().loki.service.datasource,
{"app": name, "host": host}
)
]
)
}

View File

@@ -30,8 +30,41 @@ function cloudCrud(title, path) {
align: 'center',
width: 160,
},
{name: 'url', label: '地址', width: 200},
{name: 'serviceId', label: '服务', width: 200, fixed: 'right'},
{name: 'url', label: '地址'},
{
type: 'operation',
label: '操作',
width: 100,
fixed: 'right',
className: 'nowrap',
buttons: [
{
label: "日志",
type: "action",
level: "link",
tooltip: '打开Grafana日志',
onEvent: {
click: {
actions: [
{
actionType: 'custom',
script: (context, doAction, event) => {
let data = context.props.data
let url = ''
if (data['metadata']) {
url = serviceLogByAppNameAndHost(data.serviceId, data.metadata.hostname)
} else if (data['name']) {
url = serviceLogByAppName(data.name)
}
window.open(url, '_blank')
},
}
]
}
}
},
]
},
]
}
}

View File

@@ -467,7 +467,6 @@ function yarnCrudColumns() {
url = targetHudiCompactionLokiUrlByAlias(alias)
} else {
url = targetYarnApplicationLokiUrlByAppId(appId)
console.log(url)
}
window.open(url, '_blank')
},

View File

@@ -14,7 +14,7 @@
GET {{queue-url}}/queue/names
### 队列内容
GET {{queue-url}}/queue/all/compaction-queue-b1
GET {{queue-url}}/queue/all?name=compaction-queue-b1
### 新增
POST {{queue-url}}/queue/add/compaction-queue-b1