OpenVPNクライアントログが期待どおりに「logrotate」されない

OpenVPNクライアントログが期待どおりに「logrotate」されない

要約:OpenVPNクライアントのデフォルトログがファイルシステムを埋めるのを防ぎたいのですが(少なくとも今では)、デバッグレベルをかなり高く保つ必要があります。私の試みはlogrotate現在期待どおりに機能しません。 (指示どおりに機能することもできますが:-(

詳細:

私はLinux管理者として実力が間違いなく不足しているので、以下に含まれるエラーや誤解を自由に修正してください。私はラップトップを持っています

$ cat /etc/debian_version
jessie/sid
$ uname -rv
3.11-2-amd64 #1 SMP Debian 3.11.8-1 (2013-11-13)
$ sudo openvpn --version | head -1
OpenVPN 2.3.2 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [eurephia] [MH] [IPv6] built on Nov 28 2013
$ sudo logrotate --version | head -1
logrotate 3.8.6

OpenVPNクライアントを設定するのは今回が初めてです。クライアントはまだ機能していないため、ISTM OpenVPNログを@かなり便利な情報に保つ必要があります/var/log/openvpn.log。残念ながら、Low Disk Space on "Filesystem root"LVM2/varルートボリュームから通知を受け取り始めました。何度も手動で削除した後、/var/log/openvpn.log「もう使い方を学ぶべき時だったlogrotate」と決めました。少し読んだ後/etc/cron.hourly/logrotate作成しました。

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

そして、次のセクションを/var/log/openvpn.log私のセクションに追加しました/etc/logrotate.conf(つまり、以前のすべてはDebianのインストール# for OpenVPN clientにありました):/etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

# for OpenVPN client
/var/log/openvpn.log {
    missingok
    copytruncate
    size 100M
    rotate 5
    dateformat -%Y%m%d_%H%M
    dateext
    compress
    delaycompress
    nomail
}

つまり、私の意図は、

  1. cron毎時間実行されますlogrotate
  2. /var/log/openvpn.log100 MBを超えると(プロセスを許可=元のログファイルに記録し続けることlogrotateができます)。copytruncateopenvpn
  3. 各dログセクションには、format =(コマンドラインで使用されている)copytruncateとしてタイムスタンプが割り当てられます。%Y%m%d_%H%Mdate +%Y%m%d_%H%M
  4. 各d-logセクションは圧縮されています。使用しないよりも安全に見えるのでcopytruncate使用しています。 :-)delaycompress
  5. 最大5つのログセクションを保持するため、OpenVPNログは500 MBを超えません。 (圧縮中ですので減らしてください。)

残念ながら、まだ次のルートがいっぱいの通知を受け取ります。

$ df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/LVM2_crypt-root   20G   20G     0 100% /
udev                          10M     0   10M   0% /dev
tmpfs                        390M  1.1M  389M   1% /run
tmpfs                        5.0M     0  5.0M   0% /run/lock
tmpfs                        1.6G  876K  1.6G   1% /run/shm
/dev/sda3                    485M   33M  423M   8% /boot
/dev/mapper/LVM2_crypt-home  322G  228G   95G  71% /home
none                         4.0K     0  4.0K   0% /sys/fs/cgroup

$ sudo rm /var/log/openvpn.log
rm: cannot remove ‘/var/log/openvpn.log’: No such file or directory

$ ls -alS /var/log/ | head
total 5521688
-rw-------  1 root root 5636743168 Mar  6 14:21 openvpn.log-20150306_%H%M
...

$ sudo rm /var/log/openvpn.log*

$ df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/LVM2_crypt-root   20G   15G  4.3G  78% /
...

したがって、重要度の高い順に3つの質問があります。

  1. logrotateタイムスタンプが間違っているのはなぜですか?つまり、なぜ代わりopenvpn.log-20150306_%H%Mに生成されますかopenvpn.log-20150306_1421
  2. logrotate指示に従って@ 100MBを回転させるのではなく、5 GBのログファイルセグメントを生成するのはなぜですか?
  3. この問題を解決するための最良の方法は何ですか?

答え1

これは非常に広範な質問です。私はこれらの問題のいくつかを解決しようとします。

インストール後、cron形式の状況で毎日logrotateが呼び出されます。 Centos 7では、/etc/cron.dファイルのdailyエントリ(0daily)を介して呼び出される/etc/cron.dailyでlogrotate呼び出しを見つけることができます。もちろん、毎時間実行するように変更することも、ルートcrontabの特別なエントリからlogrotateを追加で呼び出すこともできます。

マニュアルページを見ると、日付形式に「%Y%m%dと%s指定子のみが許可されています」という制限があることがわかります。したがって、あなたの仕様の質問です。

作成したローテーションファイルは非常に大きく、一日中分量のログのように見えます。これはデータが同じファイルにコピーされるため、仕様エラーが原因である可能性が高くなります。圧縮は現在のサイクルサイクル以降のサイクルでのみ発生するため、デフォルトでは2つの大きなファイルがある可能性があります。 24時間にわたって新しいlogrotateファイルが生成されないため、圧縮は期待どおりに機能しません。

最後に注意すべき点は、いくつかの経験的パッケージには、基本的にこれを実行するlogrotateスクリプトが含まれていることです。これらのエントリは通常、単一のlogrotate.confファイルを使用するのではなく、/etc/logrotate.dの下のファイルに配置されます。 logrotateがデフォルトで実行されると、これらのファイルは/etc/logrotate.confの "include"ディレクティブに含まれます。このインクルードディレクティブは、私が今まで知っているほとんどすべてのlogrotateインストールに存在します。

関連情報