• Можно ли в Zabbix получить несколько метрик Prometheus в одном правиле автообнаружения?

    @mezhuev
    Системный администратор
    Можно через зависимые элементы данных. Создаёте один основной элемент, который непосредственно получает данные, и сколько требуется зависимых элементов, которые уже точечно извлекают требуемые метрики. Причём для основного элемента вам даже историю можно не хранить. Для примера можете посмотреть штатный шаблон «Etcd by HTTP».
    Ответ написан
    Комментировать
  • Что лучше 993 SSL/TLS или 143 STARTTLS? В чём разница приниципиальная? Также что лучше 587 STARTTLS или 465 SSL/TLS?

    @mezhuev
    Системный администратор
    В настоящее время, согласно RFC 8314, следует использовать неявное шифрование, то есть порты 465/TCP (Submissions), 993/TCP (IMAPS) и 995/TCP (POP3S). В частности в разделе 3 сказано:
    Previous standards for the use of email protocols with TLS used the STARTTLS mechanism: [RFC2595], [RFC3207], and [RFC3501]. With STARTTLS, the client establishes a cleartext application session and determines whether to issue a STARTTLS command based on server capabilities and client configuration. If the client issues a STARTTLS command, a TLS handshake follows that can upgrade the connection. Although this mechanism has been deployed, an alternate mechanism where TLS is negotiated immediately at connection start on a separate port (referred to in this document as "Implicit TLS") has been deployed more successfully. To encourage more widespread use of TLS and to also encourage greater consistency regarding how TLS is used, this specification now recommends the use of Implicit TLS for POP, IMAP, SMTP Submission, and all other protocols used between an MUA and an MSP.

    Однако следует отметить, что на протяжении примерно 20 лет с конца 90-х использование 465/TCP (aka SMTPS) наоборот считалось устаревшим в пользу 587/TCP (Submission). Но сложившаяся практика и всеобщий тренд на TLS изменили положение вещей.
    Ответ написан
    5 комментариев
  • "Настоящий" ipv6 - провайдер, файрволл, роутер?

    @mezhuev
    Системный администратор
    1. Ваш провайдер должен предоставлять услугу IPv6, а ваш маршрутизатор должен быть способен работать в том формате, который предоставляет провайдер, как правило это DHCPv6 Prefix Delegation с местными наслоениями.
    2. По сути как и в «классической» маршрутизации IPv4. Несмотря на то, что у каждого устройства будет свой настоящий IPv6-адрес, весь трафик всё равно проходит через ваш маршрутизатор и с помощью подобных правил (синтаксис условный) можно настроить ограничения:
      allow all from 2001:db8::/32 to any
      allow icmp from any to 2001:db8::/32
      allow https from any to 2001:db8::10
      deny all

    3. Провайдеры с поддержкой IPv6 в РФ есть: version6.ru/isp.

    P. S. Внятные объяснения по поводу префиксов: https://www.ripe.net/publications/docs/ripe-690/
    Ответ написан
    Комментировать
  • Nginx почему brеak не работает?

    @mezhuev
    Системный администратор
    Конфигурация работает ровно так, как и написано, а If is Evil (если не знать как ей пользоваться). В вашем случае директива if вообще не нужна и, как вы уже сами могли убедиться, даже вредна. Избавиться от неё можно, например, через дополнительный location:
    location /users {
      auth_request auth-validate;
      auth_request_set $auth_status $upstream_status;
      proxy_pass http://userService;
    }
    
    location ~ ^/users(?:/(?:find|reset-password)(?:/[^/]+)?|/verify-email/[^/]+)?$ {
      proxy_pass http://userService;
    }

    Или если вы уже перешли или собираетесь переходить на Angie, то в более человекочитаемом виде:
    location /users {
      auth_request auth-validate;
      auth_request_set $auth_status $upstream_status;
      proxy_pass http://userService;
    }
    
    location ~^/users$
             ~^/users/reset-password$
             ~^/users/reset-password/[^/]+$
             ~^/users/verify-email/[^/]+$
             ~^/users/find$
             ~^/users/find/[^/]+$ {
      proxy_pass http://userService;
    }

    В обоих вариантах map больше не требуется, конфигурация имеет более однозначный вид и содержит меньше строк.
    Ответ написан
    Комментировать
  • Можно ли ускорить запись на ZFS через кэш?

    @mezhuev
    Системный администратор
    Но я не смог найти инфу про ускорение записи через какой-нибудь дешёвый SSD. Так возможно ли это?

    Краткий ответ: с использованием SSD невозможно, ставьте CMR-диски.

    Фактическое поведение ZFS зависит от режима записи: синхронный или асинхронный.

    В асинхронном режиме (режим по умолчанию или при sync=disabled) запись происходит группами транзакций (txg) с периодичностью, стремящейся к значению zfs_txg_timeout — это и есть кэш записи ZFS, доступный из коробки и единственно возможный. Значение по умолчанию 5 секунд, фактическое время зависит от множества факторов и может быть как меньше, так и больше. На свой страх и риск можно поиграться с параметрами, влияющими на данное поведение, но физику не обманешь и вы всё равно довольно быстро упрётесь в фактическую производительность дисков.

    В синхронном режиме (если приложение явно запрашивает синхронную запись или при sync=always), данные аналогично помещаются в память, но запись не будут подтверждена пока не завершиться запись в ZFS Intent Log (ZIL), который является частью пула. После этого данные в рамках очередной txg записываются на диск (да, ещё раз) уже на своё постоянное место. Можно снизить нагрузку на диски добавив SLOG на базе SSD (желательно двух и в mirror, так как эти данные важны в случае сбоя). Но это не кэш записи, а способ немного увеличить производительность записи при некоторых сценариях. Ещё на синхронную запись и работу с ZIL влияет logbias.

    Можно было бы подумать, что при использовании sync=always и отдельном SLOG мы заставим все данные писаться сначала на SSD и тем самым получим кэш записи, но нет. При нормальном режиме работы данные из ZIL, где бы он не находился, никогда не читаются, так как они есть в оперативной памяти. ZIL используется только для восстановления после сбоев.
    Ответ написан
    Комментировать
  • Не могу запустить kubernetes-dashboard. В чем может быть причина?

    @mezhuev
    Системный администратор
    "kong" = "docker.io/kong", не уверен что правильно

    kong — это docker.io/library/kong. Но чтобы было более понятно, я бы в values добавил:

    kong:
      image:
        repository: docker.io/library/kong
    Ответ написан
  • Как проще всего сделать резервный образ системы на ZFS?

    @mezhuev
    Системный администратор
    Проще всего на случай отката при неудачном обновлении сделать снапшот:
    zfs snapshot -r rpool@backup

    Для резервного копирования всей ФС существуют zfs send/zfs receive. Потребуется другой ZFS-пул для приёма (теоретически можно и в файл, но не могу рекомендовать из-за риска потери данных). Плюс все другие «стандартные» возможности резервного копирования никто не запрещает применять.
    Ответ написан
    7 комментариев
  • Возможна ли интеграция Node Exporter Prometheus с Zabbix?

    @mezhuev
    Системный администратор
    Можно, Zabbix из коробки поддерживает Prometheus checks.
    Ответ написан
  • Ansible grep json?

    @mezhuev
    Системный администратор
    Нет смысла заранее формировать JSON, можно сразу сохранить из YAML:
    - name: Get hardware facts
      ansible.builtin.setup:
        filter: 
          - processor
          - memtotal_mb
      register: devices
    
    - name: Save hardware facts
      ansible.builtin.copy:
        content: '{{ devicenames | to_nice_json }}'
        dest: /home/rootuser/ansible/!final_result_files/{{ inventory_hostname }}_hardware_info2_FINAL.json
      delegate_to: localhost
      vars:
        devicenames:
          Cpu: '{{ devices.ansible_facts.ansible_processor[2] }}'
          Mem: '{{ devices.ansible_facts.ansible_memtotal_mb }}'

    Но на самом деле эту операцию можно выполнить в один шаг:
    - name: Save hardware facts
      ansible.builtin.copy:
        content: '{{ devicenames | to_nice_json }}'
        dest: /home/rootuser/ansible/!final_result_files/{{ inventory_hostname }}_hardware_info2_FINAL.json
      delegate_to: localhost
      vars:
        devicenames:
          Cpu: '{{ ansible_processor[2] }}'
          Mem: '{{ ansible_memtotal_mb }}'
    Ответ написан
    1 комментарий
  • Grafana/ Loki как расчитать среднее время ответа backend из данных логов nginx ingress?

    @mezhuev
    Системный администратор
    Как-то так:
    avg_over_time({job="default/ingress-nginx"}
    |= `default-backend-dev-80`
    != `Blackbox Exporter`
    | pattern `… <upstream_response_time> …`
    | unwrap upstream_response_time
    | __error__=`` [$__interval])

    Вместо $__interval можно указать конкретное значение. Ещё пара примеров.
    Ответ написан
    Комментировать
  • Доступ на шлюз zaywall из вне, нужен ли?

    @mezhuev
    Системный администратор
    Данное правило необходимо для работы различных типов VPN, поддерживаемых устройством. Вы можете изменить его по своему желанию (оставить только необходимые протоколы, ограничить по IP-адресу, настроить расписание) или полностью отключить, если не планируете использовать VPN.
    Ответ написан
    Комментировать
  • На каком движке сделать музыкальный сайт?

    @mezhuev
    Системный администратор
    Странно, что вам не попал в выдачу Subsonic и его форки. Но есть решение лучше — Navidrome — работает быстрее, требует меньше ресурсов и имеет совместимое API, соответственно любое приложение, умеющее работать с Subsonic, будет работать с Navidrome.
    Ответ написан
    Комментировать
  • Как в VSCode отключить это?

    @mezhuev
    Системный администратор
    Просто щёлкните по «don't show» и подсказка не будет появляться. Или откройте параметры (Ctrl+,) и в поиске введите workbench.editor.empty.hint.
    Ответ написан
    3 комментария
  • Как в nginx перенаправить главную страницу на другой docker контейнер?

    @mezhuev
    Системный администратор
    location = / {
        proxy_pass http://127.0.0.1:8081/;
    }
    location / {
        proxy_pass http://127.0.0.1:8080/;
    }

    Или по вашему варианту, но первый предпочтительней:
    location / {
        proxy_pass http://127.0.0.1:8081/;
    }
    location ~ ^/.+ {
        proxy_pass http://127.0.0.1:8080;
    }
    Ответ написан
  • Postfix и домен 3 уровня?

    @mezhuev
    Системный администратор
    Можете направить в какой то мануал, чтобы иметь представление как это реализовать?

    Postfix Virtual Domain Hosting Howto
    Ответ написан
    Комментировать
  • В чем отличие одной пары квадратных скобок, в отличие от двух вложенных друг в друга? [] и [[]]?

    @mezhuev
    Системный администратор
    Если кратко, то [ это синоним для test. Обрабатывается как и любая другая команда с соответствующими ограничениями. [[ — это расширение Bash (не совместимо с другими оболочками) и так как это внутренняя команда, то имеет несколько больше возможностей. В частности, нет необходимости заключать переменные в кавычки, можно использовать &&, ||, < и > и есть поддержка регулярных выражений через оператор =~. Для подробностей смотрите man bash.
    Ответ написан
    7 комментариев
  • ESXi скрипт в cron, что со временем?

    @mezhuev
    Системный администратор
    ESXi внутри использует UTC, хоть и показывает в интерфейсе время согласно установленному часовому поясу. Соответственно если вы в московском часов поясе, то всё верно: 2:00 UTC + 3 часа = 5:00 MSK.
    Ответ написан
    Комментировать
  • Где взять шаблон Zabbix?

    @mezhuev
    Системный администратор
    Все официальные шаблоны можно взять из репозитория Zabbix. Нужный вам шаблон есть в ветке release/5.0.
    Ответ написан
  • Совместимость реализаций ZFS?

    @mezhuev
    Системный администратор
    FreeBSD перешла на OpenZFS с версии 13.0. В целом же различные реализации ZFS совместимы между собой при условии, что у пула список активированных Feature Flags поддерживается всеми системами, где его планируется использовать.
    Ответ написан
    Комментировать
  • Thunderbird настройка через GPO - как?

    @mezhuev
    Системный администратор
    Некоторые базовые возможности были добавлены какое-то время назад: enterprise.thunderbird.net, но список не сказать что большой и практически не расширяется. Поэтому если нужна максимальная гибкость, то через правку конфигурационного файла (см. MCD). При этом файл autoconf.js может находиться на веб-сервере и динамически формироваться под каждого пользователя. Решение нельзя назвать тривиальным, но это работает.
    Ответ написан
    Комментировать