日志管理工具Graylog前后端分离

712 阅读3分钟

剥离graylog前后端,本地启动graylog的前端项目

1. 找到前端项目文件夹

前端项目的文件夹位于graylog2-server/graylog2-web-interface中

2. 安装项目依赖

npm install

3.启动项目

因项目中抽离了基础库,所以在运行start前需要先运行命令,抽取基础库: npm run build

启动项目:npm run start

4.配置后端的接口请求url

经分析查找,找出devServer.js中的apiUrl是连接后端的接口地址,将地址改成需要请求的后端接口地址,运行npm run start即完成了graylog的前端项目本地启动。

graylog前端项目生产环境配置(分析部分可跳过)

1.命令分析

我们查看package.json中的scripts,文件中跟build有关的命令是以下三个:

  • build: 在本地运行时,我们知道这个命令主要用来生成抽离的基础库
  • build:stats
  • build:analyze

我们来逐条解析这些命令.

build:stats解析
cross-env

cross-env这是一款运行跨平台设置和使用环境变量的脚本。

--profile --json > ./webpack/stats-$(git rev-parse --abbrev-ref HEAD).json

以json格式生成打包的性能数据文件输出到stats.json文件中

webpack --profile

输出性能数据,可以看到每一步的耗时

git rev-parse --abbrev-ref HEAD

打印且只打印当前分支名

stats 的中文意思是统计

最终得出的结果:build:stats命令的意思是,设置环境变量disable_plugins=true,以json格式生成profile到stats{当前分支名}的json文件中,也就是说build:stats命令与生产打包无关,是做性能分析统计用的?

build:analyze

analyze中文的意思是分析,我们再结合build:stats一起看,这个命令的意思是分析打包文件?也跟打包生产包没有关系。

最后只有build有点像了,但前面我们也分析过,这是做基础库抽离的。暂时没有思路,所以我们找后端人员要了jar包,看是否有所收获。

2. jar包分析

将graylog的jar包解压缩,找到所有的前端文件存放于web-interface中,文件目录结构如下:

文件名文件说明
assets文件夹,存放所有静态资源文件
config.js.templatewindow.appConfigs配置文件
index.html.development.template
index.html.template项目入口文件

我们查看一下config.js.template代码

window.appConfig = {
  gl2ServerUrl: '${serverUri}',
  gl2AppPathPrefix: '${appPathPrefix}',
  rootTimeZone: '${rootTimeZone}',
};

和graylog2-web-interface下的config.js很像,我们可以推断出这个文件主要用于配置window.appConfig:

window.appConfig = {
  gl2ServerUrl: '/api',
  gl2AppPathPrefix: '',
  rootTimeZone: 'UTC',
  pluginUISettings: {
    'org.graylog.plugins.customization.theme': {},
  },
};

再来看一下index.html.development.template

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="robots" content="noindex, nofollow">
    <meta charset="UTF-8">
    <title>${title}</title>
    <link rel="shortcut icon" href="${appPrefix}assets/favicon.png">
  </head>
  <body>
  <h1>${title}</h1>
  <p>The server is running in development mode and doesn't provide web interface assets.</p>
  <p>Please use yarn to start the web development server via: <pre>cd /path/to/graylog2-server/graylog2-web-interface && yarn start</pre></p>
  </body>
</html>

对比了一下已启动的测试环境页面,没找到这个页面是做什么用的,暂时先忽略。

看一下index.html.template

<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="robots" content="noindex, nofollow">
    <meta charset="UTF-8">
    <title>${title}</title>
    <link rel="shortcut icon" href="${appPrefix}assets/favicon.png">
    ${foreach cssFiles cssFile}
    <link href="${appPrefix}assets/${cssfile}" rel="stylesheet">
    ${end}
  </head>
  <body>
    <script src="${appPrefix}config.js"></script>
    ${foreach jsFiles jsFile}
    <script src="${appPrefix}assets/${jsFile}"></script>
    ${end}
  </body>
</html>

我们再对比一下已经启动的测试环境页面,分析得出,这就是我们想要的index.html入口文件,但是这个文件夹中的css和javascript文件,都是由后端指定目录的,这就有点麻烦了,这说明,现在graylog前端项目,不能独立由webapck生成想要的生产配置,需要分析现有的配置文件,改装成我们想要的配置。

3. 对比jar包的静态文件与build后的文件

查看web-interface文件夹,粗略的查看了下,其中assets目录下的文件与target/web/build/一致,target/web/build/ 文件夹下的文件有点像生产打包的文件,但是放到nginx下,打开的index.html文件报错,报错信息为config.js未找到。

一般webpack配置生产包,最重要的就是入口和出口,配置路径地址,这时查一下,无法找到config.js,是不是build的地址有问题。查看webpack.config.js,找出config.js文件的入口在template文件中,引入地址为/config.js,不是打包文件引入的, 将整个找包的文件包放入nginx的文件夹下后,将config.js复制到/(根目录)下,刷新文件,静态文件引入地址报错。再结合jar包,我们把所有的文件拷贝一份放在assets下,再刷新页面,就可以正确引入js和css文件了(这只是为了解决问题的速成法,不是终极法,有时间再改配置文件),这个时候就只有请求接口404了。

4. nginx api代理配置

需要在nginx的config文件中配置api代理文件,配置参考如下:

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            # root   build/;           
            index  index.html index.htm;
        }
        location /api {
            proxy_pass [服务端地址];
        }
    }

配置完成,生产环境打的包,就能在nginx下正常运行了。