[ https://issues.apache.org/jira/browse/CAMEL-21413?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17895126#comment-17895126 ]
Raymond commented on CAMEL-21413: --------------------------------- As a small note, probably OpenTelemetry has the best connection to such an implementation as it can capture, process, and export telemetry data (such as metrics, traces, and logs) from Camel. > Create a TransactionLog transaction log to provide detailed tracking and > performance metrics on end-to-end transactions > ------------------------------------------------------------------------------------------------------------------------ > > Key: CAMEL-21413 > URL: https://issues.apache.org/jira/browse/CAMEL-21413 > Project: Camel > Issue Type: Wish > Components: came-core > Reporter: Raymond > Priority: Major > Attachments: TransactionStore_TrackAndTrace.jpg > > > *Wish* > The wish is for a transaction log store in Camel to provide detailed tracking > and performance metrics on end-to-end transactions across multiple > exchanges/routes, storing metadata, exchange data, and performance metrics in > a configurable, persistent registry to better monitor business processes. > *Background* > A lot of data in tracing and observability is on the exchange level. How many > exchanges are completed or failed, for example. In many cases, what I really > want to know if a transaction is successful or failed. > With a transaction I mean that the complete lifecycle of a message on Camel, > this > may contain many routes and exchanges. For example, when Seda or ActiveMQ is > used > a new exchange is created, but it's still the same transaction. > > To have metrics and more insights on transactions, I would like to have a > transaction log (through a separate registry?). This is a separate store with > information about the transaction. > *Implementation ideas* > Below are few ideas to implement this wish: > _1. Initialize the store_ > Setup a transaction log/store (either in memory or external store) through a > registry. This is to enable it and to configure the store. > _2. Transaction item_ > A transaction item is a definition of a specific transaction. It may contain > the following items: > * {*}Name{*}: The name to indicate the transaction. Like "order" or > "invoice". This is so to say the overarching name of the integration/business > process. > * {*}StartingPoint{*}: A routeId or groupId where the transaction starts > (triggers a new transaction). > * {*}CorrelationID(s){*}: One or more correlationId (headers) that can be > set just like a header/exchangePropery/variable, this contains for example > the orderID that is set on the first step of the transaction. > _3. Tracking transactions_ > A transaction is probably best tracked by something like a breadcrumbId. > Preferably a transactionId. At least something that cannot be edited by users > (I sometimes see people change the breadcrumbId, to separate transactions > into multiple segments). > By default, only the start and end of a transaction is tracked. To get more > fine-grained control, one could also track intermediate points like a route, > a step, or a node. > The transaction is tracked during processing, and then finished on > completion. The whole counts as one "UnitOfWork". > _4. The transaction store_ > The transaction store contains all the tracked items. Maybe there could be > divided into separate segments like: > # metadata > - name (name of the transaction) > - description (description of type of transaction) > - transactionId > - transactionHistory (similar to messageHistory) > - correlationId(s) > - timestamps > - exceptions > # exchange data > - headers, properties, variables > - bodyType > - body > etc > # performance metrics > - load (CPU), memory (RAM), threads > - number of transactions (completed, pending, failed) > - throughput > - response time > - total process time of an transaction > - average > - etc > It should be possible to configure which of these items the user what want to > store. By default, only metadata. > _5. Transaction API's_ > There need to be an API to configure and operate the transaction store. > (including JMX), similar to backlogtracer. > *Production* > Some of the solutions I saw are only available during development or test, > but the need is especially big for production environment. A solution needs > to keep in mind that this would run for billion of messages. The flexibility > to turn it easily on and off. > For example, by default, the body of a message doesn't need to be stored. Or > only the first 32kb need to be stored. But for specific case users, one to > enable this on the fly for a specific transaction. > Transactions are probably needed persistent, so either need a messagestore > (disk) similar to brokers or an external database. I'm not sure what the best > stores are for this kind of data. A normal SQL database like Postgres, a > search database like Elastic, a metrics database like Prometheus or key/value > store like Redis? > *End users* > The idea is that end users have a good insight in what is going on in the > integration layer. So that they can question like the following: > * How many order transactions are processed? > * Give me a specific order by orderId that custom says he didn't receive? > * How many failed messages are there? Which ones did go wrong, where did it > go wrong, and what is the exact error? > * Can we replay the failed order? > * Where is the bottleneck on the system > *Conclusion* > This is just an idea/wish, but something I see coming back from the start of > my career as integration specialist (around 2007), until today. > Most consultancy firms or end customers have built something themselves, I > see with names like "Track & Trace", "MessageStore", "ESB Collector", > "Transactions", "Control center". > I also built a solution myself, and are happy to share this solution, or > others I saw. A more generic solution to monitor (track & trace) transactions > of business processes would be very welcome. -- This message was sent by Atlassian Jira (v8.20.10#820010)