使用准备
前提条件与使用事项
- 数据库状态正常,并且用户已将数据目录写入环境变量,并以PGDATA命名。
- 使用登录到数据库宿主机上的Linux用户,需要将$GAUSSHOME/bin添加到PATH环境变量中,即能够直接运行gsql、gs_guc、gs_ctl等数据库运维工具。
- Python版本建议为Python3.6及以上,且运行环境中已经安装相应依赖,并能够正常启动调优程序。
- 本工具由Agent和Detector组成,Agent和Detector之间通过’http’或者’https’方式传递数据,因此需要保证Agent服务器和Detector服务器之间能够正常通信。
- Detector模块运行server和monitor服务, 需要分别启动。
- 如果使用’https’方式进行通信,需要准备CA证书以及Agent和Detector的证书和密钥,并分别放入项目根目录certificate下的ca、agent、server中,同时将密钥加密密码放入certificate的pwf中,并将其权限设置为600,防止其他用户进行读写操作。用户也可以使用share中的脚本生成证书和密钥。
原理简介
图1 anomaly_detection结构图
anomaly_detection是一个独立于数据库内核之外的工具,其结构如图1所示,anomaly_detection主要由agent和detector模块组成:
- agent:数据代理模块,由Source、Channel以及Sink组成。部署在数据库环境上的,用于采集数据库中的指标,并通过http或者https方式将其传送给远端检测器模块。
- detector:检测器模块,负责收集Agent推送的数据并存储,同时该模块基于时序预测和异常检测等算法对数据库指标进行监控和异常检测,并以日志的形式通知用户。
anomaly_detection的运行和安装方法
- 切换到anomaly_detection目录下。对于openGauss社区代码来说,该路径在openGauss-server/src/gausskernel/dbmind/tools/anomaly_detection. 对于已经安装的数据库系统,则该源代码路径为 $GAUSSHOME/bin/dbmind/anomaly_detection.
在当前目录下可以看到 requirements.txt 等文件,通过pip包管理工具根据该 requirements.txt 文件安装依赖:
pip install -r requirements.txt
安装成功后可执行main.py. 以获取帮助信息为例,则可以执行:
cd anomaly_detection # 切换到 main.py 入口文件所在的目录
python main.py --help # 可以直接通过该命令执行获取帮助的动作,其他功能使用方法类似
anomaly_detection的配置文件说明
anomaly_detection 在运行前需要加载a-detection.conf和metric_task.conf两个配置文件,, 可以通过** python main.py –help **命令查看配置文件路径:
a-detection.conf:该配置文件包含agent、server、database、security、forecast、log六个section,参数解释如下:
# agent端参数配置
[agent]
# agent端收集数据的时间间隔,单位:秒
source_timer_interval = 1
# agent端发送数据给detector端的时间间隔,单位:秒
sink_timer_interval = 1
# agent端缓冲队列的长度
channel_capacity = 300
# 通信方式配置
[security]
# tls=True, 将使用https通信方式,用户必须按照以下路径放入证书和密钥,
# 可以使用share脚本下的gen_ca_certificate.sh 生成ca证书,使用gen_certificate.sh
# 生成服务器证书和密钥,同时将密钥加密密码写入certificates的pwf中
# tls=False,将使用http通信方式,不用配置以下证书和密钥的路径
tls = False
# ca证书路径
ca = ./certificate/ca/ca.crt
# detector端证书路径
server_cert = ./certificate/server/server.crt
# detector端密钥路径
server_key = ./certificate/server/server.key
# agent端证书路径
agent_cert = ./certificate/agent/agent.crt
# agent端密钥路径
agent_key = ./certificate/agent/agent.key
# 数据库参数配置
[database]
# 数据库存放路径
database_path = ./data/metric.db
# 数据库单表最大行数,防止数据量太大导致磁盘空间不足
max_rows = 20000
# 数据库表刷新频率,此处表述没插入1000行便刷新表,将大于max_rows的旧数据刷掉,存放新数据
max_flush_cache = 1000
# server参数配置
[server]
# detector端的IP地址
host = 127.0.0.1
# detector端的侦听地址
listen_host = 0.0.0.0
# detector端的侦听端口,需要保证该端口没有被占用
listen_port = 8080
# 预测算法配置,默认包含'auto_arima'和‘fbprophet’两种算法
[forecast]
# 时序预测算法,默认是arima算法
predict_alg = auto_arima
# 日志存放路径
[log]
# 日志存放位置
log_dir = ./log
metric_task.conf:该配置文件包含所有监控指标的参数,以disk_space为例:
[disk_space]
# 指标下限值(用于监控报警)
minimum = 20
# 指标上限值(用于监控报警)
maximum = 100
# 预测时训练数据长度,支持整数或者整数加时间单位的格式,如果为整数,
# 则取对应大小长度的训练数据,如果为整数加时间单位,则表示取对应时间长度的训练数据,
# 下面的‘100S’指取最近100秒的数据作为训练数据
data_period = 100S
# 算法预测时间间隔,此处表述每100S预测一次
forecast_interval = 100S
# 算法预测周期长度,此处表示每次预测未来60S数据
forecast_period = 60S
说明: - 支持的时间单位: ‘S’ -> second, 秒 ‘M’ -> minute, 分 ‘H’ -> hour,小时 ‘D’ -> day,天 ‘W’ -> week,周 - minimum和maximum至少提供一个,不能都不提供。 - data_period支持整数或整数加时间单位(如:100、100S)。 - 建议参数配置的时候,保证训练数据长度大于预测长度,否则预测效果会受影响。