How to send Docker logs to Google Cloud Logging

In the last weeks we migrated most of our infrastructure to Google Cloud using many of the provided services (Kubernetes Engine, Stackdriver Monitoring, Container Registry, Cloud SQL, …).

Before we used logspout to aggregate all the logs generated in our Docker containers on papertrail. So we were quite happy to see that there is a good log aggregation service included out of the box for applications running on Google Kubernetes Engine (GKE).

Having most of the logs inside of Google Cloud Logging we were wondering if it is possible to ditch papertrail completely and to redirect the log from all our Docker containers to Google Cloud Logging even if they are running on external servers.

It turns out that the Google Cloud Logging driver (gcplogs) is an official Docker logging driver, already included in the Docker daemon. So here is what we had to do:

1. Create a service account in Google Cloud

This account will be used by the docker daemon to authenticate with Google Cloud. This page describes how to create a service account. Do not give him the role Owner as described in the documentation, all this account needs is the role Logs Writer.

2. Configure the docker daemon

This was the most tricky part. In the documentation we found it was always stated that the gcplogs driver uses the environment variable GOOGLE_APPLICATION_CREDENTIALS to look for the JSON key file generated in step 1.

Since the docker daemon is controlled by systemd on our Ubuntu installations we were able to configure the authentication environment variable as described here: in the section [Service] of the file /lib/systemd/system/docker.service we added the line

Environment="GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json"

To bring this change into effect it is required to run the following commands:

sudo systemctl daemon-reload
sudo systemctl restart docker

Now we are able to run docker containers and redirect their logs to Google Cloud by using the command line arguments like:

docker run -d --log-driver=gcplogs \
--log-opt gcp-project=google-cloud-project hello-world

We can find the logo out put in the Google Cloud Logging section as if the were generated by a GCE VM Instance:

3. Make gcplogs the default

We wanted to use gcplogs as the default log driver for all the docker containers running on our servers. This can be done by adapting the file /etc/docker/daemon.json:

{
"log-driver": "gcplogs",
 "log-opts": {   
    "gcp-meta-name": "servername",
    "gcp-project": "google-cloud-project"  
}
}

This way we do not need to add log-driver and log-opt arguments when running our docker containers.

Conclusion

Having all the log output piped into Google Cloud Logging allowed us to set up metrics very easily (for example number of HTTP requests to certain services) and display them in Google Cloud Stackdriver Monitoring.

Since all our team members already have Google Accounts it was also very easy to give them access (role Logs Reader) to the logs generated by our various applications, so they can look into them on their own, which frees up resource on the operations team.

MySQL alter table Geschwindigkeit

Angeregt durch die Diskussion mit Andre in unserer letzten Podcast Episode “Episode 78 – PROD Deployment” habe ich mir ein Testsetup erstellt, um zu prüfen, ob das Hinzufügen von Spalten zu Tabellen mit viel Inhalt in neueren MySQL Versionen wirklich schneller geworden ist. Das Ergebnis ist ziemlich eindeutig JA:

altertable

Es sieht also so aus als ob ein Update hier wirklich die erhofften Verbesserung bringen wird. Den Test mit dem pt-online-schema-change habe ich noch nicht durchgeführt, davon erwarte ich mir auch noch Einiges.

10 Jahre bloggen 

 
Vor ein paar Tagen hatte ich diesen Screen beim Einstieg in die WordPress App auf meinem iPhone. 10 Jahre ist es also her, dass ich meinen Account auf wordpress.com angelegt habe, wow!

Ich habe ja nicht mit WordPress angefangen zu bloggen, meinen ersten Blog hab ich auf jroller.com angelegt – und den gibt es sogar noch: http://www.jroller.com/tOMPSON/ – es sind also schon mehr als 10 Jahre.

Anfang dieses Jahres habe ich wieder mehr Lust bekommen zu bloggen. Nachdem ich in den letzten Jahren vermehrt auf facebook und Twitter aktiv war hat die Post Frequenz hier ziemlich abgenommen. Ich verspüre irgendwie den Bedarf meine Kommentare länger als ein paar Worte sein zu lassen. 

Witzig dass sich das so mit dem 10-Jahres-Jubiläum trifft.

Microsoft Quartalszahlem

Windows Phone kommt nicht aus den Löchern

Youtube P.I.P.

Mit iOS 9 hat Apple das Multitasking auf iPads stark verbessert. Neben der Möglichkeit mehrere Apps nebeneinander am Screen anzuzeigen, finde ich den Picture-in-Picture Modus für Videos am coolsten.

Bei der eingebauten iOS Video App, Amazon Instant Video und Twitch funktioniert das zum Beispiel schon. Wenn man ein Video in diesen Apps laufen hat, kann man einfach auf den Homescreen oder in eine andere App wechseln und das Video in einem kleinen Fenster am iPad weiterlaufen lassen.

Leider haben noch nicht alle Entwickler ihre Apps upgedated, um diese Funktion zu unterstützen. Youtube, Netflix, und TV Thek App können das leider deshalb noch nicht.

IMG_0012

Für Youtube Videos gibt es einen Workaround. Wenn man die URL des Videos in das Eingabefeld auf Youtube P.I.P. kopiert, kann man das danach geladene HTML5 Video auch parallel weiterlaufen lassen, während man wieder produktiv wird ;)