52 karma · joined August 29, 2020
Great article nometheless; it seems like we just got really, really lucky.
I'm seeing a lot of people here that are surprised by the fact that even a company who has privacy as their main marketing point has to deal with compliance, but really, unless you host your own mail server, you just can't guarantee your own privacy.
I don't generally advise hosting your own mail server due to all the troubles that come with it, but this is really one of the only ways I can think of where you can achieve a decent enough level of control when it comes to exchanging emails.
If anybody has any suggestions, please feel free to create an issue on the repository
I just took care of it: https://github.com/TwinProduction/gatus/commit/e31c017a007fe...
This change will be available from v0.1.3
The time on the bottom left is how long ago the oldest status is, while the one on the right is how long ago the latest status is from.
(I'm joking, of course, unless this somehow becomes a serious use case at some point xD)
Beyond just that, the resource usage of Gatus is significantly lower than running Grafana, Prometheus and alertmanager individually - much less running all of them at the same time.
My personal Kubernetes cluster is quite limited in resources after all, and running Prometheus does make that resource pool even smaller than it already is :p
That said, even for clusters that don't have similar resource restrictions, I find that having all of this together in a single application makes it a lot easier to manage, though I guess that's up to the individual :)
As mentioned in the README, Gatus can double as automated user acceptance tests to check if, for instance, an endpoint that you expect to return X has Y instead.
Let me know if that's not clear enough, I can provide more a in-depth example :)
Originally, determining whether a service was healthy or not was going to be very simple: is the status 5xx? If yes, the service is unhealthy, otherwise, it's healthy.
After implementing that, however, I felt that it was bit too lacking. Sure, it could've helped roughly determining the availability of a service, but it wasn't able to make the difference between "everything is ok" and "everything is not ok".
For instance, let's say you want to test an endpoint that should return a list of recipes, and for whatever reason, the endpoint starts returning an empty list of recipes. The endpoint would still return a 200, but there's no content, so is it really accurate to call the service "healthy"?
That's why I implemented a way to supply conditions that Gatus will evaluate in order to determine whether a service is healthy or not. These conditions range from status code to body comparison with the help of a JSONPath-like syntax. I also extended that by adding the ability to resolve the length of the value of said JSON path, which allows even greater flexibility for when you don't know exactly what the data is (or the data is bound to change), but you know that this data should exist, or a certain number of elements should be returned.
For the example I mentioned earlier, the solution would simply be to add the following condition to the service configuration: `len([BODY].recipes) > 0`. This condition would make sure that the response body has the field `recipes` and it has a length of at least 1.
I wrote a short article on my website, if you want a bit more context: https://twinnation.org/articles/46/gatus-automated-health-da...
Any feedback is greatly appreciated :)