• zabbix4.4监控案例之Oracle11G监控


    zabbix4.4监控案例之Oracle11G监控

    今天我们来讲讲如何通过zabbix4.4监控Oracle数据库、这里我们需要使用到一个监控插件:Orabbix。

    1、什么是Orabbix?

    Orabbix是一个旨在与Zabbix Enterprise Monitor配合使用的插件,可提供针对Oracle数据库的多层监视,性能和可用性报告以及度量以及服务器性能指标。 它提供了一种从众多Oracle实例获取数据的有效机制,并反过来将此信息提供给Zabbix服务器以用于监视和性能指标。然后,您可以利用Zabbix的报告功能来收集所有数据,并为利益相关者提供诸如图表和服务水平协议指标之类的分析。 当前的发行版包含一组预定义的模板,这些模板合并了初始部署中的警报和图形功能。但是,可以根据您的需求和数据/监视要求进行微调。

    Orabbix官方网站:http://www.smartmarmot.com/

    Orabbix官方文档:http://www.smartmarmot.com/wiki/index.php?title=Orabbix

    Orabbix架构图

    img

    Orabbix是 SmartMarmot 的监控插件解决方案、当然 SmartMarmot 还提供多种数据库监控插件、例如:DBforBIX;Orabbix;MySQLBix;PostBIX。有兴趣的小伙伴可以去 SmartMarmot 的官方网站自行学习了解。说了这么多、那么Orabbix到底能监控哪些指标呢?

    Orabbix监控指标:

    • DB版本(即软件包的有效性);
    • 归档(带有趋势分析的归档日志生成);
    • 事件等待(文件I/O、单块读取、多块读取、直接路径读取、SQLNet消息、控制文件I/O、日志写入);
    • 命中率(对触发器、表/过程、SQL区域、主体的命中率);
    • 逻辑I/O(服务器在逻辑I/O上的性能:当前读、一致读、块更改);
    • 物理I/O(重做写、数据文件写、数据文件读);
    • PGA;
    • SGA(特别是;固定缓冲区,Java池,大池,日志缓冲区,共享池缓冲缓存);
    • 共享池(池字典缓存,池空闲内存,库Chache, SQL区域,MISC);
    • 引脚命中率(Oracle库缓存引脚由库缓存争用引起,库缓存是用来存储SQL可执行文件以供重用的区域);
    • 会话/过程
    • 会话(活动会话、非活动会话、系统会话)
    • DBSize/DBFileSize(数据库实际使用空间和文件大小的DBSize)

    注:我们无需安装任何类型的Oracle客户端即可使用Orabbix。 Orabbix使用Java对象和连接字符串连接到Oracle数据库,因此不需要在Zabbix服务器上安装Oracle客户端。

    img

    2、环境检查

    在安装之前需要确保zabbix server端已经安装了JRE环境、可以使用java命令识别。如果没有安装的小伙伴请自行百度安装(这里必须安装低版本的Java、具体原因后面会详细说明)。

    img

    没有安装的同学可以通过下面的命令进行安装:

    yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -y
    
    Bash

    ### 3、Orabbix安装

    我们首先去zabbix server服务器上创建orabbix插件目录 /opt/orabbix。然后我们去 orabbix 官方网站下载 orabbix 安装包到 /opt/orabbix 目录并解压。下载地址(最新版本orabbix-1.2.3.zip):http://www.smartmarmot.com/product/orabbix/download/ 。解压完成之后我们给 orabbix 目录进行授权

    1、创建/opt/orabbix目录
    mkdir -p /opt/orabbix
    2、下载orabbix安装文件到/opt/目录并解压文件
    wget https://jaist.dl.sourceforge.net/project/orabbix/orabbix-1.2.3.zip
    
    3、解压文件到/opt/orabbix
    unzip -o orabbix-1.2.3.zip -d /opt/orabbix/
    
    4、拷贝orabbix模板配置文件
    cp /opt/orabbix/conf/config.props.sample /opt/orabbix/conf/config.props
    
    5、拷贝orabbix启动文件并授权
    cp /opt/orabbix/init.d/orabbix /etc/init.d/
    chmod u+x /etc/init.d/orabbix
    chmod u+x /opt/orabbix/run.sh
    
    Bash

    4、增加Oracle用户权限

    orabbix的配置先告一段落、我们来给zabbix配置一个Oracle授权用户:

    # 创建Oracle监控账号
    CREATE USER ZABBIX
    IDENTIFIED BY <REPLACE WITH PASSWORD> # 修改为自己的密码(Oracle禁止使用特殊字符)
    DEFAULT TABLESPACE SYSTEM
    TEMPORARY TABLESPACE TEMP
    PROFILE DEFAULT
    ACCOUNT UNLOCK;
    
    # 赋予角色权限
    GRANT CONNECT TO ZABBIX;
    GRANT RESOURCE TO ZABBIX;
    ALTER USER ZABBIX DEFAULT ROLE ALL;
    
    # 赋予系统权限
    GRANT SELECT ANY TABLE TO ZABBIX;
    GRANT CREATE SESSION TO ZABBIX;
    GRANT SELECT ANY DICTIONARY TO ZABBIX;
    GRANT UNLIMITED TABLESPACE TO ZABBIX;
    GRANT SELECT ANY DICTIONARY TO ZABBIX;
    
    SQL

    当然、如果你想添加一个最小权限的Oracle授权用户、你也可以进行下面的操作(否则可以忽略):

    CREATE USER ZABBIX
    IDENTIFIED BY <REPLACE WITH PASSWORD> # 修改为自己的密码(Oracle禁止使用特殊字符)
    DEFAULT TABLESPACE USERS
    TEMPORARY TABLESPACE TEMP
    PROFILE DEFAULT
    ACCOUNT UNLOCK;
    GRANT ALTER SESSION TO ZABBIX;
    GRANT CREATE SESSION TO ZABBIX;
    GRANT CONNECT TO ZABBIX;
    ALTER USER ZABBIX DEFAULT ROLE ALL;
    GRANT SELECT ON V_ParseError: KaTeX parse error: Expected group after '_' at position 75: …ANT SELECT ON V_̲LOG_HISTORY TO ZABBIX;
    GRANT SELECT ON V_ParseError: KaTeX parse error: Expected group after '_' at position 88: …ANT SELECT ON V_̲LOCK TO ZABBIX;
    GRANT SELECT ON DBA_REGISTRY TO ZABBIX;
    GRANT SELECT ON V_ParseError: KaTeX parse error: Expected group after '_' at position 42: …ANT SELECT ON V_̲SYSSTAT TO ZABBIX;
    GRANT SELECT ON V_ParseError: KaTeX parse error: Expected group after '_' at position 39: …ANT SELECT ON V_̲LATCH TO ZABBIX;
    GRANT SELECT ON V_ParseError: KaTeX parse error: Expected group after '_' at position 37: …ANT SELECT ON V_̲SGASTAT TO ZABBIX;
    GRANT SELECT ON V_ParseError: KaTeX parse error: Expected group after '_' at position 42: …ANT SELECT ON V_̲PROCESS TO ZABBIX;
    GRANT SELECT ON DBA_DATA_FILES TO ZABBIX;
    GRANT SELECT ON DBA_TEMP_FILES TO ZABBIX;
    GRANT SELECT ON DBA_FREE_SPACE TO ZABBIX;
    GRANT SELECT ON V_$SYSTEM_EVENT TO ZABBIX;
    
    SQL

    注:这里我一直操作失败,在GRANT SELECT ON V_$INSTANCE TO ZABBIX这里提示未知命令、有知道的小伙伴请告诉我一下。

    如果你使用的是Oracle 11G或者以上的用户,你还需要做以下操作放开ACL访问控制,否则在监控过程中有部分内容无法显示:

    exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'ZABBIX', is_grant => true, privilege => 'resolve');
    exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
    commit;
    
    Bash

    img

    5、配置Orabbix

    编辑并修改 orabbix 配置文件 config.props :

    # Zabbix服务器配置
    #comma separed list of Zabbix servers
    ZabbixServerList=ZabbixServer # 修改为自己zabbix服务器的hostname
    ZabbixServer.Address=172.16.200.105 # 修改为自己zabbix服务器的IP地址
    ZabbixServer.Port=10051 # 修改为自己zabbix服务器的监听端口
    
    # Orabbix守护进程配置
    #pidFile
    OrabbixDaemon.PidFile=./logs/orabbix.pid # Orabbix Pid 文件路径
    #frequency of item's refresh
    OrabbixDaemon.Sleep=300 # Orabbix监控的刷新频率
    #MaxThreadNumber should be >= than the number of your databases
    OrabbixDaemon.MaxThreadNumber=100 # Orabbix的最大线程数量,此线程数量要大于等于数据库数量
    
    # 数据库连接池配置(全局配置)
    #put here your databases in a comma separated list
    DatabaseList=DB-Server # 指定数据库地址,多个数据库使用英文逗号隔开,此数据库地址需要与数据库机器上的 zabbix_agentd.conf中 Hostname 参数指定的一致
    
    #Configuration of Connection pool
    #if not specified Orabbis is going to use default values (hardcoded)
    #Maximum number of active connection inside pool
    DatabaseList.MaxActive=10 # 数据库连接池中的最大活跃数量(全局参数)
    #The maximum number of milliseconds that the pool will wait
    #(when there are no available connections) for a connection to be returned
    #before throwing an exception, or <= 0 to wait indefinitely.
    DatabaseList.MaxWait=100 # 数据库连接池中的最大等待的毫秒数(全局参数)
    DatabaseList.MaxIdle=1
    
    # 数据库实例配置
    #define here your connection string for each database
    DB-Server.Url=jdbc:oracle:thin:@172.16.200.240:1521:ORCL # 因为是通过jdbc连接,所以需要配置jdk环境,IP:端口:数据库实例
    DB-Server.User=zabbix # Orabbix监控oracle所用到的账号
    DB-Server.Password=12345678 # Orabbix监控oracle所用到的密码
    
    #Those values are optionals if not specified Orabbix is going to use the general values
    # 以下几个可对单个数据库进行配置,如果不配置则引用上面的数据库连接池全局配置
    DB-Server.MaxActive=10
    DB-Server.MaxWait=100
    DB-Server.MaxIdle=1
    DB-Server.QueryListFile=./conf/query.props # 指定查询SQL文件,由此文件来对oracle tablespace进行查询监控
    
    # 如果有多个数据库需要监控、可以在下面增加配置。当然、上面的DatabaseList也需要进行添加
    #DB2.Url=jdbc:oracle:thin:@server2.domain.example.com:<LISTENER_PORT>:DB2
    #DB2.User=zabbix
    #DB2.Password=zabbix_password
    #DB2.QueryListFile=./conf/query.props
    
    #DB3.Url=jdbc:oracle:thin:@server3.domain.example.com:<LISTENER_PORT>:DB3
    #DB3.User=zabbix
    #DB3.Password=zabbix_password
    #DB3.QueryListFile=./conf/query.props
    
    Bash

    6、添加ojdbc8.jar驱动

    orabbix默认使用的是ojdbc6.jar驱动,因为ojdbc6.jar驱动的认证协议对12c的认证协议不匹配,所以这里换成ojdbc8.jar驱动:

    ojdbc8.jar管网下载地址:https://www.oracle.com/database/technologies/appdev/jdbc-ucp-183-downloads.html(请选择和自己操作系统对应的版本)

    img

    下载完成之后我们把ojdbc8.jar包上传至服务器:

    # 把ojdbc8.jar文件移动到/opt/orabbix/lib/下面
    mv ojdbc8.jar /opt/orabbix/lib/
    
    # 删除/opt/orabbix/lib/目录下面的默认ojdbc6.jar
    rm -rf /opt/orabbix/lib/ojdbc6.jar
    
    # 给ojdbc8.jar授权
    chown -Rf root.root /opt/orabbix/lib/ojdbc8.jar
    chmod 644 /opt/orabbix/lib/ojdbc8.jar
    
    Bash

    7、重新编译orabbix-1.2.3.jar

    注:这里我卡了很长时间、最后通过下面的方式成功解决。

    重点来了:orabbix默认是不支持zabbix4+的,因为orabbix在传输数据的时候在数据包中没有加 Header包头 ,在zabbix4之前版本中zabbix server和zabbix proxy收到的数据包允许不加 Header包头,所以orabbix在zabbix4.0版本之前可以游刃有余的对orabbix监控,但是在zabbix4.0之后由于zabbix官方删除了对纯本文协议的支持(无Header)的支持,官方解释:Header and data length

    所以现在zabbix4.0之后版本必须强制添加 Header包头,对于没有添加 Header包头的数据包,Zabbix Server/Zabbix Proxy将会拒绝此数据报文,哪能怎么办呢,难道不能用orabbix监控oracle了吗? 在github上的一个 isuse 中,给出了解决方法,将重新编译orabbix-1.2.3.jar加入 Header 协议头的支持。 具体操作如下(这里我们必须要使用低版本的java、使用高版本的java编译完成之后会报错的):

    # 克隆代码到本地
    cd /usr/local/src/
    git clone https://github.com/snickerjp/orabbix.git
    
    # 将上面下载的orabbix压缩文件复制到克隆的orabbix目录内
    cd orabbix/
    cp -rf /opt/orabbix-1.2.3.zip ./
    mkdir orabbix-1.2.3
    unzip -o orabbix-1.2.3.zip -d orabbix-1.2.3/
    
    #拷贝orabbix-1.2.3.jar和lib库下的jar包到指定文件
    javac -cp "orabbix-1.2.3/orabbix-1.2.3.jar:orabbix-1.2.3/lib/*" com/smartmarmot/orabbix/Sender.java
    
    #创建构建目录
    mkdir -p ./build
    cp orabbix-1.2.3/orabbix-1.2.3.jar ./build
    
    #重新打包orabbix,去刚才创建的build目录下面操作如下
    jar -xvf orabbix-1.2.3.jar com
    cp ../com/smartmarmot/orabbix/Sender.class com/smartmarmot/orabbix/Sender.class
    cp: overwrite `com/smartmarmot/orabbix/Sender.class'? y
    jar -uf orabbix-1.2.3.jar com
    
    #将重新打包好的jar包覆盖掉之前的orabbix-1.2.3.jar
    cp -rf orabbix-1.2.3.jar /opt/orabbix/orabbix-1.2.3.jar
    cp: overwrite `/opt/orabbix/orabbix-1.2.3.jar'? y
    
    Bash

    8、启动orabbix

    接下来我们把orabbix加入开机启动即可、到这里orabbix的安装配置就已经完成了、下面我们去zabbix后台中添加监控项模板:

    # 加入开机启动
    chkconfig --add orabbix
    
    # 验证开机启动项
    chkconfig orabbix on
    
    # 启动orabbix
    systemctl start orabbix
    # 验证orabbix是否启动
    ps aux | grep orabbix
    
    # 这里我们也可以通过下面的命令检查orabbix日志是否报错
    tail -f /opt/orabbix/logs/orabbix.log
    
    Bash

    9、配置监控模板

    orabbix给我们提供了已经写好的监控模板文件、模板文件放在安装包的 /opt/orabbix/template 文件目录下面、我们直接把下面的四个监控模板文件导入zabbix即可(注意导入顺序):

    img

    • Orabbix_export_full.xml 全部导入(图表 监控项 触发器)
    • Orabbix_export_items.xml 监控项
    • Orabbix_export_graphs.xml 图表
    • Orabbix_export_triggers.xml 触发器

    导入完成之后、我们直接添加监控主机、关联Oracle模板(这里就不再详细讲了)。我这里使用的是测试库、没有什么数据、各位小伙伴可以直接忽略了。

    img

    img

    10、监控库大小

    好了、到这里我们就已经成功通过Orabbix插件监控了Oracle数据库啦。但是现在还有点小问题、orabbix默认情况下未开启数据库大小,我们需要去配置query.props,在proxy上修改/opt/orabbix/conf/query.props。

    #在QueryList=类目下增加dbfilesize,dbsize,如图所示:

    img

    然后在文件末尾添加对应的SQL语句,其实这是两条SQL语句,语法如下:

    • dbfilesize.Query=SQL语句
    • dbsize.Query=SQL语句

    SQL语句测试

    我们可以单纯把SQL语句拿出来,通过Zabbix用户登录Oracle数据库后执行,看能否得到结果,确认无误后再添加到此文件内,测试语句如下:

    #dbfilesize测试语句
    select to_char(sum(bytes/1024/1024/10), 'FM99999999999999990') retvalue from dba_data_files;
    
    #dbsize测试语句
    SELECT to_char(sum(  NVL(a.bytes/1024/1024/10 - NVL(f.bytes/1024/1024/10, 0), 0)), 'FM99999999999999990') retvalue
    FROM sys.dba_tablespaces d,
    (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a,
    (select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f
    WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+)
    AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY')  2    3    4    5    6  ;
    
    SQL

    加入语句

    加入到query.props语句 加入到query.props中的语句必须要使用 \ 换行符,否则会报错 “Error on DBEnquiry on query=dbfilesize on database=172.16.200.240 Error returned is java.lang.IllegalArgumentException: null value for key ‘dbfilesize’”

    dbfilesize.Query=select to_char(sum(bytes/1024/1024/10), 'FM99999999999999990') retvalue from dba_data_files
    
    dbsize.Query=SELECT to_char(sum(  NVL(a.bytes/1024/1024/10 - NVL(f.bytes/1024/1024/10, 0), 0)), 'FM99999999999999990') retvalue \
    FROM sys.dba_tablespaces d, \
    (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, \
    (select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f \
    WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) \
    AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY')
    
    Bash

    添加完成之后我们重启orabbix并查看orabbix日志、然后我们去zabbix就可以看到 DB Size和 DB File Size监控项监控数据库大小和数据库文件大小的图形数据了。

    img

    11、监控tablespace使用率

    oracle表空间使用率orabix默认是监控的,语句就在 /opt/orabbix/conf/query.props 中,在此文件中搜索 tbl_space ,即可看到对应的SQL:

    img

    这个SQL会返回满足93%的表空间信息,而对应这个监控项,orabbix也定义了触发器,因为监控项的返回值是文本,而没有满足条件的记录时返回字符串“none“,所以监控项对应的触发器会检查返回值开头是不是none,如果不是,就报警,这样,用户除了收到预警信息,还能从返回值的具体值中看到具体时哪个表空间快满了。 当然,大部分时间监控项会返回none,所以我们无法画出正常未满的表空间的空间占用时间曲线。只有表空间使用率超过93%时,我们才知道具体的占用情况。

    我们也可以把上面的SQL复制出来后,去掉换行符,然后通过Zabbix用户登录Oracle后来进程SQL语法检查。我们可以修改query.props中的表空间阈值为65%,然后使其报警。

  • 相关阅读:
    前端切图|点击按钮div变色
    当鼠标聚焦时输入框变色(focus事件实例)
    jedate-开始使用一款好用的时间插件
    jedate-开始使用一款好用的时间插件
    前端切图|点击按钮div变色
    当鼠标聚焦时输入框变色(focus事件实例)
    ajax实现简单的点击左侧菜单,右侧加载不同网页
    装饰者模式(Decorator、Compoment)(早餐销售装饰,动态添加职责)
    原型模式(Prototype)(对象、克隆广告邮件)
    hashcode
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/15423143.html
Copyright © 2020-2023  润新知