この記事は公開されてから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 を与えています。実際に運用する場合は必要最低限の権限のみ設定するようにしてください。
- Instance type:
- 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 も検討していくのは全然アリだなと思いました。