{"id":17274471,"url":"https://github.com/codedrivenmitch/axon-framework-microscope-extension","last_synced_at":"2026-01-20T11:02:09.697Z","repository":{"id":176770494,"uuid":"658781073","full_name":"CodeDrivenMitch/Axon-Framework-Microscope-Extension","owner":"CodeDrivenMitch","description":"Extension to Axon Framework 4.6+ which contains many tricks for extended tracing and metrics","archived":false,"fork":false,"pushed_at":"2023-11-20T12:08:09.000Z","size":196,"stargazers_count":3,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T09:23:59.540Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CodeDrivenMitch.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-26T13:29:23.000Z","updated_at":"2023-09-19T15:46:20.000Z","dependencies_parsed_at":"2024-12-19T18:41:24.165Z","dependency_job_id":null,"html_url":"https://github.com/CodeDrivenMitch/Axon-Framework-Microscope-Extension","commit_stats":null,"previous_names":["morlack/axon-framework-microscope-extension","codedrivenmitch/axon-framework-microscope-extension"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CodeDrivenMitch/Axon-Framework-Microscope-Extension","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeDrivenMitch%2FAxon-Framework-Microscope-Extension","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeDrivenMitch%2FAxon-Framework-Microscope-Extension/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeDrivenMitch%2FAxon-Framework-Microscope-Extension/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeDrivenMitch%2FAxon-Framework-Microscope-Extension/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CodeDrivenMitch","download_url":"https://codeload.github.com/CodeDrivenMitch/Axon-Framework-Microscope-Extension/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeDrivenMitch%2FAxon-Framework-Microscope-Extension/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28602175,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T10:46:13.255Z","status":"ssl_error","status_checked_at":"2026-01-20T10:42:51.865Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T08:54:00.111Z","updated_at":"2026-01-20T11:02:09.677Z","avatar_url":"https://github.com/CodeDrivenMitch.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Axon Framework Microscope Extension\n\n[Axon Framework](https://developer.axoniq.io/axon-framework/overview) is one of the best CQRS/ES frameworks in the\nmarket today.\nHowever, sometimes you want to put your application under a microscope and dig very deep into why it acts a little slow.\nIf so, this is the extension for you!\n\n\u003e **Warning**: This extension is not meant to be used in production. Although it can be used, it might have an impact on\n\u003e the performance.\n\u003e It is mainly meant to be used in test environments in order to find bottlenecks in your perfomance.\n\n## Requirements\n\n- Micrometer\n- Spring Boot 2 or 3\n\n## Installation\n\nYou only need to add this starter to your Spring Boot project:\n\n```xml\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.insidion.axon.microscope\u003c/groupId\u003e\n  \u003cartifactId\u003eaxon-microscope-starter\u003c/artifactId\u003e\n  \u003cversion\u003e0.0.3\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nThe extension is disabled by default. Add the following property to enable it:\n```properties\naxon.microscope.enabled=true\n```\n\nNon-Spring projects are not supported, for now. If you want I can add that, please create an issue.\nBoth Spring Boot 2 and 3 are supported.\n\n## Features\n\nThe library adds additional metrics and traces to your Axon application. It will automatically detect your Axon\nconfiguration and instrument the necessary beans.\n\n## Reconfiguration of metrics\n\nSome reconfigurations have been made to the MetricsConfigurer module of Axon Framework:\n\n- All metrics are now only valid for 1 minute, instead of 10. This provides more reactive metrics.\n- Event processors no longer have a latency per payload type, instead only per processor\n\n### Additional tracing\n\nThe following additional traces have been added:\n\n- Traces have been added for the `AxonServerQueryBus` and `AxonServerCommandBus` to trace the duration it was scheduled\n  in the work queue.\n- All `Serializer.serialize` and `Serializer.deserialize` invocations have had traces added\n- All Grpc methods for the AxonServer connector have had traces added\n\nYou can see the effect in the following picture, where we can see the command being stuck in the queue for a while. Note\nthat the Serializer invocations are very fast, and we can rule them out as bottleneck.\n![Serializer and CommandBus traces](.github/tracing.png)\n\n### Additional metrics\n\nA lot of additional metrics have been added. These include:\n\n- Ingest and commit latencies for event processors\n  - `$componentName.latency.ingest` Ingest latency is the time between publish and arrival at event handler\n  - `$componentName.latency.commit` Commit latency is the time between publish and commit finished in the database\n- Segment claimed percentage exposed\n  - `commandBus.capacity.total`\n  - `queryBus.capacity.total`\n  - Use this to make a relative metric (`commandBus.capacity / commandBus.capacity.total`)\n- Serializer metrics\n  - `$serializerName.serialize`\n  - `$serializerName.deserialize`\n- Queueing metrics\n  - `axonServerCommandBus.ingest.queueTime` - Time command spent in the queue before being processed\n  - `axonServerCommandBus.ingest.latency` - Time command took from dispatch to arrival in executor\n  - `axonServerQueryBus.ingest.queueTime` - Time query spent in the queue before being processed\n  - `axonServerQueryBus.ingest.latency` - Time query took from dispatch to arrival in executor\n- Token Store metrics\n  - `TokenStoreClass.storeToken` - Time it took to store a token\n  - `TokenStoreClass.fetchToken` - Time it took to fetch a token\n  - `TokenStoreClass.extendClaim` - Time it took to extend claim on a token\n- Aggregate metrics\n  - `aggregateLockTime` - Time it took to acquire a lock an aggregate\n  - `aggregateLoadTime` - Time it took to load an aggregate\n  - `eventCommitTime` - Time it took to commit the events from command handling\n  - `eventStore.readEvents` - Time it took to read events from the event store\n  - `eventStore.aggregateStreamSize` - Time it took to read events from the event store\n- Processor metrics\n  - `eventProcessor.segments.claimed` - Percentage of claimed segments. Sum over all instances, should become 1\n  - `eventProcessor.dlq.size` - Size of the DLQ\n- Grpc Metrics\n  - `grpc.duration` - Seconds it took to fully complete a grpc call\n\nReplace `$componentName` with the name of the component, such as `eventProcessor` or `commandBus`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodedrivenmitch%2Faxon-framework-microscope-extension","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodedrivenmitch%2Faxon-framework-microscope-extension","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodedrivenmitch%2Faxon-framework-microscope-extension/lists"}