Show HN: Keep – GitHub Actions for your monitoring tools (github.com)
A few months ago, we introduced here at HN (https://news.ycombinator.com/item?id=34806482) Keep as an “open source alerting CLI” and got some interesting feedback - mainly around UI, automation, and supporting more tools. We were VERY early back then, and we understood that although the current DX around creating alerts is not great, it's not that critical and developers don’t need another tool just for that.
But we did find something else.
While talking to developers and devops, we found that a lot of companies use many tools that generate alerts - from Cloudwatch, Prometheus, Grafana, and Datadog to tools such as Zabbix or Nagios. We definitely agree consolidation in the observability space is a real thing, but while talking to those companies we feel that there are still real use cases for having more than one tool (and for example, according to Grafana’s 2023 observability survey, 52% of the companies uses more than 6 observability tools https://grafana.com/observability-survey-2023/).
So we that in mind, we rebuilt Keep with a simple mindset: (1) Integrate with every tool that triggers alerts - it can be either pushing alerts to Keep via webhooks or routing policies or Keep to pull alerts via the tools API. (2) Create a simple abstraction layer to run workflows on top of these alerts. (3) Maintain a great developer experience - open source, API-first, workflows as code and generally having a developer mindset while building Keep.
During the time we rebuilt Keep, Datadog released their workflow automation tool (https://docs.datadoghq.com/service_management/workflows/) which led us to the understanding that's exactly what we solve - but for everyone who uses tools other than Datadog.
A short demo of Keep with a simple use case: https://www.youtube.com/watch?v=FPMRCZM8ZYg
You can try it yourself by signing into https://platform.keephq.dev
Like always - we invite you to try Keep and we are eager to hear any feedback.
70 comments
[ 3.0 ms ] story [ 87.1 ms ] threadNice tool though, looks useful, added to the list.
Start with `keep run --actions-file`, then show the file format. Don't mention specific CI/CD, it's not relevant.
Also, it would do well to link to your website ( https://www.keephq.dev ) also, rather than just something that immediately prompts me to log in.
And one final thing, having a demo video with some sort of narration to explain what I am watching people click on would also be helpful.
Obviously these are just my opinions, and they are worth exactly what was paid for them :)
we'll think about some changes to the README asap!
thanks!
Concretely:
> Run a Keep workflow with `keep run --actions-file=./path/to/workflow`; or `keep run` assumes the file is called `blah` in the current working directory by default if not specified.
> The actions file has the following format, which may seem familiar if you've used GitHub Actions:
> ```
> ...
> ```
> further actions file examples are available here and a full reference is available in the docs here.
When I think of Github Actions I think of horrific inline YAML scripting, missing core functionality, clunky UI and frequent outages.
yea, you’re definitely right. we should’ve mentioned something like “GitHub actions but reliable”.
actually our readme mentions datadog workflow automation as a reference though people are less familiar with it
Besides alerts it also tracks, and displays things such as which MongoDB server is the primary, or which ElasticSearch node is the controller.
The real competition is, what will LLMs write better? Because I have zero interest in learning new DSLs, I just want whatever will be most text based to use through an LLM.
Nope. Nope. Nope.
It’s like going back to Mongo without schemas and relational checks. We have perfectly good configuration languages with schemas, checks, imports, logic, etc. YAML is unacceptable in this profession.
Now, let me reverse the question—what would make you keep the tab open?"
Give me some well supported libraries in common general purpose languages to do this, codegen is pretty good these days and supporting 3 or 4 languages shouldn’t be an insurmountable achievement.
https://cuelang.org/
If all you’re doing is defining configurations (example is Kubernetes manifests helm charts etc) then great. But that isn’t what this is.
To your original question, I would actually advocate using the general purpose programming language for most use cases. Learning a new DSL, like you mentioned, is overhead from both a usability and maintainability perspective. I haven’t used jsonnet before but I know that cuelang gives you some power tools around typing, config validation, templating etc. it’s essentially purpose made for configuration management and tooling so it’s probably going to be really good at that. I don’t know if it’s worth using over a suite of language specific tools like Pydantic + Jinja though because when you’re using a general purpose language like python you have a whole, much larger ecosystem of tools and libraries you also have access to and can pull from.
Some drawbacks of plain YAML, and of tools that use string templating to render YAML:
Unrelated to OP, but you can leverage Tanka to extend helm charts with functionality not provided by upstream.https://tanka.dev/
Cuelang etc like siblings mentioned are decent enough but the real scalable solutions here are made available in general purpose programming languages.
Though I will say that Temporal's use case is probably not really well mapped to CI/CD - though it could be used for it (which is why I didn't mention it). It's primary strength is robust, long lived workflows with intelligent retries and the like - you typically want your CI/CD to be as fast as possible and while you want retries and resilience etc it's not as important as some other things (like being hermetic, reproducible, and cached).
tldr is Temporal is more general-purpose: for reliable programming in general, vs data pipelines. It supports many languages, and combining languages, has features like querying & signaling, and can do very high scale.
CI/CD is a common use case for Temporal—used by HashiCorp, Flightcontrol, Netflix: https://www.youtube.com/watch?v=LliBP7YMGyA
This is definitely outside of the use cases described but I can definitely see myself hooking this up in an IFTTT style to funnel things into my todo systems using the HTTP provider.
Will poke around this soon.
I'm the maker of an alert-generating tool (OnlineOrNot), how would I go about adding an integration for Keep?
> i think a few major points would be: 1. we're much more integrated and focused on the tools (and even more specifically on the monitoring tools), we actually integrate with their APIs and not only receive events from. 2. trying to be a lot simpler, modern UI, zero-clicks concepts, etc. 3. they're super cool and we learn a lot from them