Telemetry event emission for write and query operations.
Events
Write Events
[:influx_elixir, :write, :start]— emitted before a write- Measurements:
%{system_time: integer()} - Metadata:
%{database: binary(), point_count: integer(), bytes: integer()}
- Measurements:
[:influx_elixir, :write, :stop]— emitted after a successful write- Measurements:
%{duration: integer()} - Metadata:
%{database: binary(), point_count: integer(), bytes: integer(), compressed_bytes: integer()}
- Measurements:
[:influx_elixir, :write, :exception]— emitted on write failure- Measurements:
%{duration: integer()} - Metadata:
%{database: binary(), kind: atom(), reason: term(), stacktrace: list()}
- Measurements:
Query Events
[:influx_elixir, :query, :start]— emitted before a query- Measurements:
%{system_time: integer()} - Metadata:
%{database: binary(), transport: atom()}
- Measurements:
[:influx_elixir, :query, :stop]— emitted after a successful query- Measurements:
%{duration: integer()} - Metadata:
%{database: binary(), transport: atom(), row_count: integer()}
- Measurements:
[:influx_elixir, :query, :exception]— emitted on query failure- Measurements:
%{duration: integer()} - Metadata:
%{database: binary(), transport: atom(), kind: atom(), reason: term(), stacktrace: list()}
- Measurements:
Usage
Attach handlers using :telemetry.attach/4 or :telemetry.attach_many/4:
:telemetry.attach(
"my-handler",
[:influx_elixir, :write, :stop],
fn _event, measurements, metadata, _config ->
Logger.info("Write completed in #{measurements.duration}ns",
database: metadata.database
)
end,
nil
)To wrap operations automatically, use the span helpers:
InfluxElixir.Telemetry.span_write(%{database: "mydb", point_count: 1, bytes: 42},
fn -> do_write() end
)
Summary
Functions
Emits the [:influx_elixir, :query, :exception] telemetry event.
Emits the [:influx_elixir, :query, :start] telemetry event.
Emits the [:influx_elixir, :query, :stop] telemetry event.
Wraps a query operation with telemetry start, stop, and exception events.
Wraps a write operation with telemetry start, stop, and exception events.
Emits the [:influx_elixir, :write, :exception] telemetry event.
Emits the [:influx_elixir, :write, :start] telemetry event.
Emits the [:influx_elixir, :write, :stop] telemetry event.
Functions
Emits the [:influx_elixir, :query, :exception] telemetry event.
Parameters
duration- elapsed time in native units (fromSystem.monotonic_time/0)metadata- map with:database,:transport,:kind,:reason, and:stacktracekeys
Examples
start = System.monotonic_time()
try do
SQL.query(conn, sql)
rescue
e ->
InfluxElixir.Telemetry.query_exception(
System.monotonic_time() - start,
%{database: "mydb", transport: :http, kind: :error,
reason: e, stacktrace: __STACKTRACE__}
)
reraise e, __STACKTRACE__
end
@spec query_start(map()) :: :ok
Emits the [:influx_elixir, :query, :start] telemetry event.
Parameters
metadata- map with:databaseand:transportkeys
Examples
InfluxElixir.Telemetry.query_start(%{database: "mydb", transport: :http})
Emits the [:influx_elixir, :query, :stop] telemetry event.
Parameters
duration- elapsed time in native units (fromSystem.monotonic_time/0)metadata- map with:database,:transport, and:row_countkeys
Examples
start = System.monotonic_time()
# ... perform query ...
InfluxElixir.Telemetry.query_stop(System.monotonic_time() - start,
%{database: "mydb", transport: :http, row_count: 42}
)
Wraps a query operation with telemetry start, stop, and exception events.
Emits [:influx_elixir, :query, :start] before calling fun, then either
[:influx_elixir, :query, :stop] on success or [:influx_elixir, :query, :exception]
on failure. Re-raises any exception after emitting the exception event.
Parameters
metadata- map with at minimum:databaseand:transportkeysfun- zero-arity function that performs the query
Examples
InfluxElixir.Telemetry.span_query(
%{database: "mydb", transport: :http},
fn -> SQL.query(conn, "SELECT * FROM cpu") end
)
Wraps a write operation with telemetry start, stop, and exception events.
Emits [:influx_elixir, :write, :start] before calling fun, then either
[:influx_elixir, :write, :stop] on success or [:influx_elixir, :write, :exception]
on failure. Re-raises any exception after emitting the exception event.
Parameters
metadata- map with at minimum:database,:point_count, and:byteskeysfun- zero-arity function that performs the write
Examples
InfluxElixir.Telemetry.span_write(
%{database: "mydb", point_count: 3, bytes: 128},
fn -> Writer.write(conn, line_protocol) end
)
Emits the [:influx_elixir, :write, :exception] telemetry event.
Parameters
duration- elapsed time in native units (fromSystem.monotonic_time/0)metadata- map with:database,:kind,:reason, and:stacktracekeys
Examples
start = System.monotonic_time()
try do
Writer.write(conn, data)
rescue
e ->
InfluxElixir.Telemetry.write_exception(
System.monotonic_time() - start,
%{database: "mydb", kind: :error, reason: e, stacktrace: __STACKTRACE__}
)
reraise e, __STACKTRACE__
end
@spec write_start(map()) :: :ok
Emits the [:influx_elixir, :write, :start] telemetry event.
Parameters
metadata- map with:database,:point_count, and:byteskeys
Examples
InfluxElixir.Telemetry.write_start(%{database: "mydb", point_count: 1, bytes: 42})
Emits the [:influx_elixir, :write, :stop] telemetry event.
Parameters
duration- elapsed time in native units (fromSystem.monotonic_time/0)metadata- map with:database,:point_count,:bytes, and:compressed_byteskeys
Examples
start = System.monotonic_time()
# ... perform write ...
InfluxElixir.Telemetry.write_stop(System.monotonic_time() - start,
%{database: "mydb", point_count: 1, bytes: 42, compressed_bytes: 30}
)