1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
|
omoracle: Oracle Database Output Module
=======================================
**Module Name: omoracle**
**Author:**\ Luis Fernando Muñoz Mejías
<Luis.Fernando.Munoz.Mejias@cern.ch> - this module is currently
orphaned, the original author does no longer support it.
**Available since:**: 4.3.0, **does not work with recent rsyslog
versions (v7 and up). Use** :doc:`omlibdbi <omlibdbi>` **instead.**
An upgrade to the new interfaces is needed. If you would like
to contribute, please send us a patch or open a github pull request.
**Status:**: contributed module, not maintained by rsyslog core authors
**Description**:
This module provides native support for logging to Oracle databases. It
offers superior performance over the more generic
`omlibdbi <omlibdbi.html>`_ module. It also includes a number of
enhancements, most importantly prepared statements and batching, what
provides a big performance improvement.
Note that this module is maintained by its original author. If you need
assistance with it, it is suggested to post questions to the `rsyslog
mailing list <http://lists.adiscon.net/mailman/listinfo/rsyslog>`_.
From the header comments of this module:
::
This is an output module feeding directly to an Oracle
database. It uses Oracle Call Interface, a propietary module
provided by Oracle.
Selector lines to be used are of this form:
:omoracle:;TemplateName
The module gets its configuration via rsyslog $... directives,
namely:
$OmoracleDBUser: user name to log in on the database.
$OmoracleDBPassword: password to log in on the database.
$OmoracleDB: connection string (an Oracle easy connect or a db
name as specified by tnsnames.ora)
$OmoracleBatchSize: Number of elements to send to the DB on each
transaction.
$OmoracleStatement: Statement to be prepared and executed in
batches. Please note that Oracle's prepared statements have their
placeholders as ':identifier', and this module uses the colon to
guess how many placeholders there will be.
All these directives are mandatory. The dbstring can be an Oracle
easystring or a DB name, as present in the tnsnames.ora file.
The form of the template is just a list of strings you want
inserted to the DB, for instance:
$template TestStmt,"%hostname%%msg%"
Will provide the arguments to a statement like
$OmoracleStatement \
insert into foo(hostname,message)values(:host,:message)
Also note that identifiers to placeholders are arbitrary. You
need to define the properties on the template in the correct order
you want them passed to the statement!
Some additional documentation contributed by Ronny Egner:
::
REQUIREMENTS:
--------------
- Oracle Instantclient 10g (NOT 11g) Base + Devel
(if you´re on 64-bit linux you should choose the 64-bit libs!)
- JDK 1.6 (not neccessary for oracle plugin but "make" didd not finsished successfully without it)
- "oracle-instantclient-config" script
(seems to shipped with instantclient 10g Release 1 but i was unable to find it for 10g Release 2 so here it is)
====================== /usr/local/bin/oracle-instantclient-config =====================
#!/bin/sh
#
# Oracle InstantClient SDK config file
# Jean-Christophe Duberga - Bordeaux 2 University
#
# just adapt it to your environment
incdirs="-I/usr/include/oracle/10.2.0.4/client64"
libdirs="-L/usr/lib/oracle/10.2.0.4/client64/lib"
usage="\
Usage: oracle-instantclient-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs] [--static-libs]"
if test $# -eq 0; then
echo "${usage}" 1>&2
exit 1
fi
while test $# -gt 0; do
case "$1" in
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
case $1 in
--prefix=*)
prefix=$optarg
if test $exec_prefix_set = no ; then
exec_prefix=$optarg
fi
;;
--prefix)
echo $prefix
;;
--exec-prefix=*)
exec_prefix=$optarg
exec_prefix_set=yes
;;
--exec-prefix)
echo ${exec_prefix}
;;
--version)
echo ${version}
;;
--cflags)
echo ${incdirs}
;;
--libs)
echo $libdirs -lclntsh -lnnz10 -locci -lociei -locijdbc10
;;
--static-libs)
echo "No static libs" 1>&2
exit 1
;;
*)
echo "${usage}" 1>&2
exit 1
;;
esac
shift
done
=============== END ==============
COMPILING RSYSLOGD
-------------------
./configure --enable-oracle
RUNNING
-------
- make sure rsyslogd is able to locate the oracle libs (either via LD_LIBRARY_PATH or /etc/ld.so.conf)
- set TNS_ADMIN to point to your tnsnames.ora
- create a tnsnames.ora and test you are able to connect to the database
- create user in oracle as shown in the following example:
create user syslog identified by syslog default tablespace users quota unlimited on users;
grant create session to syslog;
create role syslog_role;
grant syslog_role to syslog;
grant create table to syslog_role;
grant create sequence to syslog_role;
- create tables as needed
- configure rsyslog as shown in the following example
$ModLoad omoracle
$OmoracleDBUser syslog
$OmoracleDBPassword syslog
$OmoracleDB syslog
$OmoracleBatchSize 1
$OmoracleBatchItemSize 4096
$OmoracleStatementTemplate OmoracleStatement
$template OmoracleStatement,"insert into foo(hostname,message) values (:host,:message)"
$template TestStmt,"%hostname%%msg%"
*.* :omoracle:;TestStmt
(you guess it: username = password = database = "syslog".... see $rsyslogd_source/plugins/omoracle/omoracle.c for me info)
|