# $0/month Observability with qryn

**Self-Hosted Observability** is not only viable - its the best way to get your stack under control without creating dependencies on cloud services or specific service providers and more importantly - without making your job harder in the process.

We run a cloud service and there's no shame in admitting the overhead cost for customers can become a deal breaker when size and scale grow larger than life.

**If you’re trying to migrate off Grafana Cloud/AWS/Datadog/etc this is for you!**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727378299764/eb7314d8-8bab-4466-a16f-84613fb2f2ec.png align="left")

## ⭐ Self-Hosted + All-in-One

Here's our solid **opensource** recipe you can cook with three simple ingredients:

* ⭐ **qryn: all-in-one polyglot stack**
    
    ⭐ **clickhouse: fast OLAP database**
    
    ⭐ **Opentelemetry: industry standard ingestion**
    

*This will get you covered for any Logs, Metrics, Traces and Profiles - at once.*

![oracle-cloud-logo | Scio Info Tech](https://scioinfotech.com/wp-content/uploads/2019/10/oracle-cloud-logo-e1572318472568.png align="left")

### ⭐ Oracle Cloud: Always Free?

**Hello, Oracle.** Now, I'm not their biggest fan but respect where it's due:

The ***"<mark>Always-Free”</mark>*** Oracle Cloud tier generously allows running [ARM Ampere A1](https://www.oracle.com/cloud/compute/arm/) instances with 3,000 CPU hours and 18,000 GB hours per month, which affords exactly 4 CPUs and 24GB of RAM with a ~100GB of storage volume. *For free. Forever.*

#### Grab a FREE AMPERE ARM64 Instance

First, sign up to **Oracle Cloud** to gain access to their **Always-Free** Tier.

* Browse to the **Compute** section and **Create a New Instance**
    
* Modify the parameters in the **Image and Shape** section by clicking **Edit**
    
* Choose an **AMPERE** shape, and ***max out*** *the resources*:
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1689622117494/8170ca40-c872-4943-98f2-768848ebdb6b.png align="center")

*A few more clicks and you're ready to go. Refer to the Oracle docs for more options!*

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong><mark>Do NOT forget to download the generated keys for SSH access!</mark></strong></div>
</div>

### ⭐ Prepare your **ARM64** Instance

Once your Ampere instance is ready, install the latest **Docker** for **arm64**

```bash
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
```

### ⭐ Install qryn

The step is magic: use **qryn** transforms your instance into a polyglot stack!

*Our stack natively supports arm64 architecture, so no special actions are needed.*

Let’s deploy the full **qryn** bundle using `docker compose` on our brand new host:

```bash
$ git clone https://github.com/metrico/qryn-oss-demo
$ cd qryn-oss-demo

$ docker compose up -d
```

*Wait for all services to start and you’re ready to go!*

**Grafana** is included on port **3000** preconfigured with all the **qryn** datasources, demo dashboards and demo telemetry instantly ready to explore and play with:

![](https://user-images.githubusercontent.com/1423657/186014786-165b18da-e808-4cf7-a6fc-eb90df705400.gif align="left")

### ⭐ Add Opentelemetry

It’s time to ingest your own data into the system using Opentelemetry.

**Opentelemetry** is the standard when it comes to observability instrumentation. Paired with **qryn** it allows methodic ingestion of any telemetry type *(Logs, Metrics, Traces, Profiling)* using common interfaces compatible with many vendors.

> *"OTEL" usage = no vendor or tech lock-ins as part of your deployments.*

The qryn [**otel-collector**](https://github.com/metrico/otel-collector) allows ingesting massive amounts of data directly into the bundled **ClickHouse** instance using the native binary drivers and delivering incredible throughput and speed, easily extensible with object storage.

### ⭐ Service Ports

The qryn API supports ingestion of several protocols but for our high-performance setup we will leverage the [qryn opentelemetry collector](https://github.com/metrico/otel-collector) for writing into our database.

The following **service ports** are exposed by the **default qryn collector** config:

* * "3200:3100" **\# Loki/Logql HTTP receiver**
        
        "3201:3200" **\# Loki/Logql gRPC receiver**
        
        "8088:8088" **\# Splunk HEC receiver**
        
        "5514:5514" **\# Syslog TCP Rereceiverceiver**
        
        "24224:24224" **\# Fluent Forward receiver**
        
        "4317:4317" **\# OTLP gRPC receiver**
        
        "4318:4318" **\# OTLP HTTP receiver**
        
        "14250:14250" **\# Jaeger gRPC receiver**
        
        "14268:14268" **\# Jaeger thrift HTTP receiver**
        
        "9411:9411" **\# Zipkin Trace receiver**
        
        "11800:11800" **\# Skywalking gRPC receiver**
        
        "12800:12800" **\# Skywalking HTTP receiver**
        
        "8086:8086" **\# InfluxDB Line proto HTTP**
        
        "8062:8062" **\# Pyroscope jprof Receiver**
        

### ⭐ Telemetry Agents

You’re ready to choose any of the supported agents and start sending data:

* [**Vector**](https://vector.dev/) *(logs, metrics)*
    
* [**Grafana Agent**](https://grafana.com/docs/agent/latest/) *(logs, metrics, traces)*
    
* [**Alloy**](https://github.com/metrico/otel-collector) *(logs, metrics, traces, profiling)*
    
* [**Opentelemetry Collector**](https://github.com/metrico/otel-collector) *(logs, metrics, traces, profiling)*
    
* **Any Agent** compatible with the qryn APIs *(Loki, Prometheus, Tempo)*
    

**<mark>That’s it! Your free Polyglot Observability stack is ready to use and abuse!</mark>**

### ⭐ Extending Capacity

If the ~100GB of onboard storage run out, attach [S3 storage to your setup](https://blog.qryn.dev) or take a look at our sponsors at [gigapipe](https://gigapipe.com) and their flat-price qryn observability SaaS

[![](https://github.com/metrico/qryn-docs/assets/1423657/a5164f98-d3ed-4638-afe5-c87d252c74af align="left")](https://qryn.metrico.in)

> *That's it. One API. One datastore. A thousand formats and use cases* 🎉
