 Hi, I'm Paul Fantomet, various internet mediums, and Prometheus operator and Cube Prometheus maintainer. Also, I'm a senior software engineer at timescale working on TOPS and promscape projects. And at some time, I got this problem that I had to solve that is familiar probably to everyone. I need to get some data from some service that I don't have really access to the code, and I need to get that data into Prometheus server. So I tried to do the very stupid thing, let's just do curl for slash metrics, maybe it will render something. Unfortunately, of course not. And 404, so I went to documentation and then found that there's, hey, there's this get monitors method that you can get some data, and it actually returns some JSON, some JSON file, JSON format. But the API in question here was actually the uptime robot. I don't know if you're familiar, this is the external service that you can point and do synthetic monitoring something about your services. And the API is actually requiring you to do post HTTP request to get some JSON data. But how do I get JSON into Prometheus? It's still not Prometheus format. It's a JSON format, and I don't know why it's extras. But I went to Twitter and, hey, it's Julian saying that there is this thing called JSON exporter that can turn your REST endpoints and REST data into Prometheus data, and there's an example for using Twitter followers, putting that into Prometheus and graphing on a Grafana dashboard. So I did exactly that, apart from the fact that there are already like two or three uptime robot exporters, I didn't want to use them, so I used JSON exporter. And JSON exporter is just one configuration file that can transform your JSON object into actual metrics using JSON path. And that file actually shows how do you extract the data? How do you ask? You can say, what are your headers for the request? What is the body content for the request? And how do you get that metrics from the JSON object? And in this case, we can define some name for the metric, it's actually the prefix. Then you say in JSON path format, how do you extract the data from the JSON itself? And you can put some dynamic labels on your metrics using the values from the JSON. And on top of that, it's like you can use the same object to create multiple metrics by defining values and where you can find them. However, not all APIs are perfect, and sometimes you want to probably normalize that data. In my case, I wanted to have a simple status, is it up or not? Is it down? And unfortunately, that API says up is two and down is nine or something like that. So we can use recording rules from infuse to normalize that data to zero or one. And yeah, it worked. It actually worked. I get my instances from monitoring from uptime robot. I got them into Prometheus. And I figured, yeah, that's not enough. I'm running everything in Kubernetes. How do I put that configuration into Kubernetes? It's easy to put JSON exporter into Kubernetes, but how did I get that data with Prometheus? And I'm using Prometheus operator, there are two CRs that you can use. First is service monitor, which you can use for gathering JSON exporter data from the JSON exporter itself. And second is a probe CR, which was primarily designed to use in black box exporter scenarios. However, it works with SNMP exporter, with black box exporter, with JSON exporter, and probably overs that are fitting into the same category. And you can do that transformation. You can get that data from Prometheus, using Prometheus operator. And what was the goal? The goal was to create that particular alert. This is an alert that is taking data from black box exporter running inside the cluster, joining the data from external sources, in this case, uptime robot, joining them together. And if it's down, well, I get a page, because it's critical. Probably at some point, it will be running on Pura, because, well, SLOs. And if you do have any questions, catch me at KubeCon, DM me on Slack on Twitter. And if you want to know how everything of that works, or you want to deploy the same stack, there's my repository with all the manifests that you can use to deploy your own stack. Thank you.