HN user

valyala

2,324 karma

Core developer at VictoriaMetrics

Posts218
Comments377
View on HN
harmful.cat-v.org 5h ago

Encyclopedia of Things Considered Harmful

valyala
3pts0
internals-for-interns.com 2d ago

Understanding Go AI Inference: What Is Inference?

valyala
2pts0
coroot.com 12d ago

The hard part of AI root cause analysis is no longer the model

valyala
3pts0
antonz.org 12d ago

Go-Flavored Concurrency in C

valyala
11pts0
internals-for-interns.com 15d ago

Understanding the Go Runtime: Profiling

valyala
19pts8
internals-for-interns.com 15d ago

MMAP vs. pread in a real Go storage engine

valyala
2pts0
internals-for-interns.com 25d ago

Understanding the Linux Kernel: The Scheduler

valyala
35pts8
internals-for-interns.com 1mo ago

Understanding the Go Runtime: The Reflect Package

valyala
3pts0
rtfm.co.ua 2mo ago

VictoriaTraces: Tracing, Observability, and OpenTelemetry0

valyala
2pts0
internals-for-interns.com 2mo ago

Understanding the Go runtime: the "select" statement

valyala
4pts0
internals-for-interns.com 2mo ago

Understanding the Linux Kernel: The Linux Kernel Startup

valyala
80pts21
www.gouthamve.dev 2mo ago

Lies, damned lies, and Elastic's benchmarks

valyala
2pts0
internals-for-interns.com 2mo ago

Understanding the Go Runtime: Slices, Maps, and Channels

valyala
3pts0
rtfm.co.ua 2mo ago

Claude Code: Creating Kubernetes Debugging AI Agent for VictoriaMetrics

valyala
1pts0
coroot.com 2mo ago

Zero-config Go heap profiling

valyala
2pts0
internals-for-interns.com 3mo ago

Understanding the Go Runtime: The Network Poller

valyala
5pts0
victoriametrics.com 3mo ago

Optimizing Tail Sampling in OpenTelemetry with Retroactive Sampling

valyala
19pts0
internals-for-interns.com 3mo ago

Filesystems: Btrfs

valyala
2pts0
clickhouse.com 3mo ago

Agentic Coding at ClickHouse

valyala
1pts0
internals-for-interns.com 3mo ago

Understanding the Go Runtime: The System Monitor

valyala
2pts0
antonz.org 3mo ago

Porting Go's strings package to C

valyala
5pts0
medium.com 3mo ago

Top Things Not to Do at KubeCon

valyala
2pts0
internals-for-interns.com 3mo ago

Understanding the Go Runtime: The Garbage Collector

valyala
2pts0
antonz.org 3mo ago

Porting Go's io package to C

valyala
1pts0
victoriametrics.com 4mo ago

Benchmarking Kubernetes Log Collectors: Vector, Fluent Bit, OTEL Collector, etc.

valyala
2pts0
jespino.github.io 4mo ago

Having fun with the Go source code

valyala
3pts0
internals-for-interns.com 4mo ago

Understanding the Go Runtime: The Scheduler

valyala
158pts48
nanovms.com 4mo ago

Last Year in Container Security

valyala
3pts0
internals-for-interns.com 4mo ago

Understanding the Go Runtime: The Memory Allocator

valyala
100pts16
openai.com 5mo ago

Harness engineering: leveraging Codex in an agent-first world

valyala
2pts0

It would be great comparing NanoTDB to VictoriaMetrics. Both are optimized for running on Raspberry Pi. Both have built-in web UI for the exploration of the stored metrics. Both consist of a single executable written in Go, which stores the collected metrics to a single directory on a local filesystem. I don't know whether NanoDB is optimized for low-cost flash storage with small number of lifetime writes. VictoriaMetrics is optimized for such a storage, so it saves the flash drive life.

https://lwn.net is a goldmine of great contents about Linux kernel.

