首页 数据库

在日常生活中,我们会遇到搭建达梦数据库内网监控程序agent以接入网监平台kafuka,这篇文章讲解有关agent监控的搭建:

说明:

1、HA环境下将agent部署在两台数据库服务器中,部署完成后将monitor_kafka.sh加入到计划任务,由monitor_kafka.sh脚本控制并判断判断数据库是否切机并在脚本中调用dm_kafka.sh脚本启动agent服务。

数据库监控部署操作步骤

将数据库监控程序拷贝到HA环境中的两台数据库服务器中,并调整程序文件的用户与组,与现场部署的应用用户一致(dmdba.dinstall)。查看java运行环境,及java安装

分割线

注意事项:
1.先查看现场JAVA本版本,如果低于1.8需要安装java1.8环境;
Java1.8安装步骤:
(1).将java1.8压缩包jdk1.8.0_121.zip解压到服务器/usr/java/下
(2)配置环境变量,现场使用xhell远程连接root修改/etc/profile文件source生效后,开启新窗口使用root执行java -version可能存在为调用不成功的情况,显示还是调用的老版本1.6,解决办法:使用普通用户dmdba修改家目录下.bashrc文件source生效后再打开新窗口使用dmdba用户执行java -version调用成功。(可以去官网下载jdk1.8)
/etc/profile和.bashrc添加内容:

export JAVA_HOME=/usr/java/jdk1.8.0_121
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

2.需要在dm监控程序的运行机器的/etc/hosts下加上网监平台kafka机器的主机名和IP
3.需要使用root用户给dmdba用户添加crontab,每分钟执行一次检测dmserverd和agent的在线情况
添加命令:

crontab -u dmdba -e
*/1 * * * * sh /home/dmdba/dm/dm_jk/monitor_kafka.sh

4.版本包分为两个
DM7数据库安全监视软件v2.1-release-20200923.zip、达梦数据库安全监视软件-v2.1-launchKey
解压DM7数据库安全监视软件v2.1-release-20200923.zip后会出现两个目录:DM7KafkaInspector和DMKafkaIniCreater需要将DM7KafkaInspector下lib里的jar包cp到DMKafkaIniCreater中,将launch.key文件cp到DMKafkaIniCreater中。

分割线

2、编辑监控程序的配置文件init_conf.txt ,将“目标数据库基本配置项目”和“kafka集群连接配置”进行配置,相关告警信息的参数与用户沟通后,根据实际现场情况进行设置;dm7配置项目如下:

##全部配置项目格式为 key=value,“#”号后面内容为注释;<<<<<<和>>>>>>对所包围的文字起保护作用,避免#及其后的字符被忽略
##安全校验
    CHECK_FILE = ./DM7KafkaInspector.jar                        #Linux环境中./DM7KafkaInspector.jar;Windows环境中.\DM7KafkaInspector.jar
    CHECK_CODE = 校验码        #DM7KafkaInspector.jar的检验编码(md5值)

##目标数据库基本配置项目
    #SVC_SERVER_NAME = 测试                    #主备数据库系统服务名(单机版须注释掉)
    SERVER_IP = 测试                            #数据库IP地址(请酌情设置)
    SERVER_PORT = 测试                                    #数据库端口号(请酌情设置)
    LOGIN_NAME = SYSDBA                                    #数据库登陆用户名(请酌情设置)
    <<<<<< LOGIN_PASSWORD = SYSDBA >>>>>>        #数据库登陆密码(请酌情设置)

##kafka集群连接配置
    KAFKA_TOPIC = pf_database                                     #kafka消息主题topic配置(请酌情设置)
    KAFKA_BROKER_LIST=测试:9092                    #kafka集群代理IP端口号列表(请酌情设置 格式为ip:port,ip:port)

##kafka消息本地打印配置
    LOCAL_PRINT_MESSAGE = yes                              #是否在本地打印发送的kafka消息(调试时使用,请酌情设置,值为yes或no)
    LOCAL_LOG_MESSAGE = yes                                #是否在日志中记录详细运行信息(调试时使用,请酌情设置,值为yes或no)

