Skip to content

Latest commit

 

History

History
149 lines (92 loc) · 6.39 KB

README.md

File metadata and controls

149 lines (92 loc) · 6.39 KB

pl-log-notic

这是一个通过读取 Elasticsearch 中收集的错误日志,发送消息到企业微信来实现生产系统错误提醒的预警系统。下面介绍如何安装部署。

安装构建静态文件所需的模块,以及构建静态文件

安装构建所需的模块

cd webpage
npm install

注:速度慢可以更换淘宝的源

cd webpage
npm config set registry https://registry.npm.taobao.org
npm install

然后构建页面

npm run build

构建出来的静态文件位于webpage/public/目录下,手动拷贝它们到pladmin/pltplconf/templates/pltplconf/,然后把index.html进行模板标签替换,最后把静态文件移动到pladmin/pltplconf/static

使用Makefile构建

你可能想使用Makefile,因为这样就不需要每次执行构建、手动拷贝再替换标签了:

make clean && make

服务环境部署

安装依赖

注:pl-log-notic是在Python 3.8环境下开发的。

pip install -r requirements.txt

如果安装缓慢可以尝试换个镜像,比如

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

关于依赖项和安装的包的位置相关问题

特殊情况下,可能需要把包安装在特定的位置,这时通过指定--target选项来实现,例如指定当前目录下的package目录:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt --target=package

也可以相对路径或者绝对路径:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt --target=./my_package
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt --target=/tmp/my_package

启动python命令时就需要指定一个环境变量,PYTHONPATH,如:

PYTHONPATH=package python

这时模块路径就能包含当前目录的package目录:

$ PYTHONPATH=package python
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/az13js/pl-log-notic/package', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/az13js/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages']

初始化数据库的表

cd pladmin
python3 manage.py migrate

默认情况下使用的是sqlite3本地数据库,数据库文件位于pladmin/db.sqlite3

使用MySQL?

如果使用MySQL需要进行一些调整。

一,调整配置文件,默认配置文件位于pladmin/pladmin/settings.py,除非自定义修改了配置文件路径。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 数据库引擎
        'NAME': 'test_001', # 数据库名
        'USER': 'root', # 账号
        'PASSWORD': 'PASSWORD', # 密码
        'HOST': '127.0.0.1', # HOST
        'POST': 3306, # 端口
        'CONN_MAX_AGE': 60 # 数据库连接维持时间
    }
}

二,修改代码,在pladmin/pltplconf/__init__.py,导入plmysql并设置:

import pymysql
pymysql.install_as_MySQLdb()

启动定时任务

cd pladmin
python3 manage.py scheduler

注:这命令不会自己转后台,最好配置supervisor去监控。如果使用sqlite3的话可能出现数据库锁定导致操作错误,这种情况它会自己尝试继续运行,并发低的时候问题不大。

运行服务器

cd pladmin
python3 manage.py runserver 9210

注:9210是 web 服务的监听端口号,可以自定义这个端口号,应用不依赖特定端口。

查看页面

浏览器访问http://127.0.0.1:9210/

创建超级用户

服务器端使用的是Django框架,如果你打算使用框架内置的后台,那你可能想创建超级用户。

cd pladmin
python3 manage.py createsuperuser

按照提示填写用户信息和密码就行了。

启动ES数据导出的节点

这个系统支持根据自定义的规则从ES中按照时间段导出全部数据。原理是采用Worker节点从Web服务中查询出导出的任务,领取后在节点上执行数据导出的工作。Worker可以运行多个,通过不同的Worker名称来区分。启动Worker需要按照下面的方式通过环境变量配置:

  • WORKER_NAME节点名,必填,保证每个进程有不同的节点名
  • HOST通过HTTP访问时的主机名称,只通过IP就能访问的话可以随便写,此参数是必填的
  • IPWEB服务的IP地址,如果IP地址是可以动态改变的话,那么可以不设置此参数
  • PORTWEB服务端口,默认80,可以不填写
  • CACHETIME游标缓存时间,默认是1分钟,1m
  • USERHTTP基础认证,用户名,可选
  • PASSWORDHTTP基础认证,密码,可选

示例:

$ cd pladmin
$ WORKER_NAME=local-worker-01 HOST=pl-log-notic.az13js.cn IP=127.0.0.1 PORT=9210 CACHETIME=1m python3 manage.py export_worker

该命令需要使用一些手段防止因为程序异常退出。在单机模式下,导出的文件会保存到pladmin/pltplconf/static文件夹,可以在页面上下载。在以多个Worker作为集群部署的时候,如果部署在不同的服务器上那么可能无法下载到导出的文件。这种情况下请参考pladmin/export_floder_process_script.py脚本编写一个上传到专门的文件服务的命令,然后修改配置文件里面的EXPORT_FLODER_PROCESS_COMMAND参数。Worker进程会在导出ES数据完成的时候,将数据所在的文件夹作为第一个参数传给EXPORT_FLODER_PROCESS_COMMAND配置的命令,然后把命令输出的内容作为下载的链接通过Web服务保存起来,然后在页面被用户看到。

作为集群部署

无论Web服务、scheduler服务或者导出节点,都可以支持以集群的方式分开部署在个服务器上。因为默认的配置是针对单机部署的,所以需要按照下面的方式调整一些配置:

  1. 导出节点集群部署需要参考pladmin/export_floder_process_script.py脚本编写一个上传到专门的文件服务的命令,然后修改配置文件里面的EXPORT_FLODER_PROCESS_COMMAND参数)
  2. scheduler服务集群部署需要Redis服务,然后修改配置文件中的REDIS_SETTING
  3. Web服务集群部署需要单独部署数据库,参考上面的MySQL配置说明