• Логирование веб-приложений: syslog и stdout/stderr?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    1. стандартная служба syslog умеет парсить логи по facility, следовательно можно настроить логирование разных компонентов в разные файлы на уровне syslog, управлять их ротацией.
    Также syslog умеет работать с другими syslog, таким образом можно аггрегировать логи с разных машин и управлять ими централизованно.

    2. логи отправленные в stdout обычно куда-то перенаправляют, в тот же файл, или сразу грабят в какой-то аггрегатор.
    В современное время про stdout чаще всего говорят, когда вы запускаете что-то в контейнере, а контейнер крутится в оркестраторе типа kubernetes/openshift.
    В этом случае настраивается внешний сборщик - тот же filebeat, fluentd, logstash или syslog, который собирает логи со всего кластера кубернетес/опенщифт, парсит их и кидает в аггрегатор.
    Просто задеплоили новый компонент и по его имени можно фильтровать логи в той же Кибане, при этом нигде не нужно в системе логирования настраивать что-то под новый компонент, все тегируется автоматом.
    Ответ написан
    Комментировать
  • Терминология: почему контейнеры называют микросервисами?

    Griboks
    @Griboks
    Микросервис - это элемент архитектуры.
    Контейнер - это его реализация.
    В 90% случаев микросервис реализуется через контейнер, а контейнер в 80% случаев реализует микросервис. Поэтому в народе эти понятия слились (как статистика и статистические данные).
    Ответ написан
    Комментировать
  • Почему mysql сервер может подтреблять столько ресурсов?

    karabanov
    @karabanov Куратор тега Linux
    Системный администратор
    Посмотри show full processlist \G
    Включи slow_log и посмотри, какие запросы следует оптимизировать.
    Ответ написан
    Комментировать
  • Как работают PHP-потоки (stream)? почему они не загружаются полностью в память?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Эту инфу нужно искать в отрыве от языка, это уровень операционной системы.
    Один из ответов на SO:
    What is Under the Hood in a Stream in Programming?
    Upd. Еще есть пересекающаяся тема как http streaming,
    я когда-то для себя шпаргалку писала (ссылка)
    Ответ написан
    1 комментарий
  • Как в докер контейнере mysql записывать медленные запросы в папке проекта?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Перед запуском докера создайте пустой файл и дайте полные права (конечно slow.log а не slow.cfg)
    touch ./resources/docker/logs/slow.log
    chown 777 ./resources/docker/logs/slow.log


    - "./resources/docker/logs/slow.log:/var/log/mysql/mysql-slow.log"


    А лучше пробросьте в контейнер всю папку logs

    volumes:
          - "./resources/docker/config/my.cfg:/etc/mysql/conf.d/config-file.cnf"
          - "./resources/docker/logs/mysql/:/var/log/mysql/"
          - "./resources/schema/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql"
    Ответ написан
    Комментировать
  • Docker и php-fpm: почему рекомендуют не пробрасывать ip?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Самое главное не высунуть php-fpm порт наружу в интернет что бы никто не запустит на нем какой-нибудь зловред.

    Если же порт торчит из докера и прикрыт с наружи файр-волом то занчит вы знаете что делаете и принимаете на себя управление рисками you know exactly what you are doing (and are willing to accept the extreme risk)

    Ели же у Вас из докера в интернет торчит неважно кто рнр, база данных или еще какой-нибудь сервис - повертье желающих его взломать достаточно
    Ответ написан
    Комментировать
  • Как писать условие if если очень много значений для проверки, а нужно чтобы они за экран не залезали, не превращались в очень длинную строку?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это очень хороший вопрос!

    Для длинных условий можно и нужно использовать такую замечательную практику, как именованные условия!
    В большинстве случаев, когда условия не зависят друг от друга, можно просто присвоить результат вычисления условия переменной с обязательно говорящим именем, и дальше уже использовать эти переменные:

    $dateIsValid = $obj->getDate() >= getCurrentDate();
    $balanceOk = $obj->getBalance() > 0;
    // Любые другие условия
    if ($dateIsValid && $balanceOK) ...


    Это повышает читабельность не только сокращая само тело условного оператора, но в первую очередь превращая его в связный текст!

    Если же условия зависят друг от друга, то можно оформлять их в виде функций (методов). И тогда они не будут выполнены, если до них не дойдет очередь.
    Ответ написан
  • Как писать условие if если очень много значений для проверки, а нужно чтобы они за экран не залезали, не превращались в очень длинную строку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    It depends.
    Абстрактных решений тут не будет, всё зависит от того, что это именно за условия.
    Из стандартных методов - упрощение логических выражений, вынесение условий в функции, замена проверок вида x == 1 || x == 2 || ... || x == n на [1, 2, ..., n].includes(x) и т.п.
    Ответ написан
    Комментировать
  • Какие есть варианты повышения для вебмастера?

    Tomio
    @Tomio
    backend developer (python, php)
    Когда-то очень давно я был в такой же ситуации, как и вы. Просто упёрся в потолок. И тут дело даже не в зп, мне могли ее повысить. Дело в пуле задач, которые я решал. Он был ограничен веб-мастерингом, очень разрозненным (сео, формошлёпство, вёрстка, контент).
    В итоге, как бы комфортно мне ни было, я решил, что нужно двигаться дальше. Сменил работу, стал чисто бэкендером. В итоге хорошо прокачал PHP, MySQL, освоил Git. Потом снова сменил работу, освоил на ней Symfony, Clickhouse, Kubernetes. А потом вообще сменил язык и сейчас активно работаю на Python с очень крутым стэком. Соответственно, зп моя очень сильно выросла, так как знаний и опыта стало больше и цениться на рынке я стал выше. А главное, я кайфую сейчас от того, чем занимаюсь)
    Не бойтесь, вырывайтесь из этого болота, пока не поздно. Думайте наперёд.
    Ответ написан
    Комментировать
  • Почему не срабатывает команда "mkdir 1 | mkdir 1/2"?

    karabanov
    @karabanov Куратор тега Linux
    Системный администратор
    Создать директорию с именем 1 и в случае успеха выполнить ещё одну команду которая создаст поддиректорию 2 в директории 1:
    mkdir 1 && mkdir 1/2

    А это mkdir 1 | mkdir 1/2 не логический оператор, а pipe - труба для направления вывода в другое приложение.
    Ответ написан
    5 комментариев
  • Можно ли в бесплатном периоде AWS переустановить OS?

    Не слетит, он на машиночасы распространяется, а не на конкретные машины.
    Ответ написан
    Комментировать
  • Как на постфиксе создать ящик no-reply@domainname?

    @mezhuev
    Системный администратор
    По всей видимости почтовый клиент пытается проверить корректность настройки путём отправки самому себе письма. Но так как у вас стоит reject, то подобная проверка заведомо завершается ошибкой (код ответа 5xx). У вас есть несколько вариантов (сверху вниз от простого к сложному, снизу вверх от более правильного к менее правильному):
    1. Игнорировать ошибку. Если остальные параметры верные, то отправка писем будет работать корректно.
    2. Вместо reject использовать discard. Из минусов реальные отправители не получат отчёт DSN о невозможности доставки.
    3. Более гибко настроить ограничения, разрешив no-reply@domainname отправлять письма самому себе. Можно реализовать создав собственные ограничения через smtpd_restriction_classes.
    4. Удалить данный ящик и вместо него использовать синоним, прописав в почтовом клиенте пользователя дополнительный профиль с необходимым адресом и именем отправителя. А чтобы все подряд не слали почту от данного имени настроить smtpd_sender_login_maps.
    5. Вообще не делать рассылку руками, а использовать соответствующий сервис.
    Ответ написан
    2 комментария
  • В чем разница между docker-compose и gitlab ci services?

    vabka
    @vabka
    Токсичный шарпист
    docker-compose - это инструмент для создания композиции из докер-контейнеров
    gitlab ci services - это штука для поднятия каких-то сервисов доступных во время процесса ci/cd
    И то, и другое, позволяет управлять приложением из нескольких образов, верно?

    Нет, не верно - это делает только docker-compose

    Принципиально они предназначены для решения совершенно разных задач.

    Короче вы пытаетесь сравнить тёплое с мягким.

    Вот если у меня зависимость от СУБД, где её надо прописывать? В services? В .docker-compose.yml?

    Если эта зависимость возникает на этапе тестирования, то да - в services
    Если эта зависимость возникает на этапе работы в проде - тогда уже разбираться с продакшен окружением надо, а не с гитлабом, в том числе и с композом, если вы используете его.
    Ответ написан
    1 комментарий
  • Принимать ли job offer без обсуждения проекта?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    При получении job offer с европейской галлеры не дают ссылку на проект по security причинам. Лишь упоминается что это "хороший клиент" Время - 2 дня на подумать.


    Давать ссылку на проект и не должны. Но всего лишь "хороший клиент" недостаточно.
    Общее описание инфраструктуры, технологий должно быть. Например все живет на виртуалках, в докере или в облаке. Например какие языки используются и версии. Какие CI/CD инструменты. Дают ли Idea и тому подобные вещи. Они никак не связаны с NDA.
    А так - решать вам. В оффер условия работы вам сообщили, выбирайте что вам важнее.
    Ответ написан
    Комментировать
  • Как с помощью cron менять главную страницу сайта? каждый день новый html файл их 365?

    @rPman
    мини ликбез
    Есть два противоположных подхода к решению задачи, и выбор зависит от того, на сколько в принципе сложен сайт.

    Есть в веб разработке понятие - статика. Исходит оно из того что отдавать не изменяющийся файл тупо быстрее/проще/эффективнее по ресурсам чем изменяющийся по какой то логике, и у веб серверов для этого есть отдельная настройка. Часть файлов веб сервера - статичны. И даже существуют веб сайты, которые полностью могут состоять из статичных файлов.

    Это не значит что файлы нельзя менять, но само понятие работы веб клиентов подразумевает ожидание что файлы не меняются, а значит при изменении файла на сервере, клиент может продолжать видеть старую версию, причем разные клиенты увидят обновления - в разное время. Это называется - настройки кеширования, и даже для статики у веб серверов есть настройки на этот счет (правда уменьшая время жизни файла в кеше, уменьшается бонус от его статичности, ведь его будут чаще запрашивать).

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

    Никто не мешает контент генерировать динамически и код стартовой страницы может выглядеть примерно так:
    <?php include date('d-m').'.html'; ?>где нужные страницы по дням лежат в файлах к примеру с именем вида 21-11.html

    можно попробовать совместить бонусы от статики, отдавая динамической страницей не саму страницу, а только редирект на ее статическое имя:
    <?php header('Location: http://www.example.com/'.date('d-m').'.html');?>
    тогда сразу в нужный момент времени при заходе на сайт будет автоматический редирект на нужную страницу, и при этом все будет быстро и красиво, но пользователям будет доступны страницы с предыдущих дней по их имени, и их придется как то скрывать, если это актуально (например средствами прав доступа или просто перемещая файлы в другой каталог отдельным скриптом, пусть и по крону)

    ну и вариант с кроном, когда файл index.html ежесуточно заменяется копией, команда в крон может быть примерно такой:
    cp /путь/до/исходных/файлов/`date +%m-%d`.html /путь/до/папки/веб/сервера/index.html
    Ответ написан
    5 комментариев
  • Как создать самоперезапускающийся сервис systemd?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    В systemd для этого существуют таймеры. Делают ровно то, что вам нужно.
    Ответ написан
    2 комментария
  • Что происходит на рынке труда в айти?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    Если честно, то на рынке ИТ все сейчас очень сложно. Причин несколько, а анализ легко растянется на полноценную статью, даже была мысль написать наХабр и Линкедин по этой теме. Постараюсь коротко пройтись по основным трендам.
    1. Доступность удаленной работы, соответственно регионы и Индия с низкими зарплатами ворвались на рынок.
    2. Миф о высокой зарплате. Когда то так было, сейчас курьер Яндекс-еды зарабатывает больше, чем средний программист. Про продажников даже не хочу говорить, знаю людей, легко имеющих и по миллиону в месяц.
    3. Мифы о легком старте. На самом деле точка входа в профессию достаточно высока, так как мало освоить навыки кодера, нужно еще иметь логическое мышление, знать математику, анализ, разбираться в предмете (физика для игр, экономика для 1С, производство для автоматизации и многое другое). И, возвращаясь к пунктам 1 и 2, за хорошую зарплату придется после пары месяцев курсов конкурировать с индусами, которые имеют по 10 лет опыта, с регионами, где есть специалисты с 20-летним опытом, готовые работать за зарплату джуна в Москве.
    4. Отдельно выделю сильно усложнившиеся программы, сложность разработки, несмотря на множество облегчающих жизнь инструментов, за последние годы выросла достаточно сильно.

    Как человек, проведший не один десяток собеседований (и изучивший пару сотен резюме) скажу, что рынок действительно перегружен людьми, которые ничего не понимают в ИТ, но окончили курсы и гонются за легкими деньгами. Найти среди этой кучи резюме хорошего специалиста становится сложно. Отдельная проблема - болтуны, у которых опять же хорошо подвешен язык, но нет понимания реальной работы ИТ. Когда к этому приложена низкая квалификация руководства, происходит беда - сотрудников много, зарплаты высокие, а реально всю работу тащит один старый сотрудник, который 90% времени занят мыслями что его не ценят и пора валить.

    Надеюсь, ответил достаточно понятно)
    Ответ написан
    4 комментария
  • Как сделать readinessProbe по тексту файла?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    вам не нужен cat и ненужный pipe - просто
    grep -q "app start" /app/log

    Но вы уверены, что это нормально - просматриивать целый лог файл каждую итерацию рединесс пробы?
    Может быть все-таки лучше в программу добавить дополнительный ендпоинт и проверять ее через http пробу?
    Ответ написан
    2 комментария