Logstash を設定して、ログを syslog サーバーに転送する
概要
このガイドでは、システムコンポーネントからログを収集し、それらをリモートのsyslogサーバーに転送するようにLogstashを設定する方法について説明します。 このようにログを一元化することで、リモートでの監視や分析が可能になります。
Logstashは、複数のソースからデータを取り込み、変換し、syslogサーバーなどの宛先へ出力するログ処理ツールとして機能します。 この設定:
- Kafkaトピックからログを収集します
- Logstashパイプラインを通じて処理する
- 処理済みのログをUDP経由でリモートのsyslogサーバーに転送します
始める前に
作業を始める前に、次の点を確認してください:
/etc/logstash/conf.d/への書き込み権限があります。- リモートSyslogサーバーは、ポート514でUDPトラフィックを受信するように設定されています。
- syslogサーバーへのネットワーク接続が確認されました。
syslog出力プラグインの設定
syslogパイプラインの入力と出力を定義する設定ファイルを作成します。
ファイル: /etc/logstash/conf.d/rsyslog-persister.conf
以下の設定を追加し、以下のプレースホルダーの値を置き換えてください。
| プレースホルダー | 説明 |
|---|---|
\<CLUSTER_VIP> | CubeCOSクラスタのクラスタ仮想IPアドレス |
\<SYSLOG_SERVER_IP> | syslogサーバーのIPアドレス |
\<SYSLOG_PORT> | syslog サーバーがリスニングしているポート(通常は 514) |
\<udp|tcp> | 使用される転送プロトコル |
input {
kafka {
bootstrap_servers => "<CLUSTER_VIP>:9095"
topics => "logs"
group_id => "rsyslog_persister"
client_id => "rsyslog_persister_cpu014"
consumer_threads => "2"
codec => json
}
}
output {
syslog {
host => "<SYSLOG_SERVER_IP>"
port => <SYSLOG_PORT>
protocol => "<udp|tcp>"
rfc => "rfc5424"
facility => "local0"
severity => "notice"
procid => "-"
msgid => "-"
sourcehost => "%{[host][name]}"
message => "%{message}"
}
}
パイプラインを登録する
Logstashのパイプライン設定ファイルを更新し、新しいsyslogパイプラインを追加してください。
新しいパイプラインを /etc/logstash/pipelines.yml に追加します:
- pipeline.id: syslog-persister
path.config: "/etc/logstash/conf.d/rsyslog-persister.conf"
完成したファイルには、すべてのアクティブなパイプラインが含まれている必要があります。 参考までに、一般的な構成には以下が含まれます:
- pipeline.id: log-transformer
path.config: "/etc/logstash/conf.d/log-transformer.conf"
- pipeline.id: auditlog-transformer
path.config: "/etc/logstash/conf.d/auditlog-transformer.conf"
- pipeline.id: hex-event-mapper
path.config: "/etc/logstash/conf.d/hex-event-mapper.conf"
- pipeline.id: ops-event-mapper
path.config: "/etc/logstash/conf.d/ops-event-mapper.conf"
- pipeline.id: telegraf-persister
path.config: "/etc/logstash/conf.d/telegraf-persister.conf"
- pipeline.id: telegraf-hc-persister
path.config: "/etc/logstash/conf.d/telegraf-hc-persister.conf"
- pipeline.id: telegraf-events-persister
path.config: "/etc/logstash/conf.d/telegraf-events-persister.conf"
- pipeline.id: ceph-event-mapper
path.config: "/etc/logstash/conf.d/ceph-event-mapper.conf"
- pipeline.id: kernel-event-mapper
path.config: "/etc/logstash/conf.d/kernel-event-mapper.conf"
- pipeline.id: rsyslog-persister
path.config: "/etc/logstash/conf.d/rsyslog-persister.conf"
設定をすべての制御ノードに反映する
プライマリ制御ノードの更新後、設定ファイルを他のすべての制御ノードに同期してください:
cubectl node -r control rsync /etc/logstash/pipelines.yml
cubectl node -r control rsync /etc/logstash/conf.d/rsyslog-persister.conf
これにより、すべての制御ノードが同一の設定となり、ログを一貫して処理できるようになります。
Logstash を再起動する
すべてのコントロールノードでLogstashサービスを再起動し、設定の変更を適用してください。
cubectl node -r control exec -p "systemctl restart logstash"
-p フラグを指定すると、すべてのノードでコマンドが並列実行されます。
設定を確認する
パイプラインの状態を確認する
Logstashサービスのログを確認し、パイプラインが正常に実行されていることを確認してください。
grep "rsyslog-persister" /var/log/logstash/logstash-plain.log
成功した結果は次のようになります:
[2025-04-10T14:08:15,997][INFO ][logstash.agent] Pipelines running {:count=>10, :running_pipelines=>[:, :"rsyslog-persister", ...], :non_running_pipelines=>[]}
running_pipelines 内の rsyslog-persister エントリにより、パイプラインがアクティブであることが確認できます。
今後の手順
設定を確認した後、以下の点について検討してください:
- Logstashのリソース使用状況とパイプラインのパフォーマンスの監視
- パイプラインの失敗に対するアラートの設定
- syslog サーバーでのログ保持ポリシーの設定
- 必要に応じて、パイプラインにフィルターや変換を追加する