First, create a dedicated monitoring user in the Orracle database:
CREATE USER DB_MONITOR
IDENTIFIED BY <YOUR_PASSWORD>
DEFAULT TABLESPACE SYSTEM
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
-- Grant necessary roles
GRANT CONNECT TO DB_MONITOR;
GRANT RESOURCE TO DB_MONITOR;
ALTER USER DB_MONITOR DEFAULT ROLE ALL;
-- System privileges for monitoring
GRANT SELECT ANY TABLE TO DB_MONITOR;
GRANT CREATE SESSION TO DB_MONITOR;
GRANT SELECT ANY DICTIONARY TO DB_MONITOR;
GRANT UNLIMITED TABLESPACE TO DB_MONITOR;
For minimal privilege configuration:
CREATE USER DB_MONITOR
IDENTIFIED BY <YOUR_PASSWORD>
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT ALTER SESSION TO DB_MONITOR;
GRANT CREATE SESSION TO DB_MONITOR;
GRANT CONNECT TO DB_MONITOR;
ALTER USER DB_MONITOR DEFAULT ROLE ALL;
-- Specific table access grants
GRANT SELECT ON V_$INSTANCE TO DB_MONITOR;
GRANT SELECT ON DBA_USERS TO DB_MONITOR;
GRANT SELECT ON V_$LOG_HISTORY TO DB_MONITOR;
GRANT SELECT ON V_$PARAMETER TO DB_MONITOR;
GRANT SELECT ON SYS.DBA_AUDIT_SESSION TO DB_MONITOR;
GRANT SELECT ON V_$LOCK TO DB_MONITOR;
GRANT SELECT ON DBA_REGISTRY TO DB_MONITOR;
GRANT SELECT ON V_$LIBRARYCACHE TO DB_MONITOR;
GRANT SELECT ON V_$SYSSTAT TO DB_MONITOR;
GRANT SELECT ON V_$LATCH TO DB_MONITOR;
GRANT SELECT ON V_$PGASTAT TO DB_MONITOR;
GRANT SELECT ON V_$SGASTAT TO DB_MONITOR;
GRANT SELECT ON V_$PROCESS TO DB_MONITOR;
GRANT SELECT ON DBA_DATA_FILES TO DB_MONITOR;
GRANT SELECT ON DBA_TEMP_FILES TO DB_MONITOR;
GRANT SELECT ON DBA_FREE_SPACE TO DB_MONITOR;
GRANT SELECT ON V_$SYSTEM_EVENT TO DB_MONITOR;
For Oracle 11g databases, execute addtiional network ACL commands:
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'monitor_acl.xml',
description => 'Monitoring ACL',
principal => 'DB_MONITOR',
is_grant => true,
privilege => 'resolve'
);
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'monitor_acl.xml',
host => '*'
);
COMMIT;
END;
/
Verifying Local Connectivity
Test network resolution capability:
SELECT UTL_INADDR.GET_HOST_NAME('127.0.0.1') FROM DUAL;
Importing Orabbix Templates
Import the template files from the orabbix template directory into your Zabbix server.
Configuring Orabbix Server
Deploy orabbix on the monitoring server:
/etc/init.d/orabbix
/opt/orabbix/run.sh
Update the hosts file with server information:
192.168.205.156 monitoring-server-01
Configure the orabbix properties file:
vi /opt/orabbix/conf/config.props
# Zabbix server configuration
ZabbixServerList=monitoring-server-01
monitoring-server-01.Address=192.168.xxx.xxx
monitoring-server-01.Port=10051
# Database monitoring targets
DatabaseList=prod-db-01,test-db-02
test-db-02.Url=jdbc:oracle:thin:@192.168.xxx.xxx:1521:orcl
test-db-02.User=db_monitor
test-db-02.Password=db_monitor
test-db-02.MaxActive=10
test-db-02.MaxWait=100
test-db-02.MaxIdle=1
test-db-02.QueryListFile=./conf/query.props
Start and stop the orabbix service:
/etc/init.d/orabbix start
/etc/init.d/orabbix stop
Client Configuration
Install and configure Zabbix Agent 2 on monitored hosts:
rpm -ivh zabbix-agent2-6.0.4-1.el7.x86_64.rpm
Edit the agent configuration file:
vi /etc/zabbix/zabbix_agent2.conf
Server=monitoring-server-01
ListenPort=10050
Restart the agent service:
systemctl restart zabbix-agent2.service