LoginSignup
13
2

More than 5 years have passed since last update.

fluentdによるsyslogの受信と、さくらクラウドのオブジェクトストレージへの転送・保存

Last updated at Posted at 2017-03-01

サーバやネットワーク機器類から送信されてくるsyslogを保存するのに、さくらのオブジェクトストレージを利用してみる。状況・要件としてはこんな感じ。

  • さくらクラウド上でサーバや仮想アプライアンスその他を動かしている
  • 複数台のサーバ/アプライアンスからsyslogを受け付けてログを集約したい
    • 一部の機器ではsyslogサーバのポート番号を指定できないので必ず514番で待ち受けて欲しい
  • さくらクラウドのオブジェクトストレージに保存したい
    • サーバのディスクに入れておくと取り出すのが面倒
      • rsyslog/syslog-ngやfluentdでのout_fileなど、ローカルに保存した場合
    • オブジェクトストレージならサーバを消し飛ばしても残り、s3cmdコマンドで取り出せる

公式APIガイドの細かいところを読み飛ばしたせいで、シグネチャ不一致で嵌まってたのでメモ。

参考資料

利用したプラグインやサービスの公式資料は以下の通り

類似の事例として以下が存在する。それぞれ現在(2017/03)より2年程度経過しており、そのままでは手法を適用できない。

想定環境

  • 環境: さくらクラウド
  • OS: Ubuntu Server 16.04.1 (Xenial)
    • 公式アーカイブ一覧から該当するアーカイブを利用してセットアップ
  • td-agent: 0.12.31
  • fluent-plugin-s3: 0.8.2

fluentdのインストールとセットアップ

簡単化のためここではtd-agentをパッケージ導入してfluentdを動かす。

1.ベースシステムに必要なパッケージの追加等実施して再起動

$ sudo apt update 
$ sudo apt -y upgrade
$ sudo apt install -y curl ruby
$ reboot

2.fluentd 公式に従ってtd-agentの導入

$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent2.sh | sh

3.fluent-plugin-s3のインストール(ここでは0.8.2がインストールされた)

$ sudo td-agent-gem install fluent-plugin-s3

4.td-agentユーザが514番ポートでbindできるようにケーパビリティ設定

$ sudo setcap 'cap_net_bind_service=ep' /opt/td-agent/embedded/bin/ruby

iptablesで514/udpを5140/udpにリダイレクト、td-agentはそちらで待ち受けといったやり方でも可能だが今回はこの手段で対応した。

td-agentの設定

td-agentをrestartするまえに、/etc/td-agent/td-agent.confを以下の様に書き換える。syslog inputプラグインで受けて、s3 output プラグインに流すだけの簡単な設定。

<source>
  @type syslog
  port 514
  bind 0.0.0.0
  tag syslog
</source>


<match syslog.**>
  type s3
  aws_key_id ${ここにアクセスキーID}
  aws_sec_key ${ここにシークレットアクセスキー}

  s3_bucket ${ここにバケット名}
  s3_endpoint https://b.sakurastorage.jp
  s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension}

  signature_version s3

  path log_
  buffer_path /tmp/s3
  time_slice_format %Y%m%d%H
  time_slice_wait 10m
  buffer_chunk_limit 256m
  check_apikey_on_start false
</match>

以下の点に気を付けること

  • in_syslogは514/udpで待ち受ける
    • 先に述べたとおり、一部機器は514番ポート決め打ちのため
    • 先ほど実施したsetcapにより、td-agentの実行ユーザ(td-agent)でも0.0.0.0:514をbindできる
  • use_ssl はobsoletedなので使わない
  • signature_versionを "s3" (version 2)にしておくこと
    • fluent-plugin-s3 0.8.2 では "v4" (version 4) がデフォルトになっている
    • 一方、さくらオブジェクトクラウドでは、version 2のみ対応している
    • さくらオブジェクトクラウドにversion 4のシグネチャを投げると500が返ってくるためオペレーションできない

うまく動くとバケットに1時間毎のログファイルがgzipで纏められてファイルオブジェクトとしてつっこまれるはず。テスト中は time_slice_format を "%Y%m%d%H%M" などとして1分毎にしておくとミスに気がつきやすいので便利。

13
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2