はじめに
環境
EC2:AmazonLinux2023
Fluentdバージョン:LTS5
メールソフト:postfix
目的
サービスにエラーが起きた際、ログの内容をメールで通知する。
サービスとfluentdは別インスタンスにする。
Fluentd用インスタンスの設定
Fluentdをインストール
EC2
[root@ip-xx-xx-xx-xx etc]# curl -fsSL https://toolbelt.treasuredata.com/sh/install-amazon2023-fluent-package5-lts.sh | sh
起動と有効化
EC2
[root@ip-xx-xx-xx-xx etc]# systemctl start fluentd.service
[root@ip-xx-xx-xx-xx etc]# systemctl enable fluentd.service
Created symlink /etc/systemd/system/td-agent.service → /usr/lib/systemd/system/fluentd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/fluentd.service → /usr/lib/systemd/system/fluentd.service.
[root@ip-xx-xx-xx-xx etc]# systemctl status fluentd.service
必要なプラグインをインストール
fluent-plugin-grepcounter
EC2
[root@ip-xx-xx-xx-xx etc]# fluent-gem install fluent-plugin-grepcounter
fluent-plugin-mail
EC2
[root@ip-xx-xx-xx-xx etc]# fluent-gem install fluent-plugin-mail
postfix
EC2
[root@ip-xx-xx-xx-xx etc]# dnf install postfix
[root@ip-xx-xx-xx-xx etc]# systemctl start postfix
[root@ip-xx-xx-xx-xx etc]# systemctl enable postfix
confファイルの設定
監視先インスタンスのエラーログが
/var/log/fluent/example.log
に転送されるものと仮定した記述になります。
/etc/fluent/fluentd.conf
/etc/fluent/fluentd.conf
<match example>
@type copy
<store>
@type file
path /var/log/fluent/example.log
</store>
<store>
@type grepcounter
count_interval 100
input_key message
regexp ERROR
threshold 1
add_tag_prefix mailerror
</store>
<store>
@type grepcounter
count_interval 100
input_key message
regexp WARNING
threshold 1
add_tag_prefix mailwarning
</store>
</match>
<match mailerror.example>
@type copy
<store>
@type mail
host localhost
port 25
from "error@example.com"
to "a@example.com, b@example.com"
subject "ERRORメールの件名"
message Log :%s
message_out_keys message
</store>
</match>
<match mailwarning.example>
@type copy
<store>
@type mail
host localhost
port 25
from "error@example.com"
to "a@example.com, b@example.com"
subject "WARNINGメールの件名"
message Log!:%s
message_out_keys message
</store>
</match>
Fluentdを再起動
EC2
[root@ip-xx-xx-xx-xx etc]# systemctl restart fluentd
[root@ip-xx-xx-xx-xx etc]# systemctl status fluentd
サービス用インスタンスの設定
Fluentdをインストール
EC2
[root@ip-xx-xx-xx-xx etc]# curl -fsSL https://toolbelt.treasuredata.com/sh/install-amazon2023-fluent-package5-lts.sh | sh
起動と有効化
EC2
[root@ip-xx-xx-xx-xx etc]# systemctl start fluentd.service
[root@ip-xx-xx-xx-xx etc]# systemctl enable fluentd.service
Created symlink /etc/systemd/system/td-agent.service → /usr/lib/systemd/system/fluentd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/fluentd.service → /usr/lib/systemd/system/fluentd.service.
[root@ip-xx-xx-xx-xx etc]# systemctl status fluentd.service
監視先インスタンスの /etc/fluent/fluentd.conf
EC2
<source>
@type tail
path 監視・転送したいログファイルのPATHを記述
tag example
pos_file /var/log/fluent/example.pos
format none
</source>
<match example>
@type forward
time_as_integer true
flush_interval 60s
<server>
host xx.xx.xx.xx (fluentdのインスタンスのIP)
port 24224
</server>
</match>
Fluentdを再起動
EC2
[root@ip-xx-xx-xx-xx etc]# systemctl restart fluentd
[root@ip-xx-xx-xx-xx etc]# systemctl status fluentd
PORTの設定
Fluentd用・サービス用それぞれのインスタンスのセキュリティグループに24224の疎通を追加する。