Let me explain why I post links to posts from https://internals-for-interns.com . I hate AI slop. The author of these posts uses AI for generating these posts - this is clearly visible via AI-generated images, emojis and em dashes. But the posts themselves do not contain misleading slop you could see in a typical AI-generated content. These posts are very clear and accurate. While they contain some inaccuracies and mistakes, the number of these mistakes is very low. These posts help learning and understanding complex technical topics such as internals of Go, filesystems, databases and linux kernel, by reading a clear easy to understand text.

It is important to differentiate between low-quality AI slop and high-quality contents generated with the help of AI. The posts at https://internals-for-interns.com belong to the second category.

While at it, I recommend reading the article from ClickHouse author on how to properly use AI - https://clickhouse.com/blog/agentic-coding .

VictoriaMetrics CTO here.

We at VictoriaMetrics took another approach. We tried using ClickHouse as a database for metrics in 2017, but then decided implementing a specialized database for metrics. This database uses ClickHouse architecture ideas for achieving the best performance and the lowest resource usage. The main difference between ClickHouse and VictoriaMetrics is that VictoriaMetrics is optimized solely for typical observability tasks. It supports all the popular data ingestion protocols, it provides promql-compatible querying API, it provides Graphite-compatible querying API, it provides Prometheus-compatible service discovery and relabeling, it provides Prometheus-compatible alerting and recording rules. It provides built-in web UI for quick exploration and analysis of the ingested metrics, with the ability to investigate the source of high cardinality. It consists of a single small executable (~20MB) without external dependencies with minimum configs and minimum maintenance. See https://altinity.com/wp-content/uploads/2021/11/How-ClickHou... for more details.

We used the same approach for building VictoriaLogs - a specialized database for logs. It uses the most appropriate architecture ideas from ClickHouse for achieving high performance and low resource usage. It is schemaless and zero-config. It contains of a single small executable without external dependencies. It accepts logs via popular data ingestion protocols. It provides a specialized query language for typical queries over production logs - LogsQL. This language is much simpler to use than SQL for querying typical logs. It provides a built-in web UI for quick exploration of the ingested logs. It provides a Grafana plugin for building arbitrary complex dashboards from the stored logs. It provides the ability to build alerts and metrics from the stored logs. See https://docs.victoriametrics.com/victorialogs/faq/#what-is-t...

Interesting solution! According to the provided numbers at "query latency" chapter, the query over cold data, which selects samples for 497 time series over 6 hours time range takes 15 seconds if the queried data isn't available in the cache. This means that typical queries over historical data will take eternity to execute ;(

S3 Files 4 months ago

This is a good alternative for those who wants storing petabytes of historical logs, metrics or traces in VictoriaLogs, VictoriaMetrics and VictoriaTraces, and wants saving 2x-4x on the persistent storage pricing (compare EBS pricing to S3 pricing).

If the server cannot keep up with the given workload because of some bottleneck (CPU, network, disk IO), then it cannot guarantee any response times - incoming queries will be either rejected or queued in a long wait queue, which will lead to awfully big response times. This doesn't depend on the programming language or the framework the server written in.

If you want response time guarantees, make sure the server has enough free resources for processing the given workload.

If you are struggling with observability solutions which require object storage for production setups after such news (i.e. Thanos, Loki, Mimir, Tempo), then try alternatives without this requirement, such as VictoriaMetrics, VictoriaLogs and VictoriaTraces. They scale to petabytes of data on regular block storage, and they provide higher performance and availability than systems, which depend on manually managed object storage such as MinIO.

Why do you need non-trivial dependency on the object storage for the database for logs in the first place?

Object storage has advantages over regular block storage if it is managed by cloud, and if it has a proven record on durability, availability and "infinite" storage space at low costs, such as S3 at Amazon or GCS at Google.

Object storage has zero advantages over regular block storage if you run it on yourself:

- It doesn't provide "infinite" storage space - you need to regularly monitor and manually add new physical storage to the object storage.

- It doesn't provide high durability and availability. It has lower availability comparing to a regular locally attached block storage because of the complicated coordination of the object storage state between storage nodes over network. It usually has lower durability than the object storage provided by cloud hosting. If some data is corrupted or lost on the underlying hardware storage, there are low chances it is properly and automatically recovered by DIY object storage.

