首页 文章 精选 留言 我的

精选列表

搜索[部署],共10000篇文章
优秀的个人博客,低调大师

阿里云 Centos7 部署Java web [jar/war/nginx+域名服务]

(一)第一部分:最基本的jar包运行(无需配置tomcat) [http://60.205.183.114:8081/] 1、配置阿里云(Esc学生服务器、镜像Centos7.7),并远程连接进入终端。 2、安装并配置JDK(参考https://www.jianshu.com/p/093413f2a04f) a)安装jdk。b)寻找jdk路径配置环境变量。c)简单的Java hello world测试确保安装成功。 3、安装并配置mysql(mariadb)(参考https://blog.csdn.net/DaSo_CSDN/article/details/54754936) a)安装mysql、mariadb server。b)systemctl 开启服务。c) 打开端口。(阿里云要在控制台打开,参考https://yq.aliyun.com/articles/701181)d) 更改mysql 的root密码,对应于项目配置文件中的密码。 4、利用scp进行文件传输(参考https://www.cnblogs.com/tugenhua0707/p/8278772.html) a)传输spring maven 的快照版本用于测试。b)传输数据库sql文件。 5、导入数据库 a)创建sql文件对应的数据库。b)利用文件重定向运行sql文件。c)检查数据库是否导入成功 6、运行jar文件,控制台获取公网IP,本机输入IP:8081测试。 7、设置后台运行(已设置:http://60.205.183.114:8081/) a)contrl+c中止。b)然后通过nohup 和 & 来后台运行。c)ps通过pid来停止后台运行进程。 运行结果整体过程: [root@iZ2ze4r3b4xcztbcsey08cZ ~]# history 1 MAKRER=SHOW_LOCALE;printf $MAKRER""; locale; MAKRER=SHOW_LOCALE;printf $MAKRER""; 2 yum install -y mysql 3 yum install -y mariadb-server mariadb 4 systemctl start mariadb 5 systemctl enable mariadb 6 yum install -y mysql-devel 7 firewall-cmd --zone=public --add-port=3306/tcp --permanent 8 CHECK_TYPE=SHELL; echo "INFO=${CHECK_TYPE} PID=$$ PPID=$PPID TTY=$(tty) SHELL=$0 HOME=$HOME PWD=$PWD| CHECK_SHELL_END" 9 ls 10 ifconfig 11 ls 12 yum list 13 java -version 14 ls 15 yum search java-1.8 16 yum -y install java-1.8.0-openjdk-devel.x86_64 17 java -version 18 cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/ 19 pwd 20 vim /etc/profile 21 . /etc/profile 22 vim Demo.java 23 javac Demo.java 24 java Demo 25 su 26 MAKRER=SHOW_LOCALE;printf $MAKRER""; locale; MAKRER=SHOW_LOCALE;printf $MAKRER""; 27 CHECK_TYPE=SHELL; echo "INFO=${CHECK_TYPE} PID=$$ PPID=$PPID TTY=$(tty) SHELL=$0 HOME=$HOME PWD=$PWD| CHECK_SHELL_END" 28 mysql -u root 29 ls 30 pwd 31 ifconfig 32 ls 33 mysql 34 mysql -u root jpetstore < jpetstore.sql 35 mariadb 36 mysql 37 java -jar mypetstore-0.0.3-SNAPSHOT.jar 38 nohup java -jar mypetstore-0.0.3-SNAPSHOT.jar & 39 ps 40 history [root@iZ2ze4r3b4xcztbcsey08cZ ~]# 控制台开端口 利用scp传文件 运行mysql 文件 [root@iZ2ze4r3b4xcztbcsey08cZ ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 5.5.65-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database jpetstore; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> quit Bye [root@iZ2ze4r3b4xcztbcsey08cZ ~]# mysql -u root jpetstore < jpetstore.sql [root@iZ2ze4r3b4xcztbcsey08cZ ~]# mariadb -bash: mariadb: command not found [root@iZ2ze4r3b4xcztbcsey08cZ ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 5 Server version: 5.5.65-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | jpetstore | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec) MariaDB [(none)]> use jpetstore; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [jpetstore]> show tables; +---------------------+ | Tables_in_jpetstore | +---------------------+ | account | | addlog | | bannerdata | | browselog | | cart | | cartitem | | category | | inventory | | item | | lineitem | | orders | | orderstatus | | product | | profile | | sequence | | signon | | supplier | +---------------------+ 17 rows in set (0.00 sec) 访问http://60.205.183.114:8081/ (二)第二部分:利用Tomcat容器对war包进行处理(需要Tomcat) [http://60.205.183.114:8080/myJPetStore_war/index.jsp] 1、安装Tomcat(参考https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-centos-7) a)本地下载tomcat,然后利用scp文件传输b)设置访问权限c)设置服务配置d)输入IP:8080测试是否已经开启服务 2、数据库/端口配置 a)数据库root 密码 和服务器对应b)端口配置,在上面已经开启了8080端口 3、利用scp传输war包,放到webapp里边(直接会解析出文件) 4、重启tomcat服务 a)bin下的shutdown.shb)bin下的startup.sh 5、本机测试访问 a)注意要添加访问的资源的路径/myJPetStore_war/index.jsp,然后tomcat容器会自动到webapp下去寻找b) 已设置tomcat容器:http://60.205.183.114:8080/myJPetStore_war/index.jsp 运行结果整体过程 52 ls 53 sudo mkdir /opt/tomcat 54 sudo tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1 55 cd /opt/tomcat 56 sudo chgrp -R tomcat /opt/tomcat 57 sudo chmod -R g+r conf 58 sudo chmod g+x conf 59 sudo chown -R tomcat webapps/ work/ temp/ logs/ 60 sudo vi /etc/systemd/system/tomcat.service 61 sudo systemctl daemon-reload 62 sudo systemctl start tomcat 63 sudo systemctl status tomcat 64 sudo systemctl enable tomcat 65 ls 66 cd webapps/ 67 pwd 68 ls 69 sudo systemctl restart tomcat 70 cd ../bin/ 71 ls 72 sh shutdown.sh 73 sh startup.sh 74 history [root@iZ2ze4r3b4xcztbcsey08cZ bin]# 利用systemctl查看tomcat的状态 验证是否开启tomcat服务 将war包直接传入webapp中 然后webapp会自动解析war包(即myJPetStore_war) [root@iZ2ze4r3b4xcztbcsey08cZ webapps]# pwd /opt/tomcat/webapps [root@iZ2ze4r3b4xcztbcsey08cZ webapps]# ls docs examples host-manager manager myJPetStore_war myJPetStore_war.war ROOT 访问http://60.205.183.114:8080/myJPetStore_war/index.jsp (三)第三部分:指定域名进行访问 [http://crf.codes/] 1、配置virmach vps,达到可以通过IP进行访问 a)过程同第一步,最后设置为后台运行。b) 已配置:http://198.12.120.212:8081/ 2、服务器安装web server (安装nginx,参考http://blog.kenyang.net/2019/02/26/upgrade-nginx-to-latest-version-on-centos) 3、在域名提供商 name(或者cloudflare)进行DNS域名解析,进行请求中转。a)ping 域名(ping crf.codes)查看是否绑定成功。 4、修改nginx 配置文件 a)Web server 设定域名b)Location 配置index界面c)开放Linux系统防火墙d)访问crf.code http://crf.codes/ 运行结果域名提供商(name)配置dns 验证dns是否配置成功ping crf.codes,可以看到 修改nginx配置文件 server { listen 80; server_name crf.codes; #charset koi8-r; access_log /var/log/nginx/host.access.log main; location / { # root /usr/share/nginx/html; index index.html index.htm; proxy_pass http://127.0.0.1:8081/; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } 访问crf.codes

优秀的个人博客,低调大师

宜信开源|数据库审核软件Themis的规则解析与部署攻略

一、介绍 Themis是宜信公司DBA团队开发的一款数据库审核产品,可帮助DBA、开发人员快速发现数据库质量问题,提升工作效率。其名称源自希腊神话中的正义与法律女神。项目取此名称,寓意此平台对数据库质量公平判断,明察秋毫。 此平台可实现对Oracle、MySQL数据库进行多维度(对象结构、SQL文本、执行计划及执行特征)的审核,用以评估对象结构设计质量及SQL运行效率。可帮助DBA及开发人员,快速发现定位问题;并提供部分辅助诊断能力,提升优化工作效率。全部操作均可通过WEB界面进行,简单便捷。此外,为了更好满足个性化需求,平台还提供了扩展能力,用户可根据需要自行扩展。 Themis,是希腊正义与法律女神,以头脑清晰见称。项目采用此名称,寓意着平台可对数据库质量公平判断,明察秋毫之意。 1.1 功能概述 事后审核,自主优化部分放在二期实现。亦可在项目设计阶段引入,起到一部分事前审核的作用。 通过WEB界面完成全部工作,主要使用者是DBA和有一定数据库基础的研发人员。 可针对某个用户审核,可审核包括数据结构、SQL文本、SQL执行特征、SQL执行计划等多个维度。 审核结果通过WEB页面或导出文件的形式提供。 平台支持主流的Oracle、MySQL数据库,其他数据库放在二期实现。 尽量提供灵活定制的能力,便于日后扩展功能。 1.2 支持的数据库 MySQL(5.6及以上) Oracle(10g及以上) 1.3 审核维度 数据库结果(对象)=》指数据库对象,常见的表、分区、索引、视图、触发器等。 SQL文本(语句)=》指SQL语句文本本身。 SQL执行计划=》指数据库中SQL的执行计划。 SQL执行特征=》指语句在数据库上的真实执行情况。 1.4 实现原理 整个平台的基本实现原理很简单,就是将我们的审核对象(目前支持四种),通过规则集进行筛选。符合规则的审核对象,都是疑似有问题的。平台会将这些问题及关联信息提供出来,供人工甄别使用。由此可见,平台的功能强大与否,主要取决于规则集的丰富程度。平台也提供了部分扩展能力,方便扩展规则集。 1.5 平台架构 图中的方框部分,为平台的主要模块。底色不同的模块,表示当前的进度状态不同。虚线代表数据流,实线代表控制流。其核心为这几个模块: 数据采集模块。它是负责从数据源抓取审核需要的基础数据。目前支持从Oracle、MySQL抓取。 OBJ/SQL存储库。这是系统的共同存储部分,采集的数据和处理过程中的中间数据、结果数据都保存在这里。其核心数据分为对象类和SQL类。物理是采用的MongoDB。 核心管理模块。图中右侧虚线部分包含的两个模块:SQL管理和OBJ管理就是这部分。它主要是完成对象的全生命周期管理。目前只做了简单的对象过滤功能,因此还是白色底色,核心的功能尚未完成。 审核规则和审核引擎模块。这部分是平台一期的核心组件。审核规则模块是完成规则的定义、配置工作。审核引擎模块是完成具体规则的审核执行部分。 优化规则和优化引擎模块。这部分是平台二期的核心组件。目前尚未开发,因此为白色底色。 系统管理模块。这部分是完成平台基础功能,例如任务调度、空间管理、审核报告生成、导出等功能。 1.6 操作流程 二、环境搭建 本项目中会使用到mysql,mongo和redis,python支持2.6、2.7,暂不支持python3。 mysql用来存储pt-query-digest抓取的mysql的慢查询,mongo存储我们的规则、oracle的采集结果、执行job,解析结果集等,redis作为任务调度celery的队列。 在mysql的数据采集部分我们使用的是pt-query-digest工具。 2.1 依赖安装 新建用户 为了减少后面对supervisord.conf配置文件的修改,我们建议使用统一的用户进行安装 adduser themis-test su - themis-test 后面的操作除了virtualenv安装需要切换到root用户,其他的都默认在themis-test用户下安装 安装cx_Oracle依赖 由于在审核过程中需要连接oracle数据库,因此需要先安装cx_Oracle的依赖,参考:http://www.jianshu.com/p/pKz5K7 安装python依赖 首先安装virtualenv,参考链接:https://pypi.python.org/simple/virtualenv/,建议安装13.0.3或更新版本 如果联网不方便,或者在公司内网,可以从https://pan.baidu.com/s/1o7AIWlG下载压缩包,提取码:3sy3 压缩包里包括所有需要用到的依赖包 安装virtualenv tar -zxvf virtualenv-13.0.3.tar.gz cd virtualenv-13.1.0 python setup.py install 关于virtualenv的使用请参考:https://virtualenv.pypa.io/en/stable/ 安装其他依赖 首先初始化虚拟环境 virtualenv python-project --python=python2.7 source /home/themis-test/python-project/bin/activate 解释一下上面的命令:virtualenv的第二个参数python-project是我们建立的虚拟环境的名称,这个名称我们虽然可以随便定义,但是后面supervisor的配置中使用了此名称,建议使用默认的,大家如果对python比较熟悉,可以随意定义。后面我们指定了python的版本,--python可以不加,默认会使用系统自带的python版本构建虚拟环境,当有多个版本的python时,可以使用此命令指定版本。 下面使用source初始化虚拟环境,以后安装的包依赖等都会被装到/home/themis-test/python-project/home/themis-test/python2.7/lib/python2.7/site-packages这里。 如果可以联网,进入源代码目录使用如下命令 pip install -r requirement.txt 单独安装Pyh,下载地址:https://github.com/hanxiaomax/pyh unzip pyh-master.zip cd pyh-master python setup.py install 如果在局域网环境不方便联网请利用的上面网盘里提供的压缩包 pip install --no-index -f file:///home/themis-test/software -r requirement.txt file:///home/themis-test/software是压缩包解压的位置 2.2 配置文件介绍 下面以配置文件settings.py为例子说明需要的一些依赖 # # set oracle ipaddress, port, sid, account, password # ipaddres : port -> key ORACLE_ACCOUNT = { # oracle "127.0.0.1:1521": ["cedb", "system", "password"] } # set mysql ipaddress, port, account, password MYSQL_ACCOUNT = { "127.0.0.1:3307": ["mysql", "user", "password"] } # pt-query save data for mysql account, password PT_QUERY_USER = "user" PT_QUERY_PORT = 3306 PT_QUERY_SERVER = "127.0.0.1" PT_QUERY_PASSWD = "password" PT_QUERY_DB = "slow_query_log" # celery setting REDIS_BROKER = 'redis://:password@127.0.0.1:6379/0' # REDIS_BROKER = 'redis://:@127.0.0.1:6379/0' REDIS_BACKEND = 'redis://:password@127.0.0.1:6379/0' # REDIS_BACKEND = 'redis://:@127.0.0.1:6379/0' CELERY_CONF = { "CELERYD_POOL_RESTARTS": True } # mongo server settings MONGO_SERVER = "127.0.0.1" MONGO_PORT = 27017 # MONGO_USER = "sqlreview" MONGO_USER = "sqlreview" # MONGO_PASSWORD = "" MONGO_PASSWORD = "sqlreview" MONGO_DB = "sqlreview" # server port setting SERVER_PORT = 7000 # capture time setting CAPTURE_OBJ_HOUR = "18" CAPTURE_OBJ_MINUTE = 15 CAPTURE_OTHER_HOUR = "18" CAPTURE_OTHER_MINUTE = 30 ORACLE_ACCOUNT和MYSQL_ACCOUNT是我们需要审核的目标机器的帐号和密码,主要是在数据采集部分和对象类审核以及mysql的执行计划类审核部分会用到,因此该帐号因该具有较高的权限,为了安全在生产环境应该设置专有的帐号并设置专有的权限,或者加上一些ip的限制等。 PT_QUERY_USER、PT_QUERY_PORT、PT_QUERY_SERVER、PT_QUERY_PASSWD、PT_QUERY_DB是我们pt-query-digest工具解析目标机器的慢sql后需要存储到的mysql数据库的一些配置。 REDIS_BROKER、REDIS_BACKEND、CELERY_CONF是任务调度工具celery的配置选项。 MONGO_SERVER、MONGO_PORT、MONGO_USER、MONGO_PASSWORD、MONGO_DB是需要存储结果集的mongo的配置选项。 SERVER_PORT是web管理端监听的端口,不要使用9000和5555端口,这两个被分配给了文件下载服务器和flower管理工具。 CAPTURE_OBJ_HOUR、CAPTURE_OBJ_MINUTE、CAPTURE_OTHER_HOUR、CAPTURE_OTHER_MINUTE是针对oracle的数据采集模块需要设置的采集时间,根据自己的实际情况设置不同的时间即可,避开业务高峰期。 请按照相关说明配置该文件 2.3 规则导入 进入源代码目录,使用如下命令进行规则初始化 mongoimport -h 127.0.0.1 --port 27017 -u sqlreview -p password -d sqlreview -c rule --file script/rule.json 三、数据采集 数据采集分为oracle部分和mysql部分,oracle部分使用的是自己开发的一些脚本,mysql使用的是pt-query-digest工具。 数据采集的频率默认是一天一次,可以根据自己的需要进行修改。 oracle部分依赖于celery的任务调度,会用supervisor托管,pt-query-digest可以加到crontab里。 3.1 oracle部分 手动数据采集 手动采集oracle obj信息 配置data/capture_obj.json文件 { "module": "capture", "type": "OBJ", "db_type": "O", "db_server": "127.0.0.1", "db_port": 1521, "capture_date": "2017-02-28" } 只需要配置db_server和dbport选项,oracle的端口要求是1521,capture_date指定采集数据的日期,现在只支持按天采集 执行命令 python command.py -m capture_obj -c data/capture_obj.json 手动采集oracle other信息,包括plan、stat、text信息。 配置data/capture_other.json文件。 { "module": "capture", "type": "OTHER", "db_type": "O", "db_server": "127.0.0.1", "db_port": 1521, "capture_date": "2017-02-28" } 配置方式同上面的obj 执行命令 python command.py -m capture_obj -c data/capture_obj.json 手动采集数据一般用于初次采集,后面一般都会通过自动采集完成。 自动数据采集 配置settings.py文件里的ORACLE_ACCOUNT,该账号需要具有查询所有表的权限,即select any table。 ORACLE_ACCOUNT = { # oracle "127.0.0.1:1521": ["cedb", "system", "password"] } 配置调度时间 # capture time setting CAPTURE_OBJ_HOUR = "18" CAPTURE_OBJ_MINUTE = 15 CAPTURE_OTHER_HOUR = "18" CAPTURE_OTHER_MINUTE = 30 如果不对oracle数据库审核,可以不用配置 3.2 mysql部分 pt-query-digest使用 可以将慢日志集中到一个地方,再集中入库 也可以在每台mysql机器上安装pt-query-digest,再将解析结果推送到存储机器上。 本平台采用第二种方案 从 https://www.percona.com/get/pt-query-digest 下载并安装pt-query-digest,如果缺少依赖使用yum安装。 使用scirpt/pt_query_digest.sql初始化表结构,不要使用默认的表结构。 在目标机器上配置好script/pt-query-digest.sh脚本: pt-query-digest --user=root --password=password --review h=127.0.0.1,D=slow_query_log,t=global_query_review --history h=127.0.0.1,D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}='127.0.0.1:3306' and \$event->{client}=\$event->{ip}" slow.log $event->{hostname}='127.0.0.1:3306' 为被搜集慢日志的机器的ip地址和端口号。 主要是配置存储解析结果的mysql机器的帐号,密码,机器ip,端口号,以及慢日志的位置等。 运行pt-query-digest.sh脚本开始搜集mysql慢查询数据,后面可以将其加入定时任务,按固定时间段搜集。 四、规则解析 规则解析分为四块:对象类规则解析、文本类规则解析、执行计划类规则解析、统计信息类规则解析。每个模块都可以使用手动或自动的方式进行。 4.1 对象类规则解析 手动解析oracle对象类信息 配置data/analysis_o_obj.json文件 { "module": "analysis", "type": "OBJ", "db_server": "127.0.0.1", "db_port": 1521, "username": "schema", "db_type": "O", "rule_type": "OBJ", "rule_status": "ON", "create_user": "system", "task_ip": "127.0.0.1", "task_port": 1521 } 配置db_server、db_port、username、create_user、task_ip选项,其他的保持默认即可,username是需要审核的目标对象的名字。 python command.py -m analysis_o_obj -c data/analysis_o_obj.json 使用上面的命令开始采集obj数据 手动解析mysql对象类数据 配置data/analysis_m_obj.json文件 { "module": "mysql", "type": "OBJ", "db_server": "127.0.0.1", "db_port": 3306, "username": "schema", "db_type": "mysql", "rule_type": "OBJ", "rule_status": "ON", "create_user": "mysqluser", "task_ip": "127.0.0.1", "task_port": 3306 } 配置db_server、db_port、username、create_user、task_ip、db_port选项,其他的保持默认即可。 运行命令: python command.py -m analysis_m_obj -c data/analysis_m_obj.json oracle和mysql对象类规则是不需要依赖于采集的数据的,它是直接连接到数据库里进行查询的,由于有的库较大可能时间会比较久,建议在业务低峰期进行。 4.2 文本类规则解析 手动解析oracle文本类规则 配置data/analysis_o_text.json文件 { "module": "analysis", "type": "TEXT", "username": "schema", "create_user": "SYSTEM", "db_type": "O", "sid": "cedb", "rule_type": "TEXT", "rule_status": "ON", "hostname": "127.0.0.1", "task_ip": "127.0.0.1", "task_port": 1521, "startdate": "2017-02-23", "stopdate": "2017-02-23" } 配置sid、username、create_user、task_ip、hostname、startdate、stopdate选项,由于数据是按天采集的,因此暂时只支持startdate和stopdate保持一致,hostname和task_ip可以保持一致,其他的保持默认即可。 执行下面的命令即可以进行规则解析: python command.py -m analysis_o_plan -c data/analysis_o_plan.json 手动解析mysql文本类规则 配置data/oracle_m_text.json文件 "module": "analysis", "type": "TEXT", "hostname_max": "127.0.0.1:3306", "username": "schema", "create_user": "mysqluser", "db_type": "mysql", "rule_type": "TEXT", "rule_status": "ON", "task_ip": "127.0.0.1", "task_port": 3306, "startdate": "2017-02-21 00:00:00", "stopdate": "2017-02-22 23:59:00" } 配置username、create_user、taskip、taskport、hostname、hostname_max、startdate、stopdate选项,hostname和task_ip可以保持一致,其他的保持默认即可。 运行下面的命令即可以进行规则解析: python command.py -m analysis_m_text -c data/analysis_m_text.json 上面两步中的username为需要审核的对象。 4.3 执行计划类规则解析 oracle plan类型规则解析 配置data/analysis_o_plan.json文件 { "module": "analysis", "type": "SQLPLAN", "capture_date": "2017-02-23", "username": "schema", "create_user": "SYSTEM", "sid": "cedb", "db_type": "O", "rule_type": "SQLPLAN", "rule_status": "ON", "task_ip": "127.0.0.1", "task_port": 1521 } 主要是对capture_date,username, create_user, sid,db_type,rule_type,task_ip,task_port参数进行配置,type分为SQLPLAN,SQLSTAT,TEXT,OBJ四种类型,rule_type的类型同SQLPLAN,只不过一个是代表模块的类型,一个代表规则的类型,db_type分为"O"和“mysql”两种类型,分别代表oracle和mysql,capture_date为我们欠扁配置的数据的抓取日期。 python command.py -m analysis -c data/analysis_o_plan.json 运行上面的命令即可生成解析结果。 mysql plan规则解析 配置data/analysis_m_plan.json文件 { "module": "analysis", "type": "SQLPLAN", "hostname_max": "127.0.0.1:3306", "db_server": "127.0.0.1", "db_port": 3306, "username": "schema", "db_type": "mysql", "rule_status": "ON", "create_user": "mysqluser", "task_ip": "127.0.0.1", "rule_type": "SQLPLAN", "task_port": 3306, "startdate": "2017-02-21 00:00:00", "stopdate": "2017-02-22 23:59:00" } type类型的含义同上面oracle,hostname_max为mysql的ip:端口号的形式,每一个hostname_max代表一个mysql实例,startdate和stopdate需要加上时、分、秒,这一点同oracle不大一样。 python command.py -m analysis -c data/analysis_m_plan.json 然后运行上面的命令进行mysql的plan的规则解析。 4.4 执行特征类规则解析 oracle stat类型规则解析 配置data/analysis_o_stat.json文件 { "module": "analysis", "type": "SQLSTAT", "capture_date": "2017-02-23", "username": "schema", "create_user": "SYSTEM", "sid": "cedb", "db_type": "O", "rule_type": "SQLSTAT", "rule_status": "ON", "task_ip": "127.0.0.1", "task_port": 1521 } 配置sid、username、create_user、task_ip、capture_date选项,其他保持默认即可。 运行命令: python command.py -m analysis_o_stat -c data/analysis_o_stat.json 进行数据采集。 mysql stat类型规则解析 配置文件data/analysis_m_text.json { "module": "analysis", "type": "SQLSTAT", "hostname_max": "127.0.0.1:3306", "db_server": "127.0.0.1", "db_port": 3306, "username": "schema", "db_type": "mysql", "rule_status": "ON", "create_user": "mysqluser", "task_ip": "127.0.0.1", "rule_type": "SQLSTAT", "task_port": 3306, "startdate": "2017-02-21 00:00:00", "stopdate": "2017-02-22 23:59:00" } 配置username、create_user、task_ip、task_port、hostname、hostname_max、startdate、stopdate选项,hostname和task_ip可以保持一致,其他的保持默认即可。 运行命令: python command.py -m analysis_m_text -c data/analysis_m_text.json 进行数据采集。 4.5 自动规则解析 上面介绍的手动规则解析都是可以进行测试,或者在一些特殊情况下使用,大部分情况我们会使用自动规则解析。 自动规则解析我们使用celery来完成,关于celery 的使用,请参考http://docs.celeryproject.org/en/master/getting-started/first-steps-with-celery.html。 下面是常用的一些关于celery的命令: 开启规则解析 celery -A task_other worker -E -Q sqlreview_analysis -l info 开启任务导出 celery -A task_exports worker -E -l info 开启obj信息抓取 celery -A task_capture worker -E -Q sqlreview_obj -l debug -B -n celery-capture-obj 开启flower celery flower --address=0.0.0.0 --broker=redis://:password@127.0.0.1:6379/ 开启plan、stat、text抓取 celery -A task_capture worker -E -Q sqlreview_other -l info -B -n celery-capture-other 最后我们会将规则解析都加入到supervisor托管,然后通过web界面生成任务,然后用celery进行调度,通过flower查看任务执行状态。 关于具体使用请参考supervisor的配置。 五、任务导出 5.1 手动任务导出 配置data/export.json文件 { "module": "export", "type": "export", "task_uuid": "08d03ec6-f80a-11e6-adbc-005056a30561", "file_id": "08d03ec6-f80a-11e6-adbc-005056a30561" } 配置task_uuid和file_id选项,这是任务的唯一标志,可以通过从mongo中sqlreview库中job集合查看,然后运行: python command.py -m export -c data/export.json 进行手动任务导出,会生成离线的html压缩包,保存在task_export/downloads下,可以直接解压,然后通过浏览器打开查看报告。 5.2 自动任务导出 通过在celery配合supervisor托管来实现,具体可参考supervisor的配置。 六、web管理端 6.1 手动开启web管理端 执行如下命令 python command.py -m web -c data/web.json 访问 http://127.0.0.1:7000 即可打开管理端 七、supervisor配置 7.1 supervisor配置 ;web管理端开启 [program:themis-web] command=/home/themis-test/python-project/bin/python command.py -m web -c data/web.json autostart=true redirect_stderr=true stdout_logfile=tmp/themis_web.log loglevel=info ;开启文件下载服务器 [program:themis-download] command=/home/themis-test/python-project/bin/python task_export/file_download.py autostart=true redirect_stderr=true stdout_logfile=tmp/themis_download.log loglevel=info ;开启任务导出模块 [program:themis-export] command=/home/themis-test/python-project/bin/celery -A task_exports worker -E -l info autostart=true redirect_stderr=true stdout_logfile=tmp/themis_export.log loglevel=info ;开启规则解析模块 [program:themis-analysis] command=/home/themis-test/python-project/bin/celery -A task_other worker -E -Q sqlreview_analysis -l info autostart=true redirect_stderr=true stdout_logfile=tmp/themis_analysis.log loglevel=info ;开启obj信息抓取模块 [program:themis-capture-obj] command=/home/themis-test/python-project/bin/celery -A task_capture worker -E -Q sqlreview_obj -l debug -B -n celery-capture-obj autostart=true redirect_stderr=true stdout_logfile=tmp/themis_capture_obj.log loglevel=info ;开启plan、stat、text信息抓取模块 [program:themis-capture-other] command=/home/themis-test/python-project/bin/celery -A task_capture worker -E -Q sqlreview_other -l info -B -n celery-capture-other autostart=true redirect_stderr=true stdout_logfile=tmp/themis_capture_other.log loglevel=info ;celery的任务管理模块,去掉前边的";"即可开启,需要配置redis的连接方式 ;[program:themis-flower] ;command=/home/themis-test/python-project/bin/celery flower --address=0.0.0.0 --broker=redis://:password@127.0.0.1:6379/0 ;autostart=true ;redirect_stderr=true ;stdout_logfile=tmp/themis_flower.log ;loglevel=info 注意:如果前边建立的用户不同或者使用了不同的目录,需要将这个文件里的/home/themis-test/python-project/替换为自己的路径。 supervisor常用命令 开启supervisor supervisord -c script/supervisord.conf 重载supervisor supervisorctl -u sqlreview -p sqlreview.themis reload 进入supervisor管理控制台,这里的-u,-p代表supervisorctl的用户名和密码,在supervisord.conf中配置 supervisorctl -u username -p password 参考:http://www.supervisord.org/ 八、内置规则说明 平台的核心就是规则。规则是一组过滤条件的定义及实现。规则集的丰富程度,代表了平台的能力。平台也提供了扩展能力,用户可自行定义规则。 从分类来看,规则可大致分为几类。 8.1 规则分类 从数据库类型来区分,规则可分为Oracle、MySQL。不是所有规则都区分数据库,文本类的规则就不区分。 从复杂程度来区分,规则可分为简单规则和复杂规则。这里的简单和复杂,实际是指规则审核的实现部分。简单规则是可以描述为mongodb或关系数据库的一组查询语句;而复杂规则是需要在外部通过程序体实现的。 从审核对象角度来区分,规则可分为对象类、文本类、执行计划类和执行特征类。 8.2 规则参数 规则可以包含参数。例如:执行计划规则中,有个是大表扫描。这里就需要通过参数来限定大表的定义,可通过物理大小来指定。 8.3 规则权重及阀值 权重 权重,代表违反规则,一次扣几分。可根据自身情况进行调节。 阀值 阀值,代表违反规则的扣分上限。这里主要是为了避免违反单一规则过多,导致忽略了其他规则。 规则权重及扣分,最终会累积为一个总的扣分,平台会按百分制进行折算。通过这种方式,可起到一定的量化作用。 8.4 规则_对象类(Oracle部分) 8.5 规则_对象类(MySQL部分) 8.6 规则_执行计划类(Oracle部分) 8.7 规则_执行计划类(MySQL部分) 8.8 规则_执行特征类(Oracle部分) 8.9 规则_执行特征类(MySQL部分) 8.10 规则_文本类 九、常见问题 主机名称不一致,导致cx_Oracle出错。 celery与flower版本不一致,导致flower不能启动,升级flower到0.8.1以上。 mysql5.7不能初始化datetime默认类型为(DEFAULT '0000-00-00 00:00:00)。 mongodb文档最大插入数据有限制,导致生成结果时插入文档失败。 在oracle获取用户的时候,有的系统可能会将用户建到users下,因此需要将 NOT IN ('USERS', 'SYSAUX'))改成 NOT IN ('SYSAUX')) 文件位置:capture/sql.py webui/utils/f_priv_db_user_list.py 有些情况下需要安装python-devel,centos安装 yum install python-devel mysqldb安装问题参考:http://blog.csdn.net/wklken/article/details/7271019 十、异常处理 程序中间出了差错可以通过开启flower来查看,或者通过手工执行的方式进行查看代码。 flower的开启可以通过在supervisor中配置或者 ;celery的任务管理模块,去掉前边的";"即可开启,需要配置redis的连接方式 ;[program:themis-flower] ;command=/home/themis-test/python-project/bin/celery flower --address=0.0.0.0 --broker=redis://:password@127.0.0.1:6379/0 ;autostart=true ;redirect_stderr=true ;stdout_logfile=tmp/themis_flower.log ;loglevel=info 也可以手工开启: celery flower --address=0.0.0.0 --broker=redis://:password@127.0.0.1:6379/0 不过都需要配置redis认证选项。 十一、加入开发 有问题可以直接在 https://github.com/CreditEaseDBA/Themis/issues 提出。 来源:宜信技术学院

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册