Всем привет.
Потребовалось Заказчику собирать статистику посещаемости и красиво рисовать.
Хотел сделать через Grafana + Prometheus (в Grafana есть шаблон под это дело), но у меня не получилось. Это сейчас в процессе исследования. Хотелось бы, конечно, победить.
В данный момент Заказчик использует AWSTATS и согласен на него. Т.к. у нас везде Docker, то написал docker-compose для развертывания контейнеров (их будет два, но об этом дальше..
И так…
Т.к. Россия теперь в немилости, то доступ к некоторым образам невозможен; ссылка на сам образ, в виде Tar-контейнера, будет ниже.
Мой docker-compose.yml вот такой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | version: '3.8' services: awstats: image: "${REGNEXUS}/awstats:latest" container_name: mon-awstats restart: always volumes: - /docker_data/awstats_sites:/etc/awstats/sites - /docker_data/awstats_logs:/var/local/log:ro - /docker_data/awstats:/var/lib/awstats - /docker_data/nginx_d/nginx_logs/mysite.111-access.log:/var/log/mysite.111-access.log:ro - /docker_data/awstats_sites/awstats.mysite.111.ru.conf:/etc/awstats/awstats.localhost.conf:ro networks: - netw1 aws_web: image: "${REGNEXUS}/awstats:latest" container_name: web-awstats restart: always command: httpd hostname: awstats.test.local ports: - "8081:8080" volumes: - /docker_data/awstats:/var/lib/awstats networks: netw1: name: docker_mon-network external: true |
Как видно, в конфиге присутствуют 2 секции: «awstats» и «aws_web».
«Awstats» настраивается именно для обработки лог-файлов от web-сервера.
«Aws-web» запускает свой web-сервера (httpd) и показывает графическое представление Awstats.
Подробнее об общих параметрах:
- image: Тут используется один и тот же образ. У меня он берется из локального Nexus’а, поэтому в .env указана соответствующая переменная. Если локально используете, то заменить на такое — image: openmicroscopy/awstats:latest и сохранить изменения;
- container_name: любое название, которое будет вам понятно;
- restart: в каком случае перезапускать контейнер. У меня указано всегда;
- volumes: то, какие каталоги на хостовой машине (где работает Docker) будут прокидываться внутрь контейнера. ro — Read Only, только для чтения;
- networks: название вашей сети. Не забудьте в конце конфига сделать описание сети (тут указано для примера).
Для «web_aws» будут отличия:
- command: httpd — запустить web-сервер (Apache);
- hostname: имя для web-сервера, т.к. иначе будет в логе писать, что у него ошибка:
1 | AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.18.0.12. Set the 'ServerName' directive globally to suppress this message |
- ports: пробрасываем внешний порт (у меня 8081) на внутренний порт контейнера (8080), что бы был доступ из браузера;
- volumes: пробросить каталог с файлами, которые сгенерировал awstats.
Предварительно загрузить образ docker’ ом:
1 | docker image load -i awstats.tar |
В процессе увидим такое:
а потом можно проверить, что образ добавился:
1 | docker images |
Теперь выполнить команды:
запустим awstats
1 | docker-compose up -d awstats |
запусти web к нему
1 | docker-compose up -d aws_web |
-d — отправляет выполняться контейнер в фон, если вам нужно.
К сожалению, скринов не приложу, т.к. у меня через ansible публикуется всё это дело.
Подразумевается, что у вас web-сервер уже настроен и вы понимаете какие параметры надо указать в volumes, что бы awstats’у были доступны логи для последующей обработки.
Так же создан awstats.mysite.111.ru.conf где указаны все необходимые параметры.
P.S.
Поступила задача что бы всё отображалось на русском языке (awstats это умеет). В конфиге (у меня такой: awstats.mysite.111.ru.conf) так же указать Lang=»ru». Но это не помогло.
Пришлось делать в ручном режиме (подразумевается, что контейнер тот же, что по ссылке внизу). Делаем внутри web:
1. зайти в контейнер root’вым пользователем:
1 | docker exec -u 0 -it web-awstats bash |
где:
- -u 0 — как раз пользователем с id 0
- mon-awstats — название контейнера
2. там выполнить эти команды:
1 2 | localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 echo "LANG=ru_RU.UTF-8" > /etc/locale.conf |
где:
- ru_RU — русская локаль. Надо указать необходимую.
3. в файлах поменять «Lang=auto» на «Lang=ru»
1 2 3 | sed -i 's/Lang="auto"/Lang="ru"/g' /etc/awstats/awstats.model.conf sed -i 's/Lang="ru"/Lang="ru"/g' /etc/awstats/awstats.localhost.conf grep -i 'Lang=' /etc/awstats/awstats.* |
4. Перезапустить контейнер:
1 | docker restart web-awstats |
После чего почистить в браузере кеш и проверить наличие языка.
Ссылки:
Оригинал статьи | Сохраненная копия
If you found an error, highlight it and press Shift + Enter or to inform us.