blog.8-p.info

Last week, I was writing a document that utilizes OpenTelemetry, sent that to Michael Hausenblas and Jaana Dogan, somewhat out of blue. Both kindly reviewed the document and corrected misunderstanding I had.

So, now I have better understanding regarding OpenTelemetry!

What is OpenTelemetry?

According to the official website;

An observability framework for cloud-native software.

OpenTelemetry is a collection of tools, APIs, and SDKs. You can use it to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software’s performance and behavior.

But it is not a “framework” in the sense of Rails or Django. It wouldn’t take your “main” function. “A collection of tools, APIs, and SDKs” makes much more sense, but it is really all-around.

OpenTelemetry Protocol

First there is OpenTelemetry Protocol (OTLP). It is a wire protocol over either gRPC or HTTP/1.1. Unlike Prometheus, where you can expose an endpoint (in other words, your application listens a TCP port). OpenTelemetry protocol is “push”. So Your application would send logging, metrics and tracing data to an OpenTelemetry endpoint somewhere, either on localhost or remote.

OpenTelemetry Collector

Then there is OpenTelemetry Collector, which is an implementation that can send/receive logging, metrics and tracing data in various formats, including the OpenTelemetry Protocol.

Basically the collector is acting like fluentd. It is pluggable and can be configured in a lot of different ways.

Honestly speaking, having this pluggable collector under OpenTelemetry umbrella confused me in the beginning. You could configure the collector to take tracing information from Jaeger and publish the information to Zipkin. At least on the configuration-level, OpenTelemetry Protocol is treated as just “one of them”. Don’t they want to push OpenTelemetry as a protocol?

Is it a good idea to use TCP in localhost-only communications?

I don’t know. Assigning TCP ports during development is tedious though.

What does it mean for containerd?

I don’t know either.

There is an open draft pull request to add OpenTelemetry for tracing. The author is actually my colleague. I have also opened an issue about utilizing OpenTelemetry for metrics in addition to Prometheus.

Regarding logging, I actually like the fact systemd takes care of logging. Adding all daemons OpenTelemetry logging support seems to be going backward.

C4-PlantUML looks good

May 29, 2021

C4-PlantUML is a PlantUML library based on the C4 model. C4 means “Context, Containers, Components, and Code”, so four C’s.

PlantUML’s default color scheme it’s own. C4-PlantUML removes the PlantUML-ness nicely.

My only pet peeve is about C4’s terminology. Most of diagrams I write are somewhat related to Linux containers. So “containers” in my diagrams must mean “Linux containers”, whereas it means a lot of different things in the C4 model.

Not Docker! In the C4 model, a container represents an application or a data store. A container is something that needs to be running in order for the overall software system to work.

That really doesn’t work for me, sadly.

Magit is one of the reasons I still use Emacs.

A few days ago, I tried Edamagit. It looked great, but I wanted to split a frame 1 horizontally as like Emacs. Sadly I can’t because Visual Studio Code itself can’t split a frame horizontally. This modern 286.9 MB editor which has entire Blink inside can’t split a frame horizontally…

I use Emacs less than what I used to be, but it probably won’t go down to zero. I still like Emacs.


  1. It is a window. Emacs calls what modern people call windows “frames”. ↩︎

Why do I setup Raspberry Pi 3 in 2021? Because I have the Pi 3 sitting around for years. The CD player I made last year didn’t go to “production”.

Preparing a SD card

Raspberry Pi Imager downloads OS images in addition to writing that to a SD card.

Setting up a screen

I have Quimat’s 3.5” TFT screen, that I bought in 2019. LCD-show repository has shell scripts that configure Raspberry Pi to use the screen. rotate.sh script in the repository rotates the screen’s orientation from software.

Showing Chromium without chrome

Raspberry Pi Touchscreen Kiosk Setup (10 Steps) is pretty much what I did.

Since I have installed Raspberry Pi’s default GUI already. I did sudo update-alternatives --config x-session-manager to use Openbox.

Giving Static IP

TCP/IP networking

Adding the below to /etc/dhcpcd.conf.

interface wlan0
static ip_address=192.168.1.3/24
static routers=192.168.1.1
static domain_name_servers=1.1.1.1

SSH

How To Configure SSH Key-Based Authentication on a Linux Server

% ssh-copy-id pi@192.168.1.3

Then comment out the following on /etc/ssh/sshd_config.

PasswordAuthentication no

Cyberdeck

May 11, 2021

I’ve spent too much time browsing these cyberdecks. Cyberdecks are portable computers with cyberpunk aesthetics.

I may need to build one, probably simpler one like Minimalist Cyberdeck.