##运行信息配置("开关"项控制是否监控该项指标)

    #1.数据库CPU使用率监控 运行信息配置
        PERIOD_CPU = 1分钟                                       #数据库CPU使用率监控上报周期(单位:小时、分钟)
        THRESHOLD_CPU = 0%                                   #数据库CPU使用率监控上报阈值(单位: %)
        ENABLE_CPU = 是                                        #开关(是、否)
    
    #2.数据库内存使用率监控 运行信息配置
        PERIOD_MEMORY = 1分钟                                  #数据库内存使用率监控上报周期(单位:小时、分钟)
        THRESHOLD_MEMORY = 10%                               #数据库内存使用率监控上报阈值(单位: %)
        ENABLE_MEMORY = 是                                    #开关(是、否)
    
    #3.数据库磁盘信息-数据文件监控 运行信息配置
        PERIOD_DATA_FILE = 1分钟                               #数据文件监控上报周期(单位:小时、分钟)
        THRESHOLD_DATA_FILE = 15G                           #数据文件监控上报阈值(单位: T、G;所在磁盘free空间低于该值时发送告警)
        THRESHOLD_DATA_FILE_RATIO = 30%                       #数据库文件使用率监控上报阈值(单位: %)
        ENABLE_DATA_FILE = 是                                #开关(是、否)
    
    #4.数据库磁盘信息-归档文件监控 运行信息配置
        PERIOD_ARCHIVE_FILE = 1分钟                           #归档文件监控上报周期(单位:小时、分钟)
        THRESHOLD_ARCHIVE_FILE = 15G                           #归档文件监控上报阈值(单位: T、G;所在磁盘free空间低于该值时发送告警)
        THRESHOLD_ARCHIVE_FILE_RATIO = 30%                   #归档文件使用率监控上报阈值(单位: %)
        ENABLE_ARCHIVE_FILE = 是                                #开关(是、否)
    
    #5.数据库磁盘信息-备份文件监控 运行信息配置
        PERIOD_BACKUP_FILE = 1分钟                               #备份文件监控上报周期(单位:小时、分钟)
        THRESHOLD_BACKUP_FILE = 15G                           #备份文件监控上报阈值(单位: T、G;所在磁盘free空间低于该值时发送告警)
        THRESHOLD_BACKUP_FILE_RATIO = 30%                   #备份文件使用率监控上报阈值(单位: %)
        LIST_BACKUP_PATH = /dbbak/dmbak                                #备份文件根目录列表(分号隔开,标准路径格式)
        ENABLE_BACKUP_FILE = 是                                #开关(是、否)
    
    #6.数据库表空间使用情况监控 运行信息配置
        PERIOD_TABLESPACE = 1分钟                               #数据库表空间使用情况监控上报周期(单位:小时、分钟)
        THRESHOLD_TABLESPACE = 15G                           #数据库表空间使用情况监控上报阈值(单位: T、G)
        ENABLE_TABLESPACE = 是                                #开关(是、否)
    
    #7.数据库连接使用情况监控 运行信息配置
        PERIOD_CONNECTION_STATUS = 1分钟                       #数据库连接使用情况监控上报周期(单位:小时、分钟)
        NUMBER_CONNECTION_STATUS_LOGIN_NAME = 20               #数据库连接使用情况监控上报连接最多的用户名个数
        ENABLE_CONNECTION_STATUS = 是                        #开关(是、否)
    
    #8.数据库运行时长监控 运行信息配置
        PERIOD_DATABASE_RUNTIME = 1分钟                       #数据库运行时长监控上报周期(单位:小时、分钟)
        ENABLE_DATABASE_RUNTIME = 是                            #开关(是、否)
    
    #9.数据库状态监控 运行信息配置
        PERIOD_DATABASE_STATUS = 1分钟                          #数据库状态监控上报周期(单位:小时、分钟)
        ENABLE_DATABASE_STATUS = 是                            #开关(是、否)
    
    #10.数据库操作信息监控 运行信息配置
        ENABLE_DATABASE_ACTION = 是                            #开关(是、否)
    
    #11.数据库用户信息变更信息监控 运行信息配置
        ENABLE_USER_PRIORITY_ACTION = 是                        #开关(是、否)
    
    #12.数据库非法访问-非授权IP访问数据库 运行信息配置
        PERIOD_UNAUTHORIZED_IP_ACCESS = 1分钟                  #非授权IP访问数据库监控上报周期(单位:小时、分钟)
        NUMBER_WHITE_IP = 1个                                #IP白名单个数
        WHITE_IP_1 = 127.0.0.1
        ENABLE_UNAUTHORIZED_IP_ACCESS = 是                    #开关(是、否)
    
    #13.数据库总表数量 运行信息配置
        PERIOD_TABLE_NUMBER = 1分钟                           #数据库总表数量监控上报周期(单位:小时、分钟)
        THRESHOLD_TABLE_NUMBER = 100                        #数据库总表数量监控上报阈值(单位: 个)
        ENABLE_TABLE_NUMBER = 是                                #开关(是、否)
    
    #14.数据库非法用户-非授权用户访问数据库 运行信息配置
        PERIOD_UNAUTHORIZED_USER_ACCESS = 1分钟                  #非授权用户访问数据库监控上报周期(单位:小时、分钟)
        NUMBER_WHITE_USER = 1个                                #USER白名单个数
        WHITE_USER_1 = SYSDBA
        ENABLE_UNAUTHORIZED_USER_ACCESS = 是                    #开关(是、否)
    
    #15.数据库非法访问-无效SQL 运行信息配置
        PERIOD_SQL_ERROR = 1分钟                              #无效SQL监控上报周期(单位:小时、分钟)
        ENABLE_SQL_ERROR = 是                                #开关(是、否)
    
    #16.危险操作-DROP DDL操作信息监控 运行信息配置
        PERIOD_DROP_ACTION = 1分钟                               #DROP DDL操作信息监控上报周期(单位:小时、分钟)
        ENABLE_DROP_ACTION = 是                                #开关(是、否)
    
    #17.危险操作-DELETE DML操作信息监控 运行信息配置
        PERIOD_DELETE_ACTION = 1分钟                           #DELETE DDL操作信息监控上报周期(单位:小时、分钟)
        NUMBER_BLACK_TABLE = 1个                                #TABLE黑名单个数
        BLACK_TABLE_1 = TABLE_SAMPLE                        #核心表名
        ENABLE_DELETE_ACTION = 是                            #开关(是、否)
    
    #18.危险操作-疑似CC攻击监控 运行信息配置
        PERIOD_SQL_CC = 1分钟                                   #疑似CC攻击监控上报周期(单位:小时、分钟)
        THRESHOLD_SQL_CC_CPU = 0%                           #疑似CC攻击监控上报-CPU使用率阈值(单位: %)
        THRESHOLD_SQL_CC_MEMORY = 0%                           #疑似CC攻击监控上报-MEMORY使用率阈值(单位: %)
        ENABLE_SQL_CC = 是                                    #开关(是、否)

