diff --git a/README.md b/README.md index 14d64f3a589658083bab0dadc80f397047ccb493..055684f2de5058677595e23056e478dfdd9d2903 100644 --- a/README.md +++ b/README.md @@ -348,7 +348,7 @@ sh deploy.sh ops -K -P -A -p -E -S +sh deploy.sh grafana -P -p -E -S --grafana_addr --grafana_addr_server_port ``` 选项详细说明: -| 选项 | 参数说明 | 是否必配 | -| :--------------: | :----------------------------------------------------------: | :------------: | -| -P\|--prometheus | 指定grafana中的prometheus数据源地址(一般来说是管理节点的IP),当不配置该选项时,prometheus数据源使用localhost | 否 | -| -p\|--pyroscope | 指定grafana中读取火焰图的pyroscope数据源地址(一般来说是管理节点的IP),当不配置该选项时,pyroscope数据源使用localhost | 否 | -| -E\|--elastic | 指定grafana中读取异常检测、拓扑图、根因定位结果的elasticsearch数据源地址(一般来说是管理节点的IP)。当不使用该选项时,elasticsearch数据源使用localhost | 否 | -| -S\|--srcdir | 离线部署时使用该选项来指定grafana安装包所在的目录 | 离线部署时必配 | +| 选项 | 参数说明 | 是否必配 | +| :------------------------: | :----------------------------------------------------------: | :------------: | +| -P\|--prometheus | 指定grafana中的prometheus数据源地址(一般来说是管理节点的IP),当不配置该选项时,prometheus数据源使用localhost | 否 | +| -p\|--pyroscope | 指定grafana中读取火焰图的pyroscope数据源地址(一般来说是管理节点的IP),当不配置该选项时,pyroscope数据源使用localhost | 否 | +| -E\|--elastic | 指定grafana中读取异常检测、拓扑图、根因定位结果的elasticsearch数据源地址(一般来说是管理节点的IP)。当不使用该选项时,elasticsearch数据源使用localhost | 否 | +| --grafana_addr | 指定 grafana 前端地址,便于外部访问 grafana 前端页面。当不使用该选项时,默认值为“http://localhost:3000” | 否 | +| --grafana_addr_server_port | 部署后的容器内有个 grafana 地址服务器,用于外部通过 http 接口获取 grafana 前端地址。当不使用该选项时,默认值为 3010。例如用户执行 `curl -X GET localhost:3010`,命令返回 grafana 前端地址——“http://localost:3000” | 否 | +| -S\|--srcdir | 离线部署时使用该选项来指定grafana安装包所在的目录 | 离线部署时必配 | ### 在线部署 @@ -433,7 +433,7 @@ sh deploy.sh ops -K -P -A -E diff --git a/deploy/deploy.sh b/deploy/deploy.sh index 6d99025770de6efbae17fe786b09a567135181e5..de0a93bef7c190c4efee5f7661b5de2c27504e90 100755 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -33,6 +33,8 @@ PROMETHEUS_ADDR="localhost:${PROMETHEUS_PORT}" ES_ADDR="localhost:${ES_PORT}" ARANGODB_ADDR="localhost:${ARANGODB_PORT}" PYROSCOPE_ADDR="localhost:${PYROSCOPE_PORT}" +GRAFANA_ADDR="http://localhost:3000" +GRAFANA_ADDR_SERVER_PORT=3010 PROMETHEUS_SCRAPE_LIST="" GOPHER_PROBES_INIT=' @@ -80,6 +82,7 @@ function print_usage() { echo "grafana options:" echo " [-P|--prometheus ] [-p|--pyroscope ]" echo " [-E|--elastic ]" + echo " [--grafana_addr ] [--grafana_addr_server_port ]" echo "" echo "Common options:" echo " --docker Deploy components with docker images, only support gopher" @@ -914,7 +917,7 @@ function deploy_middleware() { #=======Grafana Deployment=======# function parse_arg_grafana() { - ARGS=`getopt -a -o P:p:E:A:S: --long prometheus:,pyroscope:,elastic:,arangodb:srcdir: -- "$@"` + ARGS=`getopt -a -o P:p:E:A:S: --long prometheus:,pyroscope:,elastic:,arangodb:srcdir:,grafana_addr:,grafana_addr_server_port: -- "$@"` [ $? -ne 0 ] && ( print_usage; exit 1 ) eval set -- "${ARGS}" while true @@ -936,6 +939,12 @@ function parse_arg_grafana() { DEPLOY_TYPE="local" LOCAL_DEPLOY_SRCDIR=$(realpath $2) shift;; + --grafana_addr) + GRAFANA_ADDR=$2 + shift;; + --grafana_addr_server_port) + GRAFANA_ADDR_SERVER_PORT=$2 + shift;; --) shift break;; @@ -1048,6 +1057,8 @@ function deploy_grafana() { -e arangodb_server=${ARANGODB_ADDR} \ -e es_server=${ES_ADDR} \ -e prometheus_server=${PROMETHEUS_ADDR} \ + -e grafana_addr_server_port=${GRAFANA_ADDR_SERVER_PORT} \ + -e grafana_server_addr=${GRAFANA_ADDR} \ ${DOCKER_HUB_TAG_PREFIX}/grafana-${OS_ARCH} [ $? -ne 0 ] && echo_err_exit "Error: fail to run grafana container" diff --git a/grafana/dockerfile b/grafana/dockerfile index 7ff6ca68992f25608d415b6c0515032cf58fbaf2..535a0eef3a13cae0c8ff48b242970dc6fc02b3af 100644 --- a/grafana/dockerfile +++ b/grafana/dockerfile @@ -6,6 +6,10 @@ ADD . /opt/grafana USER root +# agent configuration is needed for intranet user +# ENV http_proxy=http://user:passwd@proxy.com:8080 +# ENV https_proxy=http://user:passwd@proxy.com:8080 + RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list @@ -14,13 +18,13 @@ RUN apt-get update RUN apt-get -y install python3 python3-pip RUN pip3 install -q elasticsearch python-arango pytz pyArango -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -RUN grafana-cli plugins install pyroscope-datasource \ - && grafana-cli plugins install pyroscope-panel \ - && grafana-cli plugins install marcusolsson-gantt-panel \ +RUN grafana-cli --insecure plugins install pyroscope-datasource \ + && grafana-cli --insecure plugins install pyroscope-panel \ + && grafana-cli --insecure plugins install marcusolsson-gantt-panel \ && cp -rf ./aops-sdg-panel /var/lib/grafana/plugins \ - && sed -i 's/^;allow_loading_unsigned_plugins.*/allow_loading_unsigned_plugins = aops-sdg-panel/g' /etc/grafana/grafana.ini + && sed -i 's/^;allow_loading_unsigned_plugins.*/allow_loading_unsigned_plugins = aops-sdg-panel/g' /etc/grafana/grafana.ini \ + && sed -i 's/^;allow_embedding.*/;allow_embedding = true/g' /etc/grafana/grafana.ini \ + && sed -i '/enable anonymous access/{n;s/false/true/;}' /usr/share/grafana/conf/defaults.ini RUN sed -i "2i python3 /opt/grafana/arangodb2es.py > /opt/grafana/arangodb2es.log &" /run.sh - - - +RUN sed -i "3i python3 /opt/grafana/grafanaAddrServer.py > /opt/grafana/grafanaAddrServer.log &" /run.sh \ No newline at end of file diff --git a/grafana/grafanaAddrServer.py b/grafana/grafanaAddrServer.py new file mode 100644 index 0000000000000000000000000000000000000000..5aaf611215851623aac31bbf22503ca85e7a7b70 --- /dev/null +++ b/grafana/grafanaAddrServer.py @@ -0,0 +1,20 @@ +import os +from http.server import HTTPServer, BaseHTTPRequestHandler + +class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): + def do_GET(self): + addr = os.getenv('grafana_server_addr') + if addr is None: + addr = 'http://127.0.0.1:3000' # default grafana server addr + self.send_response(200) + self.end_headers() + self.wfile.write(str.encode(addr)) + + +if __name__ == "__main__": + http_port = os.getenv('grafana_addr_server_port') + if http_port is None: + http_port = 3010 # default http port + + httpd = HTTPServer(('0.0.0.0', int(http_port)), SimpleHTTPRequestHandler) + httpd.serve_forever() \ No newline at end of file