はじめに
こんにちは、rpdays です。
Raspberry Pi クラスタを作成したらやりたかったことの1つに、syslog サーバの構築があります。
ルータや Raspberry Pi クラスタのログを1箇所の USB メモリ等に集約して管理し、何かあった時に参照できるようにしたいと、常々考えていました。
syslog サーバ自体は簡単かつ一般的なので、例えば AWS EC2 に syslog サーバを構築した上でクラウドストレージに保存したりもできます。しかし、気になるのは、ログの量が増えるにつれて増大する管理コストです。監査目的となると、場合によっては数 GB から数TB という単位となり、ストレージのコストだけでも月に数千円単位という馬鹿にならない値段になります。
また、メンテナンスのタイミングを自分の都合で選べず、クラウドプラットフォーム側に自分たちの予定を引きずられるというのも不便な話です。
というわけで、今回は syslog サーバを Raspberry Pi に構築し、他のサーバから syslog を収集して USB メモリに保存する仕組みを構築したいと思います。
このテーマでやりたいこと
この「syslog サーバを構築する」というテーマでやりたいことは、以下のとおりです。
- Raspberry Pi 上に rsyslog サーバを構築する
- Raspberry Pi に接続した USB メモリ上に syslog を保存する
- 他の Raspberry Pi の syslog を rsyslog サーバに転送する
やりたいこと全てを満たすことを目指して、次章より進めていきたいと思います。
必要なもの
今回の記事の構成を実現するに当たって必要なものは、以下のとおりです。
- Raspberry Pi 1台
- USB メモリ USB 3.0 対応 64GB 1台
- 有線または無線によるインターネット接続
syslog サーバは、場合によっては外部からのリクエストが集中する可能性があるため、Raspberry Pi 3 以降のある程度スペックが高い機種を1台専用に利用することをおすすめします。今回の記事では、Raspberry Pi 4 Model B 4GB RAM モデルを使用しています。
今回は USB メモリを使用していますが、USB 3.0 接続のデバイスであれば他の記憶媒体でも問題ありません。外付け HDD や外付け SSD のほうが、より大きな容量を確保できると思いますので、お財布や設置するスペースと相談してお好みで準備してください。
なお、ファイルへの書き込み速度はある程度確保する必要があるため、USB 3.0 接続は事実上必須です。また、容量についても任意ではありますが、あまり小さいものを採用すると高頻度で交換かログローテーションが必要となるため、慎重に検討しましょう。
syslog サーバの本体である rsyslogd をインストールするため、イントラネット接続だけでなくインターネット接続も必要となります。Raspberry Pi をイントラネット内に設置している場合は、一時的にインターネット接続が可能な環境に接続するか、後述の rsyslog パッケージを何らかの方法で構築対象の Raspberry Pi 内に転送する必要があります。
syslog の保存先を作成する
今回は USB メモリをマウントし、その中に転送されてきた syslog を保存します。というわけで、まずはその保存先となる USB メモリを接続します。
案外やりがちなのですが、せっかく USB 3.0 のメモリを購入しているので、USB 2.0 のポートにささないようにしましょう。このあとマウントを行うので、間違いに気づいても気軽に差し替えることができなくなります。
続いて、USB メモリのフォーマットを行います。以下のように、fdisk コマンドできちんと認識されていることを確認しつつ、USB メモリの現在のフォーマットを確認します。
$ sudo fdisk -l
おそらく、買ったばかりの USB メモリであれば、FAT32 か exFAT あたりになっているのではないかと思われます。Raspberry Pi OS のサポートするフォーマットであれば、特に再フォーマットは不要です。
今回は4GBを超えるようなファイルサイズのログを扱う想定はないので、一旦買った時のままの FAT32 で運用します。
フォーマットが必要な方は、mkfs コマンドで適宜フォーマットを行いましょう。
続いて、以下のコマンドでマウントポイントを作成します。このマウントポイントは、環境や好みに合わせて適宜設定してください。ここでは /mnt/usb/rsyslogd というマウントポイントを使用します。
$ sudo mkdir /mnt/usb/rsyslogd
まずは、このマウントポイントを手動でマウントします。先程 fdisk コマンドで確認した、USB メモリのパスを指定してください。今回は /dev/sda1 が当該の USB メモリだったので、以下のようなコマンドでマウントしました。
$ sudo mount /dev/sda1 /mnt/usb/rsyslogd
df コマンドを実行すると、mount コマンドのオプション通りにマウントできていることが確認できると思います。
なお、これだけでは再起動のたびに手動マウントが必要となるので、fstab に以下の1行を追加してください。
vim /etc/fstab
…
/dev/sda1 /mnt/usb/rsyslogd vfat defaults 0 0
fstab を保存して閉じて reboot をしましょう。reboot 完了後に df コマンドを打って、自動的にマウントができていれば、USB メモリを使用する準備は完了です。
rsyslogd をインストールする
syslog サーバの本体である rsyslogd は、Rasbberry Pi OS (Ubuntu) では rsyslog というパッケージ名で apt 経由で配布されています。ちなみに、RHEL 系の yum や dnf でも同じパッケージ名です。
従いまして、Raspberry Pi OS では、以下のコマンドでインストールが可能です。
$ sudo apt install -y rsyslog
これでインストール自体は完了です。自動起動設定も完了しており、systemctl で status を確認すると、既に正常に起動していると思います。
ただし、この状態ではまだどのログをどこに保存するか、どこからのログ転送をどのプロトコルとポートで受け付けるかを設定していません。
ちょっと長くなりますので、設定については次の記事にまとめたいと思います。

コメント