Динамические ошибки и настраиваемые журналы в apache 2 с использованием поддоменов с подстановочными знаками

Я пытаюсь создать файл конфигурации VirtualHost с подстановочными знаками для apache2, и я не уверен, как обрабатывать ErrorLog и CustomLog настройки, чтобы поместить журналы туда, куда я хочу. Как вы можете видеть во втором 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 выше?

Я видел подстановочные знаки в виртуальных хостах с динамическими журналами? , но это не так на самом деле то, что мне нужно, так как в конечном итоге все журналы все равно помещаются в один большой файл, а не разделяются на отдельные папки, специфичные для поддоменов.

4
задан 16 May 2020 в 08:40
2 ответа

Рискуя дать вам больше работы, вы также можете подумать о том, чтобы пойти в противоположном направлении и объединить ВСЕ свои файлы журнала в системный журнал . Это кажется более устрашающим, но это гораздо более эффективное решение. Я больше не заморачиваюсь с отдельными журналами и просто передаю все журналы напрямую в системный журнал (который хранит все в / 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"

Системный журнал предоставит вам множество опций, поскольку существует множество служб и утилит, настроенных для его анализа и управления. Мне лично нравится использовать lnav , вы можете фильтровать, сортировать, искать и т. Д., А интерфейс через ssh окрашен в разные цвета, поэтому легко обнаруживать проблемы. Вы также можете использовать служебные программы, чтобы доставить все это в базу данных SQL, где нет предела, или для меньшей работы вы можете использовать коммерческие службы, такие как datadog , которые имеют красивые панели мониторинга :).

Вы хотите прочитать о таких вещах, как средства ( local1-7 ), которые позволяют вам назначать группы в основном службам, не имеющим встроенного журнала syslog.

В определении выше, я отправляю свои журналы доступа и ошибок в logger , который представляет собой служебную программу, предназначенную для приема журналов и записи их в общем формате в системный журнал вместе с подробностями службы, предоставляющей их.Вы можете видеть, что % v - это первая часть моего журнала доступа, которая упрощает фильтрацию vhosts в системном журнале в будущем.

Вы заметите в директивах, что ошибка log использует local6.err , в то время как журнал доступа использует local6.notice , это фактически устанавливает уровень строки журнала, ошибки будут окрашены в красный цвет в lnav ], а остальные будут стандартными / info.

Остерегайтесь кроличьей дыры;)

3
ответ дан 4 January 2021 в 07:34

Одним из решений было бы разделить объединенный журнал постфактум. У 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.

Объединенный файл журнала считывается из стандартного ввода. Прочитанные записи будут добавлены к любым существующим файлам журнала.

split-logfile < access_log
0
ответ дан 4 January 2021 в 07:34

Теги

Похожие вопросы