AWS に CloudWatch Logs というサービスがあります。
コンソールが用意されていますが、正直使いやすくありません。
awslogs という、CloudWatch Logs からログを取得するコマンドラインツールがあり使っていたいのですが、だんだんと不満な点が出てきました。
そんなわけなので
CloudWatch Logs からログを取得する gem を書きました。
使う
ここでの例は Thor gem を使ってコマンドにしたものです。
Gemfile
source 'https://rubygems.org' git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem 'aws_cloudwatch_logs', github: 'mattsan/aws_cloudwatch_logs' gem 'thor'
command
#!/usr/bin/env ruby require 'thor' require 'time' require 'aws_cloudwatch_logs' class Logs < Thor default_command :logs desc :logs, 'get logs' option :start, aliases: '-s', type: :string, desc: 'start time' option :end, aliases: '-e', type: :string, desc: 'end time' option :group, aliases: '-g', type: :string, desc: 'log group' option :filter, aliases: '-f', type: :string, desc: 'filter pattern' def logs start_time = Time.parse(options[:start]) end_time = Time.parse(options[:end]) log_group = options[:group] filter_pattern = options[:filter] AwsCloudwatchLogs.extract(log_group, start_time, end_time, filter_pattern) do |event| time_string = event.timestamp.strftime('%Y-%m-%dT%H:%M:%S%Z') puts "#{time_string} #{event.message}" end end end Logs.start
logs
というファイル名で保存して実行できるようにします。
$ chmod +x logs
実行
$ bundle exec logs -g foo-bar-baz -s '2017/11/01 00:00' -e '2017/11/01 12:00'
このように aws-sdk を使うときのメンドクサイ部分を隠しただけのものですがメンドクサイ部分を繰り返す必要がないだけ楽になります。
そんな感じで。