Posts by Markus Zoeller

Command Hooks with the zsh Shell

This post shows a small example how command hooks of the zsh shell can be used to print timestamps before and after a command execution. This can be helpful in postmortems of operations when it can be important to know exactly when you’ve seen a specific output or how long a command took.

Read more ...


Elastic Stack (formerly ELK) - Kibana (part 1)

Kibana is the web UI to visualize data in the data store called Elasticsearch. It’s the user facing component in the Elastic Stack, formerly called ELK stack. This post is based on previous posts which show the basics of Logstash and Elasticsearch and will talk about a few ways how Kibana can help you make sense out of your logs.

Read more ...


The 2018 KubeCon and CloudNativeCon in Copenhagen, Denmark

This post is my recap of the KubeCon and CloudNativeCon conference which took place in Copenhagen (Denmark) from May 1-4, 2018. I’ll go briefly through the sessions I attended and the notes I took.

Read more ...


Ubuntu with Debian Sid APT repository

Ubuntu is great in my opinion, and of the reasons for it is its use of recent versions for the packages in their APT repositories. But what if you need a package in an even more recent version and cannot wait for the next release? The Debian Sid release, the unstable development version, has those newer packages and they can be used in an Ubuntu with the help of APT package pinning and this post shows the things you need to know for that.

Read more ...


Learning Go (part 1) - Conway's Game of Life

The Go programming language is currently fashionable, and it’s been four years since the last time I started to learn a new programming language (Python), so I decided to start a series about my learning attempts. As I also want to know more about Kubernetes, my goal is to learn enough Go in the next few months to read the Kubernetes code base comfortably. As a starting point for this multi-part series, I’ve chosen Conway’s Game of Life [1], because its rules are simple but more complex than a typical hello world example.

Read more ...


Quick Tip: Ansible target hosts with wildcard

This is a short quick tip about Ansible. TL;DR: it’s possible to use a wildcard in the target hosts specifier. This became useful to me when I dynamically created the inventory based on Ansible facts.

Read more ...


HTML5 slides with Reveal.js, Markdown and Docker

Presentation slides. They can be a great tool for communicating ideas to others. I was looking for a way to create slide decks where I can specify the content as plain text and have it separate to the rendering. I’m sure this is somehow possible with PowerPoint or OpenOffice, but I didn’t bother to look for it. This post shows how I specify the content in a Markdown file and let it render by Reveal.js which I packed into a Docker image.

Read more ...


Elastic Stack (formerly ELK) - Logstash (Part 2)

This is a follow-up to the previous post Elastic Stack (formerly ELK) - Logstash (Part 1). We continue were we left of the last time, and dive right into it. No intro, no explanation of concepts or terms, only configuration of Logstash pipelines.

Read more ...


Elastic Stack (formerly ELK) - Logstash (Part 1)

In this post I’ll talk about the Logstash service, which is part of the Elastic Stack, formerly known as ELK stack. The purpose of Logstash is to ingest (logging) data, do some transformation or filtering on it, and output it into a data store like Elasticsearch. For details about Elasticsearch, you can get more information in my previous post Elastic Stack (formerly ELK) - Elasticsearch.

Read more ...


Project documentation with reStructuredText and Sphinx

When it comes to documenting your project, especially the non-code parts, you might face a plethora of opinions what the “correct approach” might be. Some love Word documents, some favor PowerPoint slides and some like documents written in a markup language. I’m one of the latter. This post will show my favorite, reStructuredText with Sphinx. It will list the capabilities I usually need when documenting, and how to do it with the features of Sphinx and reStructuredText.

Read more ...


Quick Tip: Ansible commands as non-root user with environment variables

This is a short quick tip. When executing Ansible playbooks, you might need to execute a task as another user than the one you established the connection with. This post shows an example how to do it and deal with the environment variables.

Read more ...


Elastic Stack (formerly ELK) - Elasticsearch

