はじめに
「Kubernetesをソースコードからビルドしてローカル環境にkubernetes clusterを構築する」で構築した環境では、/tmp以下に各種サービスのログが出力されています。これらのログをいちいちtail -fするのが面倒なのと、色付けされていないため高速に流れていくログでは何が問題なのかが直観的で分からないため、OpenStackのdevstack風に、ログをscreenに表示して色付けする方法を試してみました。
公式でいい方法があればうれしいのですが、少し探した限りでは見つからず断念。
Logs:
/tmp/kube-apiserver.log
/tmp/kube-controller-manager.log
/tmp/kube-proxy.log
/tmp/kube-scheduler.log
/tmp/kubelet.log
パッケージのインストールとスクリプトの配置
ログの色付けには、cczeというツールを使います。予め定義されているキーワードと配色、例えばERRORは赤色で表示などの設定を使ってログをカラーで表示してくれます。
% wget https://dl.fedoraproject.org/pub/epel/7Server/x86_64/c/ccze-0.2.1-11.el7.x86_64.rpm
% rpm -ivh ccze-0.2.1-11.el7.x86_64.rpm
あと、screenパッケージもない場合は追加が必要です。
sreenを起動するための設定ファイル。stuff行末尾の^Mは、ctrl+v ctrl +mで入力出来ます。
% cat k8s-screenrc
sessionname k8s-debug
hardstatus alwayslastline '%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})'
setenv PROMPT_COMMAND /bin/true
screen -t shell bash
screen -t kube-apiserver bash
stuff "sudo tail -f /tmp/kube-apiserver.log | ccze -A^M"
screen -t kubelet bash
stuff "sudo tail -f /tmp/kubelet.log | ccze -A^M"
screen -t kube-controller-manage bash
stuff "sudo tail -f /tmp/kube-controller-manager.log | ccze -A^M"
screen -t kube-proxy bash
stuff "sudo tail -f /tmp/kube-proxy.log | ccze -A^M"
screen -t kube-scheduler bash
stuff "sudo tail -f /tmp/kube-scheduler.log | ccze -A^M"
screenを起動するためのスクリプトです。screenセッションがあれば既存のものを、なければ新規に作ります。(ベースは、devstackのrejoin.shです。)
% cat k8s-screen.sh
#! /usr/bin/env bash
TOP_DIR=`dirname $0`
SCREEN_NAME="k8s-debug"
SCREEN_FILE="k8s-screenrc"
SCREENRC=$TOP_DIR/$SCREEN_FILE
# if screenrc exists, run screen
if [[ -e $SCREENRC ]]; then
if screen -ls | egrep -q "[0-9]+.${SCREEN_NAME}"; then
echo "Attaching to already started screen session.."
exec screen -r $SCREEN_NAME
fi
exec screen -c $SCREENRC
fi
echo "Couldn't find $SCREENRC file;"
exit 1
k8s-screen.sh実行結果
本当はE0xxx行を強調するなどできればいいのですが、最低限エラーに気づけるようになったのでよしとします。