- It is more expensive because of higher overhead (and, probably, half-baked replication) comparing to locally attached block storage.

- It is slower than locally attached block storage because of much higher network latency compared to the latency when accessing local storage. The latency difference is 1000x - 100ms at object storage vs 0.1ms at local block storage.

- It is much harder to configure, operate and troubleshoot than block storage.

So I'd recommend taking a look at other databases for logs, which do not require object storage for large-scale production setups. For example, VictoriaLogs. It scales to hundreds of terabytes of logs on a single node, and it can scale to petabytes of logs in cluster mode. Both modes are open source and free to use.

Disclaimer: I'm the core developer of VictoriaLogs.

You can expose Unikernel application metrics in Prometheus text exposition format at `/metrics` http page and collect them with Prometheus or any other collector, which can scrape Prometheus-compatible targets. Alternatively, you can push metrics from the Unikernel to the centralized database for metrics for further investigation. Both pull-based and push-based metrics' collection is supported by popular client libraries for metrics such as https://github.com/VictoriaMetrics/metrics .

You can emit logs by the Unikernel app and send them to a centralized database for logs via syslog protocol (or any other protocol) for further analysis. See, for example, how to set up collect ing logs via syslog protocol at VictoriaLogs - https://docs.victoriametrics.com/victorialogs/data-ingestion...

You can expose various debug endpoints via http at the Unikernel application for debugging assistance. For example, if the application is written in Go, it is recommended exposing endpoints for collecting CPU, memory and goroutines profiles from the running application.

There is no need in the operating system to run Unikernels. Every Unikernel includes parts of operating system needed for interacting with the underlying hardware. So Unikernels can run on bare metal if they know how to interact with the underlying hardware (i.e. if they have drivers for that hardware). Usually Unikernels are targeted to run on virtual machines because virtual machines have unified virtualised hardware. This allows running the same Unikernel on virtual machines across multiple cloud providers, since they have similar virtual hardware.

It monitors all the applications in your network and automatically detects the most common issues with the applications. It also collects metrics, traces, logs and CPU profiles for the monitored applications, so you could quickly investigate the root cause of various issues if needed.

I like that Coroot works out of the box without the need in complicated configuration.

Logging sucks 7 months ago

Nice article about the usefulness of wide events! It's pity it doesn't name open-source solutions optimized for wide events such as VictoriaLogs.

Logging sucks 7 months ago

Try open-source databases specially designed for traces, such as Grafana Tempo or VictoriaTraces. They can handle the data ingestion rate of hundreds of thousands trace spans per second on a regular laptop.

But what's the point to use these DIY object storage systems, when they do not provide durability and other important guarantees provided by S3 and GCS?

What is the purpose of MinIO, Seaweedfs and similar object storage systems? They lack durability guarantees provided by S3 and GCS. They lack "infinite" storage promise contrary to S3 and GCS. They lack "infinite" bandwidth unlike S3 and GCS. They are more expensive than other storage options, unlike S3 and GCS.

we did, I think the entire journey was 7 years long, communicated many times, over at least 6 major releases. maintaining dashboards in two languages increased complexity, whilst reducing compatibility, and gave a very large security surface to be worried about. we communicated clearly, provided migration tools, put it in release notes, updated docs, repeated it at conferences and on community calls

If this migration appeared to be so painful, why did you decide to finish it (and make users unhappy) instead of cancelling the migration at early stages? What are benefits of this migration?

many are adopting to gain independence from vendors

This is the worst reason to migrate to OTEL format for metrics, since every vendor and every solution for metrics has its' own set of transformation rules for the ingested OTEL metrics before saving them into the internal storage (this is needed in order to align OTEL metrics to the internal data model unique per each vendor / service). These transformation rules are incompatible among vendors and services. Also, every vendor / service may have its own querying API. This means that users cannot easily migrate from one vendor / service to another one by just switching from the old format to OTEL format for metrics' transfer. Read more about this at https://x.com/valyala/status/1982079042355343400

I'm the core developer at VictoriaMetrics - you can find this information by clicking my account name here.

Now it's your turn to disclose your employer name.