Logstashにチャネルログを読み取る方法

Logstashにチャネルログを読み取る方法

aptリポジトリを使用してUbuntu 12.04にlogstashをインストールしました。しかし、Logstashはどんな文書も読みませんでした。 Logstash ログには次の内容があります。

{:timestamp=>"2014-08-01T22:06:09.722000+0000", :message=>"failed to open /var/log/kannel/smsbox.log: Permission denied - /var/log/kannel/smsbox.log", :level=>:warn}

ファイルの権限を確認しました。

$ ls -lh /var/log/kannel/smsbox.log
-rw-r----- 1 kannel adm 42M Aug  2 00:14 /var/log/kannel/smsbox.log

そのため、logstashユーザーをadmグループに追加しましたが、usermod -a -G root logstash役に立ちませんでした。ルートに追加しましたが、まだ機能しません。私は何をするのか分からない。

答え1

カーネルに関する限り、プロセスはユーザーと1つ以上のグループで実行されます。プロセスが開始されると、グループを取得できなくなります。プロセスは、自分を呼び出したプロセスからユーザーとグループを継承します。

グループに属するユーザーの概念はユーザー管理ツールによって管理され、ログイン・プログラムは開始プロセスにグループ・メンバーシップを付与します。したがって、グループにユーザーを追加すると、すでに進行中のセッションではなく、後続のログインセッションにのみ適用されます。

デーモンは対話型ログインプロセスを経ず、通常は特定のユーザーとグループで始まります。グループはアカウントデータベースからも読み込まれず、デーモン起動スクリプトのユーザー名の横にハードコードされることがよくあります。したがって、logstashユーザーをadmグループに追加しても役に立ちません。adm追加のグループでlogstashを実行するようにlogstash起動スクリプトを変更するだけです。これを行う方法は、起動スクリプトの作成方法によって異なります。それにもかかわらず、これを行うにはlogstashサービスを再起動する必要があります。

または、ログファイルのアクセス制御リストを変更して、Logstashプロセスでそれを使用できるようにすることもできます。たとえば、ユーザーがlogstashチャンネルログファイルを読み取ることを許可するには、次の手順を実行します。

setfacl -m u:logstash:r /var/log/kannel/smsbox.log

たぶんあるかもしれません

setfacl -m u:logstash:rx /var/log/kannel

ログを置き換えると権限が再初期化される可能性があるため、これは一時的な解決策かもしれません。このアプローチでは、ログファイルを(再)生成するプログラムの構成を変更する必要があるかもしれません。

¹2人のユーザー(実際と有効)ですが、実際のUIDはこの回答とは関係ありません。

関連情報