web-dev-qa-db-ja.com

ワイルドカードサブドメインを使用したApache 2の動的エラーとカスタムログ

Apache2用のワイルドカードVirtualHost confファイルを作成しようとしていますが、ErrorLogおよびCustomLog設定を処理して、ログを目的の場所に配置する方法がわかりません。 2番目のVirtualHostを見るとわかるように、ドメインlogsDocumentRootフォルダーにログがあります。これは静的VirtualHostsの場合は問題なく機能しますが、ワイルドカード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.logCustomLogも同じですが、Apacheを再起動しようとするとエラーが発生します。

上記のErrorLogの例の作業バージョンを取得するには、どの構文を使用する必要がありますか?

私は 動的ログを持つ仮想ホストのワイルドカード? を見てきましたが、それでも、すべてのログを独自のサブドメインに分割するのではなく、1つの大きなファイルにまとめてしまうため、実際にはそうではありません。特定のフォルダ。

4
Mr. Simmons

さらに多くの作業を行うリスクがある場合は、反対方向に進み、すべてのログファイルを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 などの商用サービスを使用できます。

facilitieslocal1-7)これにより、基本的に、syslogロギングが組み込まれていないサービスにグループを割り当てることができます。

上記の定義では、アクセスログとエラーログの両方をloggerにパイプしています。これは、ログを受け入れ、それらを提供するサービスの詳細とともに、ログをsyslogに共通の形式で記録するように設計されたユーティリティです。 %vは私のアクセスログの最初の部分で、これにより、将来のsyslogでvhostsを簡単にフィルタリングできます。

ディレクティブで、エラーログがlocal6.errアクセスログはlocal6.notice、これは実際にログ行のレベルを設定します。エラーはlnavで赤くなり、その他は標準/情報になります。

ウサギの穴に注意してください;)

2
oucil

解決策の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
0
oucil