feat(web): 增加服务日志跳转
This commit is contained in:
40
.idea/httpRequests/http-requests-log.http
generated
40
.idea/httpRequests/http-requests-log.http
generated
@@ -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
|
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/service_cloud_query/cloud/targets
|
||||||
Connection: Keep-Alive
|
Connection: Keep-Alive
|
||||||
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
|
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
|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,131 @@
|
|||||||
function commonInfo() {
|
function commonInfo() {
|
||||||
return {
|
return {
|
||||||
// baseUrl: 'http://132.126.207.131:35690/hudi_services/service_web',
|
baseUrl: 'http://132.126.207.131:35690/hudi_services/service_web',
|
||||||
baseUrl: '/hudi_services/service_web',
|
// baseUrl: '/hudi_services/service_web',
|
||||||
loki: {
|
loki: {
|
||||||
|
grafanaUrl: 'http://132.126.207.125:35700',
|
||||||
hudi: {
|
hudi: {
|
||||||
url: 'http://132.126.207.125:35700',
|
|
||||||
datasource: 'f648174e-7593-45cf-8fe8-8f8d5cf0fdde',
|
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) {
|
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) {
|
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) {
|
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}
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,8 +30,41 @@ function cloudCrud(title, path) {
|
|||||||
align: 'center',
|
align: 'center',
|
||||||
width: 160,
|
width: 160,
|
||||||
},
|
},
|
||||||
{name: 'url', label: '地址', width: 200},
|
{name: 'url', label: '地址'},
|
||||||
{name: 'serviceId', label: '服务', width: 200, fixed: 'right'},
|
{
|
||||||
|
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')
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -467,7 +467,6 @@ function yarnCrudColumns() {
|
|||||||
url = targetHudiCompactionLokiUrlByAlias(alias)
|
url = targetHudiCompactionLokiUrlByAlias(alias)
|
||||||
} else {
|
} else {
|
||||||
url = targetYarnApplicationLokiUrlByAppId(appId)
|
url = targetYarnApplicationLokiUrlByAppId(appId)
|
||||||
console.log(url)
|
|
||||||
}
|
}
|
||||||
window.open(url, '_blank')
|
window.open(url, '_blank')
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
GET {{queue-url}}/queue/names
|
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
|
POST {{queue-url}}/queue/add/compaction-queue-b1
|
||||||
|
|||||||
Reference in New Issue
Block a user