构建自定义版本

将thanos rule 页面的告警表达式的 expr 超链接修改为跳转到自定义的web UI。

环境准备

golang, git, node.js,具体的组件版本依赖写在 pkg/ui/react-app/package.json

golang

1
2
3
4
5
6
7
#下载 go version go1.17.6

cat /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/data0/go
export PATH=$PATH:$GOPATH/BIN

node.js

1
2
3
4
5
6
7
8
9
# 下载二进制包 node-v16.13.2-linux-x64.tar.xz 
xz -d node-v16.13.2-linux-x64.tar.xz
tar xvf node-v16.13.2-linux-x64.tar
cd node-v16.13.2-linux-x64
cp lib/ /usr/lib -rp
cp -d bin/* /usr/bin/

# node --version
v16.13.2

image-20220113105557012

构建分析

thanos 本身 golang 编写,web ui recat框架实现。需要node.js 环境支持,否则构建会报错。

构建本身使用 makefile,只make build 默认不构建 web ui,所以修改源代码不会生效。需要先make assets,再 make build 。

具体的构建须知写在 pkg/ui/react-app/README.md

image-20220113112028390

源码修改

github拉取 thanos-0.24.0 源码

相关源码位于

1
2
3
4
5
6
7
8
9
10
#vim pkg/ui/react-app/src/utils/index.ts		  
export const createExternalExpressionLink = (expr: string): string => {
const expLink = createExpressionLink(expr);
return `${queryURL}${expLink.replace(/^\.\./, '')}`;
};

export const createExpressionLink = (expr: string): string => {
return `../graph?g0.expr=${encodeURIComponent(expr)}&g0.tab=1&g0.stacked=0&g0.range_input=1h`;
};

具体配置位置在:

1
2
3
4
5
6
#pkg/ui/react-app/src/thanos/config.ts 
declare const THANOS_QUERY_URL: string;

export let queryURL = THANOS_QUERY_URL;
if (queryURL === '' || queryURL === '{{ .queryURL }}') {
queryURL = 'http://10.204.11.182:10904';

queryURL 写死的 http://localhost:10902,修改成自己的url即可。

构建

1
2
make assets
make build

image-20220113112322769

查看结果

image-20220113112417495

告警表达式链接已经定位到我们制定的页面了

下面是我们构建出来的二进制包

image-20220113112909484