Page History
Info |
---|
Since Blueriq 14.6, the Timeline DAO, which used to be included in the Trace SQL Store Component, has been split to a separate component. See Timeline SQL Store component for details. |
Table of contents
Table of Contents
...
This Trace SQL Store Component contains a Trace DAO implementation that can be used by the trace engine to store trace messages in a database.
The configuration options are found below in this documentBlueriq 14.8 introduced the possibility to consume trace events that are pushed on a queue by the Trace Event Publisher Component and then store them in a database in an asynchronous way. See consume trace events.
Requirements
This component persists data in a database, that must be provided. See platform support for the supported databases.
Installation
...
title | Java |
---|
Optional: the consumer functionality needs to be able to access a queue. Currently only RabbitMQ is supported. For setting this up see Configuration of RabbitMQ for Customerdata service and Trace Event Publisher.
Installation
In order to use this component,
...
the
profile must be active. More information on how to configure the application using Spring Profiles can be found here: Component configuration with Spring Profiles. Include Page _ProfileTrace _ProfileTrace
This component will only write trace message to the database and not timeline messages. See Timeline SQL Store component for writing timeline messages to a separate database.
Add the artifact with groupId "com.blueriq"
and
...
artifactId "blueriq-component-trace-sql-store"
...
as a dependency to your Blueriq runtime POM file if you want to depend on it.
UI Expand | ||
---|---|---|
| ||
In order to use this component, make sure to have the BlueriqComponentTracing.dll in the /bin directory of your .NET webapp installation |
Configuration
Database
Scripts to create the required database content are provided for the following databases:
- SQL Server
- Oracle
- H2 (we do not recommend using a H2 database in production environments)
Info |
---|
For customers that are upgrading an existing version of Blueriq, database upgrade scripts are provided in the Upgrade Instructions when applicable. |
...
title | Java |
---|
Use the following steps to configure the datasource:
...
Using JDBC datasource : this can be configured in the
application-externaldatasources.properties
file. When configuring external datasources, theexternaldatasources
profile should be enabled.Code Block language powershell title application-externaldatasources.properties blueriq.datasource.trace-sql-store.url=jdbc:sqlserver://<database_url>:<port>;databaseName=bq_comments;instance=SQL_EXPRESS blueriq.datasource.trace-sql-store.username=<username> blueriq.datasource.trace-sql-store.password=<password> blueriq.datasource.trace-sql-store.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver blueriq.hibernate.trace-sql-store.hbm2ddl.auto=validate blueriq.hibernate.trace-sql-store.dialect=org.hibernate.dialect.SQLServer2012Dialect
Using JNDI datasource : this can be configured in the
application-jndidatasources.properties
file When configuring JNDI datasources thejndidatasources
profile should be enabled.Code Block language powershell title application-jndidatasources.properties blueriq.datasource.trace-sql-store.jndiName=java:/comp/env/jdbc/main blueriq.hibernate.trace-sql-store.hbm2ddl.auto=validate blueriq.hibernate.trace-sql-store.dialect=org.hibernate.dialect.SQLServer2012Dialect
...
Supported dialects:
- org.hibernate.dialect.SQLServer2012Dialect (for SQL Server)
- org.hibernate.dialect.Oracle10gDialect (for Oracle)
- org.hibernate.dialect.H2Dialect (for H2) (we do not recommend using a H2 database in production environments)
Supported hbm2ddl.auto values:
- none
- validate
...
title | .NET |
---|
...
Example configuration:
Code Block | ||
---|---|---|
| ||
<hibernate-configuration>
<session-factories>
<session-factory name="TraceDao">
<properties>
<property name="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<property name="dialect" value="NHibernate.Dialect.MsSql2012Dialect" />
<property name="connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<property name="connection.connection_string" value="Server=HOST\SQLEXPRESS;Database=test;User Id=USERNAME;Password=PASSWORD;" />
<property name="show_sql" value="false" />
<property name="current_session_context_class" value="Aquima.WebApplication.WebPersistenceUtility.Session.CurrentHibernateSessionContext, WebPersistenceUtility" />
</properties>
</session-factory>
</session-factories>
</hibernate-configuration> |
Supported dialects:
- NHibernate.Dialect.MsSql2012Dialect
For more information about configuring database connections, see Configuring database connections in .NET webapp.
Info |
---|
The Tracing SQL Store component looks for a database connection named "TraceDao" so make sure that this name is used in order to configure the Trace SQL Store properly. |
Configuration
The datasource name is trace-sql-store.
Include Page | ||||
---|---|---|---|---|
|
Consume trace events
The Trace SQL Store component can store trace messages directly in the database, but it is also possible to decouple the storage of trace messages using the Trace Event Publisher Component to publish trace events to a queue and then consume them using this component.
To be able to consume event messages, the event channel needs to be configured in the
Include Page | ||||
---|---|---|---|---|
|
Include Page | ||||
---|---|---|---|---|
|
Note |
---|
The Trace SQL Store either stores trace messages in the database, or consumes trace events from the queue. When the configuration below is enabled, only trace events are consumed, no trace messages are saved to the database directly. So if you enable this configuration, be sure to also enable the Trace Event Publisher Component, otherwise no trace information is saved anywhere. |
The queue configuration can be configured using a default queue (using blueriq.default.rabbitmq.* in the application.properties). When it is needed, it can be overruled using the configuration below.
Also the trace events exchange has a default, and can be overruled by configuration when needed.
Code Block |
---|
# RabbitMQ configuration
blueriq.trace.event.listener.amqp.rabbitmq.host=localhost
blueriq.trace.event.listener.amqp.rabbitmq.port=5672
blueriq.trace.event.listener.amqp.rabbitmq.virtualHost=/
blueriq.trace.event.listener.amqp.rabbitmq.username=guest
blueriq.trace.event.listener.amqp.rabbitmq.password=guest
blueriq.trace.event.listener.amqp.rabbitmq.queueNames=dcmTraceEvents
blueriq.trace.event.listener.amqp.concurrency.max-concurrent-consumers=1
blueriq.trace.event.listener.amqp.concurrency.concurrent-consumers=1
# Enable consumer functionality
blueriq.trace.event.listener.amqp.enabled=true |
Note |
---|
In certain circumstances it is possible that an error happens while consuming the trace event. Because of the workings of RabbitMQ, this will result in an endless loop where it tries to re-send the trace event until it is correctly consumed. To prevent this, a republish mechanism is added with Blueriq 15.7. This mechanism sends trace events to a dead-letter-queue when an error occurs. This will prevent the creation of the endless loop. For information see Configuring RabbitMQ |
For more information on concurrent consumers see Configuring RabbitMQ.
Enable TLS connection
To enable a secure (TLS) AMQP connection to the queue, set the property "blueriq.trace.event.listener.amqp.rabbitmq.ssl
.enabled
" to "true
".
The default for AQMP port with TLS on RabbitMQ is '5671', it needs to be explicitly enabled though, see https://www.rabbitmq.com/ssl.html for more information
...
.
Performance
The performance impact of the Trace SQL Store is minimal when used normally: to write trace messages to the database.
It is also possible to use the Trace SQL Store to query the trace engine database, like the timeline container does. The Trace SQL Store offers good performance as long as the result set is limited. For large scale analysis, when summaries or aggregates are desired, the Trace SQL Store is not recommended because it is primarily designed to return a list of trace entries. For these scenarios it is recommended to use SQL (or HQL) to query the database.