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 |
|
||||
|
||||
## 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.
|
||||
|
||||
### 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!
|
||||
|
||||
@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)
|
||||
|
||||
if (@flush_size > 1000)
|
||||
|
@ -109,6 +96,8 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
|
|||
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.")
|
||||
end
|
||||
|
||||
setup_and_test_pool!
|
||||
|
||||
buffer_initialize(
|
||||
:max_items => @flush_size,
|
||||
|
@ -152,6 +141,29 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
|
|||
|
||||
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!
|
||||
# Load jar from driver path
|
||||
unless @driver_jar_path.nil?
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Gem::Specification.new do |s|
|
||||
s.name = 'logstash-output-jdbc'
|
||||
s.version = "0.2.2.rc1"
|
||||
s.version = "0.2.2"
|
||||
s.licenses = [ "Apache License (2.0)" ]
|
||||
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"
|
||||
|
|
Loading…
Reference in New Issue
Block a user