簡體   English   中英

如何從Oracle獲取數據以將其發送到statsd或直接發送到InfluxDB?

[英]How to get data from Oracle to send it to statsd or directly into InfluxDB?

是否有解決方案從Oracle數據庫獲取一些數據以進一步將其發送到statsd或直接發送到InfluxDB? 我有很多sql查詢,我需要定期運行以獲取一些計數器。 我需要ORABBIX(zabbix)的替代方案,它與數據庫有持久的連接,但是對於stastd / InfluxDB。 我想在查詢表中的計數器時減少與數據庫的連接。 謝謝。

由於有cx_OracleInfluxDBClient,您可以編寫一個簡單的Python腳本來打開所有必要的數據庫連接,准備一堆SQL語句並重復執行它們並將它們提供給一個Influxdb實例。

基本上是這樣的:

from influxdb import InfluxDBClient
import cx_Oracle
ic = InfluxDBClient('vigilante.example.org', 8086, 'collector', 'pw', 'db'

db_dict = {}
for sid in sids:
  db_dict[sid] = cx_Oracle.connect(ORACLE_USER, ORACLE_PASS, sid)

cursor_dict = {}
for (name, c) in config.items():
  cursor = db_dict[c['sid']].cursor()
  cursor.prepare(c['config'])
  cursor_dict[name, c['sid']] = (cursor, c['line'])

def collect(cursor_dict):
  vs = []
  for ((name, sid), (cursor, line)) in cursor_dict:
    rows.execute(cursosr.fetchall())
    if rows:
      vs.append(line.format(sid, *rows[0]))
  if vs:
    ic.write_points(vs, protocol='line')

while True:
  collect(cursor_dict)
  time.sleep(sleep_for_some_dynamically_computed_time)

在該示例中,每個SQL語句只返回一行並且具有關聯的涌入線( c['line'] ),如下所示:

measurement,db={} col_name1={},col_name2={},col_name3={}

您還可以向該行添加時間戳 - 如果省略,則Influxdb使用當前時間。 請注意,此腳本長時間運行 - 並使用預准備語句來避免浪費數據庫資源。

或者,如果您已經運行了一個collectd :還有一個用於collectd的oracle插件 因此,您可以將現有查詢與該插件一起使用,並配置 collectd將數據點轉發 到Influxdb實例(通過UDP,即在Influxdb配置中啟用UDP偵聽端口)。

要將數據直接發送到InfluxDB:

我們可以編寫一個java代碼,使用Influxdb-java API將數據插入到InfluxDB中

我們可以創建一個oracle ojdbc連接,使用sql查詢查詢數據並將結果存儲在ResultSet中並創建一個InfluxDB連接,從結果中讀取查詢的數據並將其作為點存儲到InfluxDB測量中。

我們可以在創建點時添加時間戳或忽略它,在這種情況下,它會自動將系統日期作為時間戳。

請參閱以下鏈接以供參考: https//github.com/influxdata/influxdb-java/blob/master/src/test/java/org/influxdb/InfluxDBTest.java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM