Apache2用のワイルドカードVirtualHost confファイルを作成しようとしていますが、ErrorLog
およびCustomLog
設定を処理して、ログを目的の場所に配置する方法がわかりません。 2番目のVirtualHost
を見るとわかるように、ドメインlogs
のDocumentRoot
フォルダーにログがあります。これは静的VirtualHost
sの場合は問題なく機能しますが、ワイルドカードVirtualHost
の場合はどうすればよいでしょうか。たとえば、最初のVirtualHost
。
NameVirtualHost *:80
# Wild card all subdomains
<VirtualHost *:80>
ServerAlias *.example.com
VirtualDocumentRoot /var/www/%0/public
ErrorLog ?????
CustomLog ????? combined
</VirtualHost>
# Main domain
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public
ErrorLog /var/www/example.com/logs/error.log
CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>
私は行ってみましたErrorLog /var/www/*.example.com/logs/error.log
およびErrorLog /var/www/%0/logs/error.log
とCustomLog
も同じですが、Apacheを再起動しようとするとエラーが発生します。
上記のErrorLog
の例の作業バージョンを取得するには、どの構文を使用する必要がありますか?
私は 動的ログを持つ仮想ホストのワイルドカード? を見てきましたが、それでも、すべてのログを独自のサブドメインに分割するのではなく、1つの大きなファイルにまとめてしまうため、実際にはそうではありません。特定のフォルダ。
さらに多くの作業を行うリスクがある場合は、反対方向に進み、すべてのログファイルをsyslog
に結合することも検討してください。それはもっと怖いようですが、それははるかに有能な解決策です。個別のログに煩わされることはもうありません。すべてのログを直接syslogにパイプします(すべてを/ var/log/messagesに保持します)。
Apacheはそれをネイティブで実行しませんが、そのように達成できます...
LogLevel info
ErrorLog "| /usr/bin/logger -thttpd -plocal6.err"
CustomLog "| /usr/bin/logger -thttpd -plocal6.notice" "%v %h %l %u %t \"%r\" %>s %b"
Syslogには、それを解析および管理するために設定された多数のサービスとユーティリティがあるため、多くのオプションが提供されます。私は lnav
を個人的に使用するのが好きです。フィルター、ソート、検索などを行うことができ、sshを介したインターフェイスは色分けされているため、問題を簡単に見つけることができます。ユーティリティを使用して、これらすべてを空が限界であるSQL dbに配信することもできます。または、作業を減らすために、かなりのダッシュボードがある datadog などの商用サービスを使用できます。
facilities(local1-7
)これにより、基本的に、syslogロギングが組み込まれていないサービスにグループを割り当てることができます。
上記の定義では、アクセスログとエラーログの両方をlogger
にパイプしています。これは、ログを受け入れ、それらを提供するサービスの詳細とともに、ログをsyslogに共通の形式で記録するように設計されたユーティリティです。 %v
は私のアクセスログの最初の部分で、これにより、将来のsyslogでvhostsを簡単にフィルタリングできます。
ディレクティブで、エラーログがlocal6.err
アクセスログはlocal6.notice
、これは実際にログ行のレベルを設定します。エラーはlnav
で赤くなり、その他は標準/情報になります。
ウサギの穴に注意してください;)
解決策の1つは、結合したログを事後に分割することです。 Apacheにはsplit-logfile
というユーティリティがあります( https://httpd.Apache.org/docs/2.4/programs/split-logfile.html )
仮想ホスト情報を含むログファイルを作成します。
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_plus_vhost
CustomLog logs/access_log combined_plus_vhost
結合されたログファイルに表示される仮想ホスト名ごとに、スクリプトを実行するディレクトリにログファイルが作成されます。これらのログファイルには、ホスト名に基づいて.logファイル拡張子が付けられます。
結合されたログファイルはstdinから読み取られます。読み込まれたレコードは、既存のログファイルに追加されます。
split-logfile < access_log