This past week we released Exceptionless 4.0.2 and Exceptionless.NET 4.0.3, consisting of maintenance updates that fixed several usability issues for self hosters, various performance, issues, bug fixes, and some general improvements.
Below is a highlight of the release notes, and don't forget to let us know how we're doing or what can improve by following the relevant links to GitHub and posting an "issue."
Lastly, thanks to all of our contributors for helping us solve problems, add functionality, and improve Exceptionless!
Both @caesay and @edwardmeng submitted pull requests and helped us solve an issue with sending emails (issue #290). MailKit, a "cross-platform mail client library," has now been integrated, adding "fully featured and RFC-compliant SMTP, POP3, and IMAP client implementations" into Exceptionless.
There were also a few issues with email when hosting in different environments, such as Azure Functions. In this case, all email settings must be stored in settings and not web.config. So, we moved the MailKit implementation to the insulation project and cleaned up the main mailer class, among a few other tweaks, to further improve email sending in the app. Thanks again caesay and edwardmeng!
If you are self hosting, please update the email settings in appSettings
Support for Azure Storage Queues has been added to the app.
A bug that could cause an exception and make the stack work queue be abandoned when a stack of events was deleted has been fixed.
The GeoIP database was being downloaded each time the app was restarted. That has also been fixed.
Incorrect emails were being generated in some self hosted and dev environments because the BASE_URL didn't contain the proper hashbang (#!). Fixed that issue in this release, as well.
You should only worry about upgrading if you are a self-hoster. If this is the case, please see the Exceptionless self hosting documentation. Note that changes to the Elasticsearch configuration were made in this release, so make sure to review the documentation for more information.
404 reporting support in ASP.NET Core has been added.
You can now set the min log level in configuration by calling SetDefaultMinLogLevel, allowing you to set a temporary min log level that is used until the server settings are retrieved.
Client IP support for X-Forwarded-For has been added (thanks @barankaynak!), which enables us to properly identify individual users and also helps when using proxy servers.
You can now more easily capture the HttpActionContext by adding SetHttpActionContext extension methods to web clients, allowing request and user info to be captured by default when manually submitting events.
We added SetException overload so you can now submit any event type with an exception object. So, for instance, you can now submit a log message through with an exception object and the exception tab will show.
Fixed an issue where the ASP.NET Core 1.1 runtime was sometimes preventing clients from reporting any data.
Fixed an issue where exceptions that converted to 404's were not running the event exclusion logic.
Fixed an issue where the duplicate checker plugin could DOS itself if you had client logging enabled (disabled by default - only meant for diagnostic logging).
Fixed an issue where the NLog logger wasn't setting event type.
Fixed an issue with package configuration of signed web packages.
Fixed an issue where adding our trace listener could blow up due to other invalid configured trace listeners.
Upgraded to the latest version of BenchMarkDotNet and ensure benchmarks run (Contrib @adamsitnik)
March was a productive month! We got tons done, and we're here to share everything with you so you're up to date and can hold us accountable if you notice any bugs in the changes.
Fixed an issue in Exceptionless where any search query starting with data. was being modified.
In Foundatio, the main repository that will contain the default deployment and EditorConfig settings for all of our projects, an effort was made to use less locking in queues and the CacheLockProvider by using AsyncAutoResetEvent, a lighter weight async primitive.
We also upgraded to the new VS2017 project format in our Foundatio repositories.
For Foundatio, a new pull request was made for Amazon SQS queues and CloudWatch metrics. We've done a lot of work to queues and the message buses to make the constructors have options classes that get passed in. We've also done a lot of work to the Azure implementations to try and optimize them and fix bugs.
We fixed an issue where you couldn't run Exceptionless on AWS because you couldn't install plugins on their ElasticSearch service. #280
The archival format has also been change from projected\year\month\day to year\month\day\hour\projectid. This allows you to quickly restore or download all events in a time period without enumerating all backed up projects.
In Foundatio, we fixed an issue where Redis Queues could deadlock, causing them to stop processing. This was being caused from topic messages locking the calling thread.
GetById and GetByIds now take an Id Type which allows us to specify routing information and much more. We have an implicit conversion that handles existing signatures.
Watch out this week, Blake's on fire! We're talking email loggings, UI tweaks, Exceptionless.NET updates and fixes, Foundatio updates, and Foundatio.Repositories updates. Lot's going on, let's check it out in this week's Live Code Demo.
This week, we made improvements to email logging and documentation when running in dev mode. Find out more by watching the live coding video or visiting the Exceptionless repo on GitHub.
We were only showing the exception tab if there was an event type of error, previously, but now we are always showing the exception tab if an exception is part of an event.
Blake's back at it this week, onward to something new after the Exceptionless 4.0 launch. Today we talk deduplicate event totals, setting minimum log levels, updates to Foundatio, and tracking down an event processor job issue!
We had previously reverted to earlier commits that showed the deduplicated event total separately from the event total, but since we are running on new indexes now, we are able to reliably include the deduplicated total as the total number of events. GitHub Issue #270
You can now set the min log level in configuration using:
The Foundatio updates we made include performance and handling improvements to the message bus. Learn more about these improvements on GitHub. We also added IHybridCacheClient interface marker, giving you granular control over dependency injection. Now, you can inject either a cache client or a hybrid cache client much easier. Learn more.
Lastly for this week, we are working on tracking down the root cause of an issue with the event processor job that is causing it to stop processing events. More on that soon!
During the Exceptionless 4.0 Release, we covered a lot of enhancements and changes. In this week's Live Code Demo, Blake reviews the 4.0 release notes and talks through other tweaks and post-launch cleanup.
Exceptionless 4.0 has been released for a few weeks now, with ElasticSearch 5 running in production for even longer. Let's take another look at the release notes and talk through some notable topics.
We look at the self hosting & upgrading documentation, which has been updated for Exceptionless 4.0.
In the process of the latest release, we upgraded Foundatio to new csproject format, logging many bugs on the .NET CLI along the way. Blake reviews this in the above video as well.
In the end, we obviously had to merge in pull requests and clean up issues, which he also reviews.
Lastly, we cleaned up the new Azure infrastructure!
In this live code/feature/functionality review video, Blake talks about:
Deploying Elasticsearch 5.x to production with completely new Azure resources.
Fixing bugs and doing extensive testing on the new Elasticsearch 5 and Azure implementation.
Massive performance boosts due to daily indexes, SSD-backed storage, and bug fixes. These boosts should result in near0instant page loads and huge improvements to session dashboards.
Automating cluster setup using Azure CLI and Elasticsearch ARM Templates.
A new custom SSH script that allows us to quickly and securely connect to machines, as well as forward ports for things like Kibana.
New Azure resources and dashboards.
Setting up WebJobs to run as cron jobs.
We also found PM2, a new way to manage Node.js services for our StatsD service.
That's right folks, Exceptionless 4.0 is here and we've got the full low-down on all the improvements, upgrades, and enhancements in this week's blog article, along with how to upgrade instructions for self hosters.
The primary focus of version 4.0 was to add support for Elasticsearch 5. By migrating from Elasticsearch 1.7 to 5, we removed growing technical debt and benefited greatly in the process. Here is an overview of the benefits gained by migrating to Elasticsearch 5 in 4.0.0.
Since we first migrated to Elasticsearch 1.x from MongoDB, we've learned a lot of hard lessons. With 4.0 and the upgrade to Elasticsearch 5, we took all those lessons and applied them to the new release and infrastructure setup. Here are some performance improvements and notes that came out of those implementations.
We've moved from monthly indexes to daily indexes. This change means that when you are filtering by the last 24 hours or last week, you are greatly reducing the amount of work Elasticsearch has to do to return the requested data.
Because of this, the average use case will see between 25% and 80% improvement to indexing throughput. This means that, with the same hardware, we can index the same documents much faster!
We moved from Groovy scripts to Painless scripts, which are four times faster. By moving to Painless scripts, we also greatly simplified the burden of having to modify configuration files to enable scripting!
Elasticsearch has added a lot of new data types since 1.7, and we are now taking advantage of them to reduce memory, storage and query costs. This means we can query the same data faster, using less memory doing it. We've also set up more sensible defaults to ensure we don't index very long strings.
We've also made several performance and reliability improvements to snapshots (backups).
Our goal is to have everyone be able to setup and use Exceptionless in a matter of minutes. One of the areas that had hendered a lot of self hosters in the past was forgetting to update the elasticsearch.yml file, which is no longer an issue with the migration to Painless scripts. If you're a self hoster, check out the
The move to using Painless scripts as part of bulk updates and ingest pipelines reduced the burden of having to modify configuration files to enable scripting! Long gone are the times where you would have to reset your setup because you missed a configuration step.
We've also added various maintenance jobs that handle backups and restores automatically, so you don't have to worry about losing your data!
Future upgrades should be seamless as Elasticsearch now handles reindexing out of the box! Once you have migrated your data to Elasticsearch 5, we think future major upgrades will just be handled by the Exceptionless app itself!
You can now also use Docker or Azure arm templates to quickly set up a cluster. We really like this direction and will continue moving down this path, hopefully getting to the point where you can click a single button and have an Exceptionless production instance running locally!
With Exceptionless 4.0.0, we continued to focus on finishing up backend improvements to both our repositories and parsers that we made in the 3.5 releases. We feel that all the pieces are finally in place to allow us to do custom dashboards in the near future, something we talk about in our 2017 Roadmap blog post.
Foundatio.Parsers now gives us the ability to define and validate custom aggregations using Lucene-style syntax. For example, lets say I want a date histogram that shows the min, max and average event value. I'd just need to pass date:(date min:value max:value avg:value) to the following endpoint: /api/v2/events/count?aggregations=date:(date min:value max:value avg:value) to return aggregations across a time series!
The only users that need to worry about upgrading anything for this new release are self hosters. If you are self hosting Exceptionless, please review the Self Hosting Documentation, which contains information about upgrading your existing install.
Also, please take a look at the change log for a full list of the changes.
We’re always striving to improve the efficiency of Exceptionless and all of our projects. If you see any room for improvement or have any comments when using anything from us, please send us an in-app message, submit a GitHub issue or contact us on the website.