Move examples and split up connection code
Bump version
This commit is contained in:
parent
529c98aadb
commit
ae51d77f05
118
README.md
118
README.md
|
@ -59,120 +59,6 @@ Tests are not yet 100% complete.
|
||||||
| max_flush_exceptions | Number | Number of sequential flushes which cause an exception, before we stop logstash. Set to a value less than 1 if you never want it to stop. This should be carefully configured with relation to idle_flush_time if your SQL instance is not highly available. | No | 0 |
|
| max_flush_exceptions | Number | Number of sequential flushes which cause an exception, before we stop logstash. Set to a value less than 1 if you never want it to stop. This should be carefully configured with relation to idle_flush_time if your SQL instance is not highly available. | No | 0 |
|
||||||
|
|
||||||
## Example configurations
|
## Example configurations
|
||||||
|
Example logstash configurations, can now be found in the examples directory. Where possible we try to link every configuration with a tested jar.
|
||||||
|
|
||||||
If you have a working sample configuration, for a DB thats not listed, pull requests are welcome.
|
If you have a working sample configuration, for a DB thats not listed, pull requests are welcome.
|
||||||
|
|
||||||
### SQLite3
|
|
||||||
* Tested using https://bitbucket.org/xerial/sqlite-jdbc
|
|
||||||
* SQLite setup - `echo "CREATE table log (host text, timestamp datetime, message text);" | sqlite3 test.db`
|
|
||||||
```
|
|
||||||
input
|
|
||||||
{
|
|
||||||
stdin { }
|
|
||||||
}
|
|
||||||
output {
|
|
||||||
stdout { }
|
|
||||||
|
|
||||||
jdbc {
|
|
||||||
connection_string => 'jdbc:sqlite:test.db'
|
|
||||||
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### SQL Server
|
|
||||||
* Tested using http://msdn.microsoft.com/en-gb/sqlserver/aa937724.aspx
|
|
||||||
```
|
|
||||||
input
|
|
||||||
{
|
|
||||||
stdin { }
|
|
||||||
}
|
|
||||||
output {
|
|
||||||
jdbc {
|
|
||||||
connection_string => "jdbc:sqlserver://server:1433;databaseName=databasename;user=username;password=password;autoReconnect=true;"
|
|
||||||
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Postgres
|
|
||||||
With thanks to [@roflmao](https://github.com/roflmao)
|
|
||||||
```
|
|
||||||
input
|
|
||||||
{
|
|
||||||
stdin { }
|
|
||||||
}
|
|
||||||
output {
|
|
||||||
jdbc {
|
|
||||||
connection_string => 'jdbc:postgresql://hostname:5432/database?user=username&password=password'
|
|
||||||
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, CAST (? AS timestamp), ?)", "host", "@timestamp", "message" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Oracle
|
|
||||||
With thanks to [@josemazo](https://github.com/josemazo)
|
|
||||||
* Tested with Express Edition 11g Release 2
|
|
||||||
* Tested using http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html (ojdbc6.jar)
|
|
||||||
```
|
|
||||||
input
|
|
||||||
{
|
|
||||||
stdin { }
|
|
||||||
}
|
|
||||||
output {
|
|
||||||
jdbc {
|
|
||||||
connection_string => "jdbc:oracle:thin:USER/PASS@HOST:PORT:SID"
|
|
||||||
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, CAST (? AS timestamp), ?)", "host", "@timestamp", "message" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Mysql
|
|
||||||
With thanks to [@jMonsinjon](https://github.com/jMonsinjon)
|
|
||||||
* Tested with Version 14.14 Distrib 5.5.43, for debian-linux-gnu (x86_64)
|
|
||||||
* Tested using http://dev.mysql.com/downloads/file.php?id=457911 (mysql-connector-java-5.1.36-bin.jar)
|
|
||||||
```
|
|
||||||
input
|
|
||||||
{
|
|
||||||
stdin { }
|
|
||||||
}
|
|
||||||
output {
|
|
||||||
jdbc {
|
|
||||||
connection_string => "jdbc:mysql://HOSTNAME/DATABASE?user=USER&password=PASSWORD"
|
|
||||||
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, CAST (? AS timestamp), ?)", "host", "@timestamp", "message" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### MariaDB
|
|
||||||
* Tested with Ubuntu 14.04.3 LTS, Server version: 10.1.9-MariaDB-1~trusty-log mariadb.org binary distribution
|
|
||||||
* Tested using https://downloads.mariadb.com/enterprise/tqge-whfa/connectors/java/connector-java-1.3.2/mariadb-java-client-1.3.2.jar (mariadb-java-client-1.3.2.jar)
|
|
||||||
```
|
|
||||||
input
|
|
||||||
{
|
|
||||||
stdin { }
|
|
||||||
}
|
|
||||||
output {
|
|
||||||
jdbc {
|
|
||||||
connection_string => "jdbc:mariadb://HOSTNAME/DATABASE?user=USER&password=PASSWORD"
|
|
||||||
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Apache Phoenix (HBase SQL)
|
|
||||||
* Tested with Ubuntu 14.04.03 / Logstash 2.1 / Apache Phoenix 4.6
|
|
||||||
* <!> HBase and Zookeeper must be both accessible from logstash machine <!>
|
|
||||||
```
|
|
||||||
input
|
|
||||||
{
|
|
||||||
stdin { }
|
|
||||||
}
|
|
||||||
output {
|
|
||||||
jdbc {
|
|
||||||
connection_string => "jdbc:phoenix:ZOOKEEPER_HOSTNAME"
|
|
||||||
statement => [ "UPSERT INTO EVENTS log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
16
examples/apache-phoenix-hbase-sql.md
Normal file
16
examples/apache-phoenix-hbase-sql.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Example: Apache Phoenix (HBase SQL)
|
||||||
|
* Tested with Ubuntu 14.04.03 / Logstash 2.1 / Apache Phoenix 4.6
|
||||||
|
* <!> HBase and Zookeeper must be both accessible from logstash machine <!>
|
||||||
|
```
|
||||||
|
input
|
||||||
|
{
|
||||||
|
stdin { }
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
jdbc {
|
||||||
|
connection_string => "jdbc:phoenix:ZOOKEEPER_HOSTNAME"
|
||||||
|
statement => [ "UPSERT INTO EVENTS log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
16
examples/mariadb.md
Normal file
16
examples/mariadb.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Example: MariaDB
|
||||||
|
* Tested with Ubuntu 14.04.3 LTS, Server version: 10.1.9-MariaDB-1~trusty-log mariadb.org binary distribution
|
||||||
|
* Tested using https://downloads.mariadb.com/enterprise/tqge-whfa/connectors/java/connector-java-1.3.2/mariadb-java-client-1.3.2.jar (mariadb-java-client-1.3.2.jar)
|
||||||
|
```
|
||||||
|
input
|
||||||
|
{
|
||||||
|
stdin { }
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
jdbc {
|
||||||
|
connection_string => "jdbc:mariadb://HOSTNAME/DATABASE?user=USER&password=PASSWORD"
|
||||||
|
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
16
examples/mysql.md
Normal file
16
examples/mysql.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Example: Mysql
|
||||||
|
With thanks to [@jMonsinjon](https://github.com/jMonsinjon)
|
||||||
|
* Tested with Version 14.14 Distrib 5.5.43, for debian-linux-gnu (x86_64)
|
||||||
|
* Tested using http://dev.mysql.com/downloads/file.php?id=457911 (mysql-connector-java-5.1.36-bin.jar)
|
||||||
|
```
|
||||||
|
input
|
||||||
|
{
|
||||||
|
stdin { }
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
jdbc {
|
||||||
|
connection_string => "jdbc:mysql://HOSTNAME/DATABASE?user=USER&password=PASSWORD"
|
||||||
|
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, CAST (? AS timestamp), ?)", "host", "@timestamp", "message" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
20
examples/odps.md
Normal file
20
examples/odps.md
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# Example: ODPS
|
||||||
|
With thanks to [@onesuper](https://github.com/onesuper)
|
||||||
|
```
|
||||||
|
input
|
||||||
|
{
|
||||||
|
stdin { }
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
jdbc {
|
||||||
|
driver_class => "com.aliyun.odps.jdbc.OdpsDriver"
|
||||||
|
driver_auto_commit => false
|
||||||
|
connection_string => "jdbc:odps:http://service.odps.aliyun.com/api?project=meta_dev&loglevel=DEBUG"
|
||||||
|
username => "abcd"
|
||||||
|
password => "1234"
|
||||||
|
max_pool_size => 5
|
||||||
|
flush_size => 10
|
||||||
|
statement => [ "INSERT INTO test_logstash VALUES(?, ?, ?);", "host", "@timestamp", "message" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
16
examples/oracle.md
Normal file
16
examples/oracle.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Example: Oracle
|
||||||
|
With thanks to [@josemazo](https://github.com/josemazo)
|
||||||
|
* Tested with Express Edition 11g Release 2
|
||||||
|
* Tested using http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html (ojdbc6.jar)
|
||||||
|
```
|
||||||
|
input
|
||||||
|
{
|
||||||
|
stdin { }
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
jdbc {
|
||||||
|
connection_string => "jdbc:oracle:thin:USER/PASS@HOST:PORT:SID"
|
||||||
|
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, CAST (? AS timestamp), ?)", "host", "@timestamp", "message" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
15
examples/postgres.md
Normal file
15
examples/postgres.md
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# Example: Postgres
|
||||||
|
With thanks to [@roflmao](https://github.com/roflmao)
|
||||||
|
```
|
||||||
|
input
|
||||||
|
{
|
||||||
|
stdin { }
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
jdbc {
|
||||||
|
connection_string => 'jdbc:postgresql://hostname:5432/database?user=username&password=password'
|
||||||
|
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, CAST (? AS timestamp), ?)", "host", "@timestamp", "message" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
14
examples/sql-server.md
Normal file
14
examples/sql-server.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Example: SQL Server
|
||||||
|
* Tested using http://msdn.microsoft.com/en-gb/sqlserver/aa937724.aspx
|
||||||
|
```
|
||||||
|
input
|
||||||
|
{
|
||||||
|
stdin { }
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
jdbc {
|
||||||
|
connection_string => "jdbc:sqlserver://server:1433;databaseName=databasename;user=username;password=password;autoReconnect=true;"
|
||||||
|
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
17
examples/sqlite.md
Normal file
17
examples/sqlite.md
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# Example: SQLite3
|
||||||
|
* Tested using https://bitbucket.org/xerial/sqlite-jdbc
|
||||||
|
* SQLite setup - `echo "CREATE table log (host text, timestamp datetime, message text);" | sqlite3 test.db`
|
||||||
|
```
|
||||||
|
input
|
||||||
|
{
|
||||||
|
stdin { }
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
stdout { }
|
||||||
|
|
||||||
|
jdbc {
|
||||||
|
connection_string => 'jdbc:sqlite:test.db'
|
||||||
|
statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
|
@ -83,19 +83,6 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
|
||||||
|
|
||||||
load_jar_files!
|
load_jar_files!
|
||||||
|
|
||||||
@pool = Java::ComZaxxerHikari::HikariDataSource.new
|
|
||||||
|
|
||||||
@pool.setAutoCommit(@driver_auto_commit)
|
|
||||||
@pool.setDriverClassName(@driver_class) if @driver_class
|
|
||||||
|
|
||||||
@pool.setJdbcUrl(@connection_string)
|
|
||||||
|
|
||||||
@pool.setUsername(@username) if @username
|
|
||||||
@pool.setPassword(@password) if @password
|
|
||||||
|
|
||||||
@pool.setMaximumPoolSize(@max_pool_size)
|
|
||||||
@pool.setConnectionTimeout(@connection_timeout)
|
|
||||||
|
|
||||||
@exceptions_tracker = RingBuffer.new(@max_flush_exceptions)
|
@exceptions_tracker = RingBuffer.new(@max_flush_exceptions)
|
||||||
|
|
||||||
if (@flush_size > 1000)
|
if (@flush_size > 1000)
|
||||||
|
@ -109,6 +96,8 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
|
||||||
if (!@unsafe_statement and @statement.length < 2)
|
if (!@unsafe_statement and @statement.length < 2)
|
||||||
@logger.error("JDBC - Statement has no parameters. No events will be inserted into SQL as you're not passing any event data. Likely configuration error.")
|
@logger.error("JDBC - Statement has no parameters. No events will be inserted into SQL as you're not passing any event data. Likely configuration error.")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
setup_and_test_pool!
|
||||||
|
|
||||||
buffer_initialize(
|
buffer_initialize(
|
||||||
:max_items => @flush_size,
|
:max_items => @flush_size,
|
||||||
|
@ -152,6 +141,29 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def setup_and_test_pool!
|
||||||
|
# Setup pool
|
||||||
|
@pool = Java::ComZaxxerHikari::HikariDataSource.new
|
||||||
|
|
||||||
|
@pool.setAutoCommit(@driver_auto_commit)
|
||||||
|
@pool.setDriverClassName(@driver_class) if @driver_class
|
||||||
|
|
||||||
|
@pool.setJdbcUrl(@connection_string)
|
||||||
|
|
||||||
|
@pool.setUsername(@username) if @username
|
||||||
|
@pool.setPassword(@password) if @password
|
||||||
|
|
||||||
|
@pool.setMaximumPoolSize(@max_pool_size)
|
||||||
|
@pool.setConnectionTimeout(@connection_timeout)
|
||||||
|
|
||||||
|
# Test connection
|
||||||
|
test_connection = @pool.getConnection()
|
||||||
|
unless test_connection.isValid(10)
|
||||||
|
@logger.error("JDBC - Connection is not valid. Please check connection string or that your JDBC endpoint is available.")
|
||||||
|
end
|
||||||
|
test_connection.close()
|
||||||
|
end
|
||||||
|
|
||||||
def load_jar_files!
|
def load_jar_files!
|
||||||
# Load jar from driver path
|
# Load jar from driver path
|
||||||
unless @driver_jar_path.nil?
|
unless @driver_jar_path.nil?
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
s.name = 'logstash-output-jdbc'
|
s.name = 'logstash-output-jdbc'
|
||||||
s.version = "0.2.2.rc1"
|
s.version = "0.2.2"
|
||||||
s.licenses = [ "Apache License (2.0)" ]
|
s.licenses = [ "Apache License (2.0)" ]
|
||||||
s.summary = "This plugin allows you to output to SQL, via JDBC"
|
s.summary = "This plugin allows you to output to SQL, via JDBC"
|
||||||
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user