ログローテーションのためのファイルアクセス許可の設定 (Linux)
Datadog Agent は、dd-agent
ユーザーおよび dd-agent
グループの下で実行されるため、/var/log
内のログにアクセスできません。デフォルトでは、これらのファイルにはルート (または sudo 管理者) しかアクセスできないからです。
ACL を使用したアクセス許可の設定
datadog-agent
だけに読み取り専用アクセスを許可するには、ACL を作成し、logrotate を変更してアクセス許可の変更を永続化します。
システムで ACL が有効かどうかを検証する
この記事で説明する方法を使用してアクセス許可を設定するには、ファイルシステムで ACL が有効になっている必要があります。ACL が有効になっていることを確認するには、次のように、getfacl
コマンドと setfacl
コマンドを使用して、datadog-agent
ユーザーにテストディレクトリに対するアクセス許可を設定してみます。
mkdir /var/log/test-dir
getfacl /var/log/test-dir/
setfacl -m u:dd-agent:rx /var/log/test-dir
getfacl /var/log/test-dir/
ACL が有効になっている場合は、datadog-agent
に設定されたアクセス許可が getfacl の出力に表示されます。
ログディレクトリに対する読み取りおよび実行アクセス許可を dd-agent に付与する
ACL が有効になっていることを確認したら、適切なログ収集用ディレクトリに対する読み取りおよび実行アクセス許可を datadog-agent
ユーザーに付与します。たとえば、/var/log/apache
へのアクセス許可を付与するには、次のコマンドを実行します。
setfacl -m u:dd-agent:rx /var/log/apache
Linux で ACL を構成する方法については、こちらを参照してください。
ログファイルローテーションに対応したアクセス許可を設定する
logrotate は ACL の設定を再適用しないため、一度アクセス許可を設定しても、ログがローテーションすると設定が無効になります。より永続的な解決方法としては、新しいファイルで ACL を再設定する規則を logrotate に追加します。
sudo touch /etc/logrotate.d/dd-agent_ACLs
ファイル例:
/var/log/apache/*.log {
postrotate
/usr/bin/setfacl -m g:dd-agent:rx /var/log/apache/access.log
/usr/bin/setfacl -m g:dd-agent:rx /var/log/apache/error.log
endscript
}
次のコマンドで、ファイルの ACL ステータスをチェックします。
getfacl /var/log/apache/access.log
注: PostgreSQL v10 以前の場合、アクセス許可を 0700 に設定します。PostgreSQL v11 の場合は、0700 または 0750 を設定します。0700 または 0750 とは異なるアクセス許可を持つ基本データフォルダーでサーバーを起動しようとすると、postmater プロセスが失敗します。
注: PostgreSQL のログディレクトリは、ベースとなる PostgreSQL のインストールと同じディレクトリに配置できません。
ACL がない場合のアクセス許可の設定
システムに ACL がない場合は、グループアクセスに基づいてアクセス許可を設定します。
たとえば、MySQL サービスが次の場所にログを記録しているとします。
/var/log/mysql/mysql_error.log
/var/log/mysql/mysql-slow.log
これらのアクセス許可は、デフォルトでは、ユーザー ‘mysql’ とグループ ‘mysql’ に関連付けられています。このログスキームは、‘mysql’ グループに属していないユーザーからログファイルへのアクセスを拒否します。通常は、次のように表示されます。
$ ls -l /var/log | grep -i mysql
drwxr-x--- 2 mysql mysql 4096 Feb 20 06:25 mysql
この場合の最も簡単な解決方法は、logrotate 構成で、すべての人にファイルへの読み取りアクセス許可を付与することです。
/var/log/mysql/mysql_error.log /var/log/mysql/mysql-slow.log {
daily
rotate 7
missingok
create 644 mysql adm
compress
}
一般的な市販アプリケーションは、どれもこれに似た方式に依っています。この利点は、個別のアカウントに特権的なアクセスを提供する必要がなく、標準化された方法を使用できる点です。これで、監査規則をシンプルにすることができます。
その他の参考資料