##安全信息配置

    #1.数据库用户连续登录失败监控 安全信息配置
        TIMESPAN_USER_LOGIN = 1分钟                   #在该配置的一段时间内用户连续登陆失败将产生告警(单位:小时、分钟)
        NUMBER_USER_LOGIN_FAILURE = 2               #用户连续登陆失败达到配置次数将产生告警
        ENABLE_USER_LOGIN = 是                        #开关(是、否)
    
    #2.sql语句长时间未提交 安全信息配置
        TIMESPAN_SQL_SUBMIT = 1分钟                     #经过该配置的一段时间后尚未提交的SQL将被告警上报(单位:小时、分钟)
        ENABLE_SQL_SUBMIT = 是                        #开关(是、否)
    
    #3.数据计划任务执行失败 安全信息配置(无配置项)
        ENABLE_JOB_FAILURE = 是                        #开关(是、否)
    
    #4.sql语句执行时间异常 安全信息配置
        TIMESPAN_SQL_EXECUTION = 30秒                 #经过该配置的一段时间后尚未执行完毕的SQL将被告警上报(单位:分钟、秒)
        ENABLE_SQL_EXECUTION = 是                    #开关(是、否)
    
    #5.数据库脏页面占比情况监控 安全信息配置
        PERIOD_DIRTY_PAGE = 1分钟                       #数据库脏页面占比情况监控上报周期(单位:小时、分钟)
        THRESHOLD_DIRTY_PAGE = 20%                   #数据库表空间使用情况监控上报阈值(单位:%)
        ENABLE_DIRTY_PAGE = 是                        #开关(是、否)

