Hello, There!#
It’ is my space to share my experiences and open source contributions. You can talk to me in LinkedIn, let’s connect!
Blog
Contributions
GitHub
Certifications
Resume/CV
Recent blog posts#
Avoiding Over-Sharding in OpenSearch with Filtered Aliases per Environment
Blog Post Publish Date: 2026/11/11
This blog post covers one of the strategies I use to avoid over-sharding in OpenSearch. Instead of per-environment indexes, I write all logs into one index series and expose each environment as a filtered alias. The rule behind it is simple: the environment is an attribute of each document, so it belongs in a field, not in the index name. The cluster keeps fewer, fuller shards and one mapping, and OpenSearch Dashboards users still get a per-environment view that behaves like a dedicated index.
Scaling Down and Resizing OpenSearch Data Nodes Without Losing Data
Blog Post Publish Date: 2026/11/10
This blog post covers the patterns and API calls I use to scale down and resize OpenSearch data nodes without losing data. The rule behind all of them is simple: the data on a node you remove has to end up somewhere else first. If you take nodes away faster than the cluster can relocate their shards, you lose data.
OpenSearch + EC2 Instance Store: A Disruptive Approach to Hot Tier Storage
Blog Post Publish Date: 2026/11/08
This blog post covers running the OpenSearch hot data tier on EC2 Instance Store (local NVMe) instead of EBS. It explains why local disks perform better for this workload, and how to manage the risk of data loss with OpenSearch replication, Kubernetes, and Karpenter.
OpenSearch Shard Allocation: Balanced by Count, Rebalanced by Watermarks
Blog Post Publish Date: 2026/11/04
This blog post explains how OpenSearch distributes shards across data nodes. It covers how the default allocator works, why it can leave disk usage uneven in clusters with many small indices, and how disk watermarks correct that. It also covers other allocation mechanisms and a limitation I run into often: watermarks are one cluster-wide setting, even in clusters with different storage tiers.
Stop Extracting Metrics from OpenSearch Logs
Blog Post Publish Date: 2026/11/03
This blog post explains why counting log lines in OpenSearch is an expensive way to produce a metric. The same number captured as a Prometheus counter is stored once and read almost for free. When you cannot change the application, Fluent Bit can extract that metric while the logs are ingested, so OpenSearch never has to rebuild it at query time.
OpenTelemetry: A Framework for Decoupling Your Observability
Blog Post Publish Date: 2026/10/29
This blog post explains what OpenTelemetry is and what it’s for, without the abstract definitions. It covers the problem it solves, why it shines in microservice architectures, the complexity it brings, and when a simpler setup, such as plain Prometheus, is the better choice.
Hacking Your Zsh Terminal with Custom Widgets
Blog Post Publish Date: 2026/10/28
This blog post explains how to create custom Zsh widgets: shell functions bound to keyboard shortcuts through the Zsh Line Editor (ZLE). It’s the Zsh version of Hacking Your Bash Terminal with Custom Widgets, and it ends with the same widget that reruns the current command every two seconds.
Hacking Your Bash Terminal with Custom Widgets
Blog Post Publish Date: 2026/10/25
This blog post explains how to create custom Bash widgets: Bash functions bound to keyboard shortcuts through the GNU Readline library. It continues GNU Readline: The Magic Behind Terminal Autocomplete, and ends with a widget that reruns the current command every two seconds.
GNU Readline: The Magic Behind Terminal Autocomplete
Blog Post Publish Date: 2026/10/18
This blog post explains what GNU Readline is and how it powers the line editing, history navigation, and auto-completion you use every day in the terminal. It also shows the configuration I reach for the most: making the Up and Down arrows search your command history by prefix. It’s a small change that saved me a lot of keystrokes.
Vim for Kubernetes Certification Exams (CKA, CKAD & CKS)
Blog Post Publish Date: 2026/07/15
This blog post covers the minimal Vim configuration and the editing techniques I use in the Linux Foundation Kubernetes certification exams. You don’t need to master Vim. A small set of commands is enough to edit YAML manifests much faster under exam conditions.
Workstation Setup for Kubernetes Exams (CKA, CKAD & CKS)
Blog Post Publish Date: 2026/07/09
This blog post covers the workstation tweaks I use to work faster during the Linux Foundation Kubernetes exams: macOS settings that avoid keyboard and proctoring problems, Bash history search by prefix, a minimal Vim configuration, kubectl aliases, and how to copy all of it to each question node.
Helm Tips: Inspect Your Chart Context with JSON
Blog Post Publish Date: 2026/02/25
This blog post shows a simple way to debug Helm charts: dump the entire chart context as JSON and look at exactly what your templates can access. It helps most when
$ helm templatefails with a message that doesn’t point to the real problem, such as a typo in a.Valuespath.groupby + attrgetter: The Pythonic Way to Group Objects
Blog Post Publish Date: 2025/07/28
This blog post shows how to group objects by several attributes. It uses two standard library tools, itertools.groupby and operator.attrgetter, instead of building a dictionary of lists by hand. It also covers the one detail that trips most people up:
groupbyonly groups items that are next to each other.Kubernetes Logs Simplified: Everything You Need to Know About Pod Logging
Blog Post Publish Date: 2025/06/22
This blog post explains where Kubernetes stores container logs and how
$ kubectl logsand log shippers read them. It also covers the CRI log line format, how log rotation works, and how to ship pod logs to an external system with a DaemonSet. Kubernetes logging can look complex, but knowing these details makes troubleshooting much easier.Fluent Bit: Generating Log IDs with SHA-256 Hashes for Log Deduplication
Blog Post Publish Date: 2025/06/19
This blog post explains why Fluent Bit can deliver the same log more than once, and why deduplication needs a unique ID derived from the log content. It then shows how to generate a SHA-256 hash of each log line with only native Fluent Bit features, without external scripts or plugins.
Helm Charts: Development Practices from a Programmer's Perspective
Blog Post Publish Date: 2025/02/25
This blog post applies programming principles to Helm chart development. It covers when Helm’s complexity pays for itself, how it removes duplicated manifests (DRY), why over-templating hurts (YAGNI), and how library charts keep patterns reusable.
Logstash DB Enrichment: Tips and Traps
Blog Post Publish Date: 2025/02/16
This blog post covers the lessons from enriching logs in Logstash with data from a PostgreSQL database. It explains hidden behaviors of the
jdbc_streamingfilter that can stop log ingestion, and the JDBC connection string parameters that prevent them. These problems are hard to reproduce and not clearly documented, so I hope these tips save you hours of troubleshooting and forum searching.OpenSearch Concepts: Index and Shards
Blog Post Publish Date: 2025/01/05
This blog post explains two of the most basic concepts in OpenSearch administration: indices and shards. It covers what primary and replica shards are, how their counts affect performance and fault tolerance, and the API calls I use most to inspect indices and shards while troubleshooting.
Dynaconf: The Python Config Silver Bullet!
Blog Post Publish Date: 2024/07/21
This blog post gives a short overview of good practices for application configuration, explains the main features of Dynaconf, and walks through a hands-on example that extends it to read parameters from AWS Systems Manager Parameter Store.
Logstash Sniffing: Improving Log Ingestion in OpenSearch Scalable Clusters
Blog Post Publish Date: 2024/06/08
This blog post covers a common problem when Logstash ships logs to an OpenSearch cluster with autoscaling ingest nodes behind a load balancer: one node takes all the traffic while the others sit idle. It shows how the output plugin’s sniffing options fix that by discovering the nodes from the OpenSearch API.
fzf: Life is Too Short for Pipe Grep
Blog Post Publish Date: 2024/04/28
This blog post explains why fzf, a command-line fuzzy finder, replaced
Ctrl+R,find, andcommand | grepin my terminal. It also shows how to configure its Zsh widgets for searching history, files, and directories, with live previews.ZSH + Starship: A Productivity Masterpiece
Blog Post Publish Date: 2024/02/08
This blog post covers how I ended up with ZSH and Starship as my terminal setup. It walks through the shells I tried along the way, my favorite ZSH plugins and ZSH options, my minimal Starship configuration, and a step-by-step guide to reproduce it from scratch.
Systemd Drop-in Overrides: Customize Unit Properties Without Editing the Unit File
Blog Post Publish Date: 2023/11/19
This blog post covers a cleaner way to customize a systemd service. Instead of editing the unit file, you put your changes in an
override.confdrop-in file that systemd merges on top of the original. It explains why direct edits cause problems, how overrides work, and walks through a hands-on example.Logstash Modular Pipelines: Reusing Inputs, Filters, and Outputs Without Duplication
Blog Post Publish Date: 2023/11/12
This blog post covers a Logstash pipeline structure that removes duplicated code. Each
input,filter, andoutputlives in its own file, and every application’s pipeline is composed from those modules with a glob pattern and an environment variable. It includes an example configuration, a Docker Compose lab to try it, and my opinion on when the structure is worth it.What is the Cloud and why does everyone keep talking about it?
Blog Post Publish Date: 2023/10/21
This blog post explains what the Cloud is without technical jargon: the problem it solved, why it changed how software is built, when running your own servers still makes sense, and the costs that sales pitches tend to leave out. If you’ve ever heard someone say “it’s on the cloud” and weren’t quite sure what that meant, this post is for you.