When something goes wrong in an environment, the people trying to fix it mostly start by looking at the log files persisted on the local filesystem of the server. This gets more cumbersome the more server and services participate. Highly distributed applications, developed and deployed as microservices in a cloud environment exacerbate this too. A centralized logging server helps to ease the pain. In this post I’ll talk about the popular Elasticsearch service, which is part of the Elastic Stack, formerly known as ELK stack.

Read more ...


Release Notes with reno

“What features merged since the last release?”“Did we introduce something which might break a deployment?”“Let me grep through the commit history to check what happened.” Remember sentences like these when you’re about to release? If you like this fire-fighting mode, ignore this post. If you want to have a more relaxed release, this post will show you how to use a tool called reno to manage your release notes.

Read more ...


Recommendation: The Five Dysfunctions of a Team

Did you ever wonder why you’re (again) in a meeting without a clear result? Do you feel like the topics got already discussed in a previous meeting? How often did your hear the sentence “Someone should work on that.”? Let’s be honest, our work family is sometimes a little dysfunctional. Join me in my personal reflection of the book The Five Dysfunctions of a Team: A Leadership Fable from 2002 by Patrick Lencioni, which helps to understand what’s happening.

Read more ...


Ansible Playbook Refactoring into Roles

In a previous post (Monitoring with Prometheus), we created one playbook which contained all the logic. This post will show how to do a refactoring of a playbook into smaller, reusable Ansible Roles. This allows us to hide complexity and to provide defined interfaces. It also increases the ability to work in parallel on different parts of your Infrastructure as Code (IaC) project. I won’t explore how you publish your roles to Ansible Galaxy but merely show a basic recipe how you move Playbook logic step by step into project specific roles.

Read more ...


The 2017 Open Source Summit Europe in Praque

This post is my recap of the Open Source Summit Europe conference which took place in Praque (Czech Republic) from October 23-26, 2017. I’ll go briefly through the sessions I attended and the notes I took.

Read more ...


Monitoring with Prometheus

One of the common causes for service degradation or interruption is still the failure or exhaustion of your basic infrastructure resources. This post gives you an intro how you can monitor your basic resources with Prometheus. It shows the setup with Ansible and the data visualization with Grafana. The post does not show all the capabilities of Prometheus. In fact, I’m showing you only the simplest configuration. The benefit of this post is, that it takes you from start to finish and gives you a playground you can easily recreate when things go wrong, thanks to Vagrant and VirtualBox. Beware, as this is a non-trivial (non-hello-world) example, this post is really long.

Read more ...


Recommendation: The Phoenix Project

This is my take on the book The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win from 2014 by Gene Kim; Kevin Behr; George Spafford. It’s more of a personal reflection why I like the book – and why I think you should read it too – and less of a review.

Read more ...


Basics about Logrotate

Ever lost a host because one of the services on that host used all available disk space with its logs? logrotate is a common tool which truncates your logs to make sure this won’t happen anymore. This post is a short how-to.

Read more ...


OpenStack Nova Scheduling based on CPU architecture

If you have an OpenStack cloud with compute nodes with different CPU architectures, then this post will give you the needed information about how to tag your guest images, which enables the Nova scheduler to find a target with the correct CPU architecture.

Read more ...


Setup Grafana + Graphite + Statsd

If you ever played around with time series data and wanted to visualize them with graphs in a nice way you probably have heard about Grafana. This post provides a step-by-step instruction on how to build a Grafana-playground in about 15 minutes. The setup will be build of statsd to collect metrics, graphite to store those metrics, and Grafana to visualize those metrics. We will also create and push custom metrics and create templated graphs based on them. This post won’t provide any in-depth details about statsd, graphite and Grafana itself.

Read more ...


OpenStack's Bug Management

This post intends to give you enough background to play an active part in working with bugs in OpenStack. This includes an understanding of the basic life cycle a bug goes through and in which state you can contribute in which way. It also clarifies some possible misunderstandings and gives a few best practices. In general, the bugs of a project (like Nova, Cinder, Neutron and others) can be found in our issue tracker Launchpad. The lists of bugs are available at https://bugs.launchpad.net/<projectname> for example https://bugs.launchpad.net/nova for the Nova project.

Read more ...