Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

Fluentdでsyslogを取り込むための権限設定(CentOS 5&6両対応)

syslog経由で出力される次のようなログファイルを、Fluentdに取り込む場合に便利なTIPSを紹介します。

  • /var/log/messages
  • /var/log/secure

今回はこれらのsyslogを一般ユーザでも読み込みは出来るよう、権限を少し緩める設定を紹介したいと思います。

設定例

素の状態でsyslogをtd-agent(fluentd)から取り込もうとすると、権限エラーが発生します。
Fluentdから読み出せるよう、rsyslog(syslog)の設定を変更していきます。

# サンプルのためsourceブロックのみ記述します
$ cat /etc/td-agent/td-agent.conf 
<source>
  type tail
  path /var/log/messages
  format syslog
  tag td.syslog.messages
  pos_file /var/log/td-agent/syslog_messages.pos
</source>

# td-agentを起動します
$ sudo /etc/init.d/td-agent start

# 権限エラーが出続けますね
$ sudo tailf /var/log/td-agent/td-agent.log
2013-03-16 23:07:34 +0900: Permission denied - /var/log/messages

# 確かにこのパーミッションでは読み込めません
$ ls -l /var/log/messages 
-rw-r----- 1 root root 40779 Mar 16 17:23 /var/log/messages

syslog (CentOS-5.x)

/etc/sysconfig/syslog のUMASKを以下のように077から022に変更します。
その後、 /etc/init.d/syslog restartを行います。

$ diff -u syslog_before syslog_after
--- syslog_before  2013-03-16 23:08:24.000000000 +0900
+++ syslog_after  2013-03-16 23:08:34.000000000 +0900
@@ -11,6 +11,6 @@
 # See klogd(8) for more details
 KLOGD_OPTIONS="-x"
 #
-SYSLOG_UMASK=077
+SYSLOG_UMASK=022
 # set this to a umask value to use for all log files as in umask(1).
 # By default, all permissions are removed for "group" and "other".

参考 http://linux-network.cocolog-nifty.com/blog/2009/03/umask-dec9.html

rsyslog (CentOS-6.x)

/etc/rsyslog.conf の行末に以下のように2行追加します。
その後、 /etc/init.d/rsyslog restartを行います。

$ diff -u rsyslog_before rsyslog_after
--- rsyslog_before  2013-03-16 23:11:51.000000000 +0900
+++ rsyslog_after  2013-03-16 23:11:55.000000000 +0900
@@ -77,3 +77,5 @@
 #*.* @@remote-host:514
 # ### end of the forwarding rule ###

+$FileCreateMode 0644
+$DirCreateMode 0755

参考 http://baalzephon.dyndns.org/tech/index.php?rsyslogd

最後に

初回の設定時にはchmodも行います。

# Fluentdの起動ユーザ(例えばtd-agent)がapacheグループに入っている場合
$ sudo chmod g+rx /var/log/messages 
$ sudo chmod g+rx /var/log/secure

# それ以外の場合
$ sudo chmod o+rx /var/log/messages 
$ sudo chmod o+rx /var/log/secure

Apacheaccess_logも基本的に同様に対処すれば良いでしょう。
これで次にログがローテートした際も、Permission deniedとならずにログ収集できます。