##数据库配置项核查交互配置
    ENABLE_CONF_CHECK = 否                                #开关(是、否)(数据库配置项核查)
    #下述两项对应发送指令的IP、端口、topic
        KAFKA_TOPIC_CONSUMMER = pf_database                  #kafka消息主题topic配置(请酌情设置)
        KAFKA_BROKER_LIST_CONSUMER = 测试:9092        #kafka集群代理IP端口号列表(请酌情设置 格式为ip:port,ip:port)
    #下述两项对应接收核查结果的IP、端口、topic
        KAFKA_TOPIC_PRODUCER = pf_database                    #kafka消息主题topic配置(请酌情设置)
        KAFKA_BROKER_LIST_PRODUCER = 测试:9092       #kafka集群代理IP端口号列表(请酌情设置 格式为ip:port,ip:port)
    #读取核查指令周期
        PERIOD_DB_CONF_CHECK = 5秒                        #读取核查指令周期(单位:分钟、秒)

##日志管理参数配置
    TIMESPAN_LOG_RETAIN = 2                         #日志保留时长,过期日志自动删除(单位:天)
    THRESHOLD_LOG_DIR_SIZE = 1                         #日志文件夹占用磁盘空间大小上限,超过此上限,停止更新日志(单位:G)

3、用manager管理工具,连接到被监控的数据库,执行捕获ddl操作的脚本。(脚本在安装包中自带)
4、按照实际情况修改配置文件后,需计算运行文件的MD5值,将md5值配置到配置文件中,然后将配置文件进行加密,加密成功后,执行信息监控命令,具体命令如下:

DM7:
--Linux下执行命令参考
1. 计算校验编码
java -Djava.ext.dirs=./:./lib  -cp DMKafkaIniCreater.jar creater.IniCreater md5-7

2. 加密配置文件
java -Djava.ext.dirs=./:./lib -cp DMKafkaIniCreater.jar creater.IniCreater t2k-7 

3. 解密配置文件
java -Djava.ext.dirs=./:./lib -cp DMKafkaIniCreater.jar creater.IniCreater k2t-7 
4. 执行信息监控
java -Djava.ext.dirs=./:./lib -cp DM7KafkaInspector.jar com.dm7.kafka.Launcher

启动完成后,查看安装目录下的log文件夹中的日志内容,如果日志中开始记录告警信息,则部署成功,与平台工作人员进行确认告警信息收发情况,若能正常收取,则调试完成。
5、后台启动。前台启动调试完成后,执行如下命令,进行后台启动,查看告警信息采集情况。

setsid java -Djava.ext.dirs=./:./lib -cp DM7KafkaInspector.jar com.dm7.kafka.Launcher

三、影响范围
在进行部署数据库监控程序时,只需在数据库下创建一张表两个触发器,不用对数据库进行其他操作,不影响数据库的正常运行。
脚本内容:
dm_kafka.sh:

#! /bin/bash
cd /home/dmdba/dm/dm_jk/DMKafkaIniCreater
nohup java -Djava.ext.dirs=./:./lib -cp DM7KafkaInspector.jar com.dm7.kafka.Launcher  >/dev/null &
#setsid java -Djava.ext.dirs=./:./lib -cp DMK7afkaInspector.jar com.dm7.kafka.Launcher

monitor_kafka.sh

#!/bin/bash
#监控kafka监控进程是否在线
    pidcount=`ps cax -o pid,command | grep -w dmserver | grep -c dmserver`
    if [ $pidcount -eq 1 ]; 
        then
        kpidcount=`ps -ef|grep kafka|grep -c Xmx129M`
        if [ $kpidcount -eq 0 ]; 
            then
            sleep 5
            echo `date` "start kafka $1" >>/home/dmdba/dm/dm_jk/DMKafkaIniCreater/monitor_kafka.log
            cd /home/dmdba/dm/dm_jk
            ./dm_kafka.sh
            #sh /home/dmdba/dm/dm_jk/dm_kafka.sh
        fi
    fi

    pidcount=`ps cax -o pid,command | grep -w dmserver | grep -c dmserver`
    if [ $pidcount -eq 0 ]; 
    then
        kpidcount=`ps -ef|grep kafka|grep -c Xmx129M`
        if [ $kpidcount -eq 1 ]; 
            then
            sleep 5
            echo `date` "kill kafka $1" >>/home/dmdba/dm/dm_jk/DMKafkaIniCreater/monitor_kafka.log
            kafkapid=`ps -ef|grep kafka|grep Xmx129M|head -n 1|awk '{print $2}'`
            kill -9 $kafkapid
            
        fi
    fi

文章评论