Vector を Amazon Linux 2 で使ってみた

ログ収集ツール「Vector」を Amazon Linux 2 で使ってみました。
2021.07.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、望月です。

Vector が僕の周りで流行っているので試しにインストールをしてみました。
Vector - A lightweight and ultra-fast tool for building observability pipelines | Vector

Vector とはログ収集ツールとなり、同じようなツールとして Fluentd が有名かと思います。最近開発された Rust で作られているツールでシンプルで軽く、これからが楽しみなツールです。
今回は Apache のアクセスログを CloudWatch Logs とS3 への出力をやってみました。

やってみた

導入環境

  • EC2 インスタンス (Amazon Linux 2)
    • Instance type: t3.micro
    • AMI ID: amzn2-ami-hvm-2.0.20210617.0-x86_64-gp2
    • IAM Role: AmazonS3FullAccess , CloudWatchLogsFullAccess
      • 検証のため FullAccess を与えています。実際に運用する場合は必要最低限の権限のみ設定するようにしてください。
  • Vector
    • 0.14.0

準備

まずは Apache をと言いたいところですが欲しいのはアクセスログなので apache-loggen をインストールして、ダミーのアクセスログを作成できるようにします。
apache-loggen コマンドでダミーのアクセスログが出力できるようになったら OK です。

sudo yum install ruby rubygems
gem install apache-loggen
apache-loggen --limit=100

インストール

Vector では様々なインストール方法があり、YUM を利用したインストールのほかに RPM パッケージやインストーラーでのインストールが用意されています。
詳しくは以下ドキュメントをご確認いただくとして、ここでは YUM のインストールを試してみます。
Install Vector | Docs | Vector

$ curl -1sLf \
>     'https://repositories.timber.io/public/vector/cfg/setup/bash.rpm.sh' \
>     | sudo -E bash

上記実行することで /etc/yum.repos.d/ に Vector リポジトリのファイル timber-vector.repo がインストールされます。
あとは YUM コマンドを実行することで Vector をインストールすることができます。

$ sudo yum install vector

$ rpm -qi vector
Name        : vector
Version     : 0.14.0
Release     : 1
Architecture: x86_64
Install Date: Wed 07 Jul 2021 07:30:15 AM UTC
Group       : Applications/System
Size        : 70369826
License     : ASL 2.0
Signature   : RSA/SHA256, Thu 03 Jun 2021 06:18:56 PM UTC, Key ID 3543db2d0a2bc4b8
Source RPM  : vector-0.14.0-1.src.rpm
Build Date  : Thu 03 Jun 2021 06:13:16 PM UTC
Build Host  : 9a84edd357ab
Relocations : (not relocatable)
URL         : https://vector.dev
Summary     : A lightweight and ultra-fast tool for building observability pipelines
Description :
A lightweight and ultra-fast tool for building observability pipelines

インストール後は /etc/vector/vector.toml にてコンフィグを管理し systemctl コマンドにてプロセスの起動等を操作することができます。

sudo systemctl restart vector

コンフィグ

Vector では複数のコンフィグ書式に対応しており、TOML, YAML, JSON に対応しています。
今回は TOML にてコンフィグを作成していきます。

sudo tee /etc/vector/vector.toml <<'_VECTORCFG_' 
[sources.apache_log]
  type = "file" # required
  include = ["/tmp/apache.log"] # required

[sinks.apache_log-cwlogs]
  # General
  type = "aws_cloudwatch_logs" # required
  inputs = ["apache_log"] # required
  group_name = "/ec2/apache-logs" # required
  region = "ap-northeast-1" # required, required when endpoint = null
  stream_name = "{{ host }}" # required

  # Encoding
  encoding.codec = "text" # required

[sinks.apache_log-s3]
  # General
  type = "aws_s3" # required
  inputs = ["apache_log"]  # required
  bucket = "<ログを出力する S3 バケット名を入れてください>" # required
  compression = "gzip" # optional, default
  region = "ap-northeast-1" # required, required when endpoint = null

  # Encoding
  encoding.codec = "text" # required

  # File Naming
  key_prefix = "apache_logs/year=%Y/month=%m/day=%d/" # optional, default
_VECTORCFG_

コンフィグ作成後に systemctl コマンドにて Vector を再起動します。
あとは apache-loggen コマンドで対象のパスにログを出力することで、ログが CloudWatch Logs と S3 に出力されます。ここでは 60 秒ごとにローテーションさせるようにし、ローテーションしたログを取り込めるかも確認しています。

apache-loggen --rate=10 --rotate=60 /tmp/apache.log

S3, CloudWatch Logs を確認し、ログが出力されていることを確認します。

まとめ

思った以上に簡単に S3 と CloudWatch Logs にログ出力をすることができました。
いままでは選択肢として Fluentd を選択することも多かったですが、これからは Vector も検討していくのは全然アリだなと思いました。