Go
AWS
cli
CloudWatch

AWS CloudWatch Logsを見やすくするツールを作った


概要

AWS CloudWatch Logsの表示が見にくすぎるというのは全人類が抱える問題だと思いますが、それを見やすくするCLIツールを作りました。

既にawslogsというツールがあり、こちらも便利なのですがロググループをまたいでtailすることが出来なかったので自分で作りました。

あと個人的にはPythonのCLIツールをグローバルに入れたくな...

他にもいくつかツールあり、そちらと比べて機能的に大きく異なるわけではないので、今困ってない人は良いと思います。色合いが良い感じとかふわっとした部分は結構違うと思います。


Utern

以下に置いてあります。

https://github.com/knqyf263/utern

sternというKubernetesでログを表示するのに使われる便利なツールがあるのですが、それを参考に作ったのでuternというツール名にしました。意味は特にないです。


使い方

AWSのAPI実行用の認証情報は ~/.aws/config~/.aws/credentials から取得するので、事前にawscliが使える必要があります。

それさえ設定されていれば、単にロググループにマッチする文字列を渡せばよいだけです。正規表現も使えます。

utern.gif

上の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日で作りました。

ずっと不便な思いをしてたので、このツールのおかげで捗るようになって自分は助かってます。

もし同じ気持ちを抱いている方がいましたら一度使ってみて頂けると幸いです。