概要
AWS CloudWatch Logsの表示が見にくすぎるというのは全人類が抱える問題だと思いますが、それを見やすくするCLIツールを作りました。
既にawslogsというツールがあり、こちらも便利なのですがロググループをまたいでtailすることが出来なかったので自分で作りました。
あと個人的にはPythonのCLIツールをグローバルに入れたくな...
他にもいくつかツールあり、そちらと比べて機能的に大きく異なるわけではないので、今困ってない人は良いと思います。色合いが良い感じとかふわっとした部分は結構違うと思います。
Utern
以下に置いてあります。
https://github.com/knqyf263/utern
sternというKubernetesでログを表示するのに使われる便利なツールがあるのですが、それを参考に作ったのでuternというツール名にしました。意味は特にないです。
使い方
AWSのAPI実行用の認証情報は ~/.aws/config
や ~/.aws/credentials
から取得するので、事前にawscliが使える必要があります。
それさえ設定されていれば、単にロググループにマッチする文字列を渡せばよいだけです。正規表現も使えます。
上のGIFだとserverという文字列を渡しているので、serverにマッチするロググループを探します(proxy-serverとweb-server)。そしてそのロググループ内のログストリームを全て取得します(proxy01, proxy02, web01, web02, web03)。
あとはそれらの全てのログをtailします。
説明は以上です。とにかくシンプルに使えるツールにしたかったので、使い始めるのにこれ以外知るべきことはありません。シンプル!簡単!便利!
何も指定しないと5分前以降のログを表示するため、5分間のログが全くない場合は何も表示されません。後述の時刻指定オプションを利用して下さい。
機能
メインの機能について紹介します
-
複数のロググループを指定可能
- ロググループ名を正規表現で渡せるため、異なるロググループでも同時に表示できます
- これは他のツールでは出来ないと思います
-
複数のログストリームを指定可能
- ログストリーム名を正規表現で渡せるため、異なるログストリームでも同時に表示できます(省略すると全て)
-
ロググループやログストリームごとに異なる色が自動で付けられる
- どの行が同じログストリームのログか、などがすぐ分かります
- sternで気に入っているところだったのでパクりました
- 時刻指定が柔軟
- 5分前以降のログが見たい場合に5mのように書けます
- 2019-01-02T03:04:05ZのようなRFC3339に準拠した時刻指定も可能です
- フィルタリング
- ログ文字列によるフィルタリングが可能です
- インストールが簡単
- ビルドしたバイナリをReleasesに置いてあります
- Homebrew経由でもインストール可能です
コマンド例
ロググループのリスト表示
初っ端からuternのコマンド例じゃないのですが、ロググループの表示をするためのawsコマンドを貼っておきます。
uternは単機能に絞りたかったのであえてリスト表示機能はつけてません。
ただ内部的には同じAPIを叩いているため、実装する場合は数行足せばいけます。
awsコマンドいちいち打つの面倒だから付けてくれと言われたら考えますが、一旦 Small is beautiful
の精神でやっています。
$ aws logs describe-log-groups --query "logGroups[].[logGroupName]" --output text
ログストリームのリスト表示
$ aws logs describe-log-streams --log-group-name log-group-name --query "logStreams[].[logStreamName]" --output text
正規表現によるロググループのフィルタ
$ utern "web-\w"
ログストリームのフィルタ
--stream
は -n
でも指定可能です
$ utern --stream log-stream-query log-group-query
ログストリームのprefixによるフィルタ
更新されるロググループが大量にある場合は、上のフィルタだと遅くなる可能性があります。
その場合は--stream-prefix
を使うとAWSのAPIで直接フィルタできるため、上の単純な文字列指定より高速になります。
--stream-prefix
は -p
でも指定可能です。
$ utern --stream-prefix log-stream-prefix log-group-query
ログストリームの正規表現とprefixによるフィルタ
prefixである程度絞ったあとに文字列一致にすると高速かつ柔軟にフィルタ可能です
$ utern --stream-prefix log-stream-prefix --stream log-stream-query log-group-query
1時間以内のログを表示
--since
は -s
でも指定可能です
$ utern --since 1h log-group-query
2019-01-02 03:04:05 JST以降のログを表示
RFC3339に準拠している形で指定可能
$ utern --since 2019-01-02T03:04:05+09:00 log-group-query
10分前から5分前のログを表示
この場合はtailされずログを表示した時点で終了します。
--end
は -e
でも指定可能です
$ utern --since 10m --end 5m log-group-query
ロググループ名を表示しない
$ utern --no-log-group log-group-query
ログストリーム名を表示しない
$ utern --no-log-stream log-stream-query
ログメッセージの先頭10文字だけ表示
$ utern --max-length 10 log-stream-query
オプション
NAME:
utern - Multi group and stream log tailing for AWS CloudWatch Logs
USAGE:
utern [global options] log-group-query
VERSION:
0.0.1
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--stream value, -n value Log stream name (regular expression). Displays all if omitted.
--stream-prefix value, -p value Log stream name prefix. If a log group contains many log streams, this option makesit faster.
--since value, -s value Return logs newer than a relative duration like 52, 2m, or 3h. (default: "72h")
--end value, -e value Return logs older than a relative duration like 0, 2m, or 3h.
--filter value The filter pattern to use. For more information, see https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html.
--timestamps Print timestamps
--event-id Print event ID
--no-log-group Suppress display of log group name
--no-log-stream Suppress display of log stream name
--max-length value Maximum log message length (default: 0)
--help, -h show help
--version, -v print the version
インストール
Mac
Macの場合はHomebrew経由でインストール可能です
$ brew tap knqyf263/utern
$ brew install knqyf263/utern/utern
その他
rpmやdebパッケージなどもありますし、ビルド済みのバイナリも置いてあるので環境に合わせてインストールして下さい
https://github.com/knqyf263/utern/releases
今後について
まだv0.0.1でバグがあるはずなので直していきます。
AWSのAPIの制限で一部実行が遅い部分があるので高速化も考えます。
最後に
普段使ってるsternが便利で、何でこういうツールがCloudWatch Logsにはないんだ!!とカッとなって1日で作りました。
ずっと不便な思いをしてたので、このツールのおかげで捗るようになって自分は助かってます。
もし同じ気持ちを抱いている方がいましたら一度使ってみて頂けると幸いです。