Перейти к содержанию

Как сделать

Как собрать журналы работы системы и базовой диагностики

Внимание

Утилита дорабатывается, представлена ее бета-версия.

Чтобы собрать логи, нужно выполнить следующие действия:

  1. Скачать архив logs.tgz.

    Скачать архив logs.tgz

  2. Скопировать архив logs.tgz на один из серверов системы.

  3. Распаковать архив.

  4. Запустить скрипт:

    bash lc.sh
    
  5. Скачать сформированный по результатам выполнения скрипта архив.

В процессе могут быть запрошены пароли для пользователя, под которым скрипт запущен для входа на остальные сервера, на которых установлена система. Пользователь должен иметь права на sudo.

Как собрать логи с сервера установщика при распределенной установке

  1. Проверить версию утилиты systemd:

    [root]# systemctl --version
    systemd 246 (v246.10-15.el7)
    

    Внимание

    Если установлена версия 223 и выше, то можно использовать маски для поиска сервисов. То есть не нужно перечислять номера сервисов: onpremise-container-s3storage1 onpremise-container-s3storage2 onpremise-container-s3storage3. Вместо этого можно использовать: onpremise-container-s3storage?.

  2. Запустить следующий скрипт на сервере, где находится установщик:

for i in `sudo calicoctl get nodes --output=yaml |grep ipv4IPIPTunnelAddr|awk '{ print($2) }' `;
do ssh -o StrictHostKeychecking=no $i "sudo journalctl --since \"2 days ago\"
-u onpremise-container-s3storage? -u onpremise-container-clddispatcher? 
-u onpremise-container-webdav-streamer? -u onpremise-container-s3pairdb?";
done |gzip >  /tmp/20230901.ONPREMIA-376.overall.log.gz

При работе данного скрипта происходит перебор всех серверов почты.

Как получить список доменов в почте

docker exec -i bizdb1 mysql -N -B <<< "select id,name from biz.domain;"

Примечание

Выполнив эту команду, вы получите список всех доменов, добавленных в административной панели. Вы также можете увидеть их в интерфейсе по https://biz.<mail_domain>.

Как конвертировать сертификат pfx в pem при выгрузке из AD

При выгрузке сертификата с AD может потребоваться его конвертация в pem файл. Для это выполните следующие команды:

# Объединенный PEM файл
openssl pkcs12 -in instmail.pfx -out cert.pem -nodes

# PEM файл без ключа
openssl pkcs12 -in instmail.pfx -clcerts -nokeys -out cert.pem

# Приватный ключ
openssl pkcs12 -in instmail.pfx -nocerts -out key.pem

# Удалить пароль с ключа
openssl rsa -in key.pem -out server.key

# Получить сертификат из URL
openssl s_client -showcerts -connect <server-address>:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

Как поменять пароль у пользователя через консоль

docker exec -it fmail1 bash
curl -X POST --data 'email=admin2@admin.qdit&password=password' 'http://serverside-api.qdit/api/v1/user/password/change'

Как добавить пользователя из консоли

docker exec -it fmail1 bash
curl -X POST --data-urlencode 'users=[{"login":"admin2","domain":"admin.qdit","password":"password"}]' 'http://serverside-api.qdit/api/v1/users/add'

Как запустить повторную индексацию писем для поиска

  1. Убедиться, что письма, по которым производится поиск не находятся в архиве Outlook.

  2. Найти ID пользователя:

    docker exec -i bizdb1 mysql -N -B <<< "use biz";  select id,mid,username,domain_name,nick from user where username = 'o.kosyankov' order by id;"
    
  3. Запустить повторную индексацию:

    docker exec -it crow-frontend1 bash
    # USER_ID = mid из предыдущего запроса
    curl  -H 'x-request-id: DEBUG' 'http://localhost:5229/api/crow_frontend/trigger_reindex?user_id=USER_ID&dont_wait=false&reconcile=2'
    

Как в установщике посмотреть версии почты и облака

Версии можно посмотреть по следующим ссылкам:

  • http://server-adress:8888/api/v1/roles/list?yaml=true
  • http://server-adress:8888/develop/roles

Как ограничить потребление CPU для victoria-metrics graphite/clickhouse

Чтобы исправить проблему высокого потребления CPU, необходимо ограничить ресурсы по 2 CPU и 6 GB RAM на контейнер:

  1. Остановите все контейнеры с названиями вида: graphite* и victoria-metrics* (например, graphite2 и victoria-metrics2):

    systemctl stop onpremise-container-graphite1.service
    systemctl stop onpremise-container-victoria-metrics1.servic
    
  2. В docker-compose файлы для всех контейнеров вида graphite* и victoria-metrics* в:

    • /opt/mailOnPremise/dockerVolumes/graphite1/compose/main-compose.yaml

    • /opt/mailOnPremise/dockerVolumes/victoria-metrics1/compose/main-compose.yaml

    Добавьте:

    deploy:
      resources:
        limits:
          memory: 6144M
          cpus: '2.0'
    
    после
    logging:
      driver: none
    

    Внимание

    Значение в поле cpus обязательно должно быть в одинарных кавычках.

    Пример:

    version: '3.7'
    
    services:
      victoria-metrics1:
        container_name: victoria-metrics1
        image: 100.70.80.204:5000/mntonpremise/onpremise-docker/victoria-metrics:v1.76.1
        hostname: hypervisor1.qdit
        domainname: hypervisor1.qdit
        network_mode: host
        restart: "no"
        volumes:
        - type: bind
          source: /opt/mailOnPremise/dockerVolumes/victoria-metrics1/conf
          target: /etc/prometheus
        - type: bind
          source: /opt/mailOnPremise/dockerVolumes/victoria-metrics1/data
          target: /prometheus
        env_file:
        - /opt/mailOnPremise/dockerVolumes/victoria-metrics1/custom.env
        dns:
        - 172.20.4.129
        dns_search: qdit
        logging:
          driver: none
        deploy:
          resources:
            limits:
              memory: 6144M
              cpus: '2.0'
    
  3. Запустите остановленные контейнеры:

    systemctl start onpremise-mail.target
    
  4. Проверьте статусы контейнеров graphite1, victoria-metrics1 и подобных им:

    systemctl status onpremise-container-graphite1.service
    systemctl status onpremise-container-victoria-metrics1.service
    

Как настроить интеграцию с FreeIPA

  1. Перейдите в административную панель по адресу biz.<mail_domain>.

  2. Перейдите в раздел КонфигурацияНастройкиActiveDirectory.

  3. Заполните все необходимые поля для интеграции с AD:

    freeipa_2

  4. Перейдите по адресу biz.<mail_domain>/admin/misc/configurations/adloaderclient/.

  5. Кликните по домену, для которого необходимо настроить интеграцию.

  6. Внести изменения в конфигурацию в поле options в соответствии с примером ниже.

    freeipa_1

Пример конфигурации:

{
    "syncer": {
        "id": 1,
        "sync_interval": "5m",
        "users": {
            "enable": true,
            "remove": false,
            "filter": "(&(objectClass=person)(mail=*@%[1]s))",
            "attr_map": {
                "mail": "mail",
                "unique_name": "uid",
                "proxy_addresses": ""
            },
            "remove_blocked": false,
            "create_blocked": false,
            "time_type": "FreeIPA",
            "logout_users": false,
            "pool_size": 50
        },
        "mailing": {
            "enable": true,
            "remove": false,
            "name_is_email": false
        }
    },
    "ad_client": {
        "username": "uid=service-vkt,cn=users,cn=accounts,dc=abc123,dc=abc",
        "password": "",
        "login_field": "dn",
        "login_filter": "(&(objectClass=person)(mail=%[1]s))",
        "base_dn": [
            "cn=users,cn=accounts,dc=abc123,dc=abc"
        ],
        "address": "10.1.100.100:389",
        "page_size": 100,
        "use_tls": false,
        "tls_cert": "",
        "skip_insecure": false
    }
}

Как отправить e-mail сообщение через ssh и powershell

Линукс

echo "This is the email body" | mail -r user000@example.local -S smtp=smtp.vk-workmail-srvmail.example.local:25 -s "test linux email" user001@example.local

Windows

Send-MailMessage -From "user000@example.local" -to "user004@example.local" -Subject "test from PS3" -Body "test321" -SmtpServer "smtp.vk-workmail-srvmail.example.local"

MacOS

user000@example.local"~ % echo "This is the email body" | mail -s user001@example.local" -s smtp=mxs.supermail.onprem.ru:1025 -s "test linux email" user002@example.local"
user000@example.local" ~ %

Как настроить доступ к веб-интерфейсу BECCA

Важно

Приведенное ниже описание относится к версиям VK WorkMail до 1.16 включительно. Начиная с версии 1.17 система аудита действий пользователя претерпела ряд измененений, и для версий 1.17 и выше представленная ниже информация не актуальна.

Веб-интерфейс BECCA находится по адресу https://becca.<mail_domain>. Чтобы получить доступ, выполните ряд настроек в веб-интерфейсе установщика http://server-address:8888: 1. Включите флаг Включить статистику по IP на вкладке Настройки в разделе Настройки компонентов -> Система учета действий пользователей 2. Укажите IP/подсети, для которых будет разрешен доступ к домену becca.<mail_domain>, в разделе Настройки -> Настройки компонентов -> Ограничение доступа к доменам. 3. Нажмите на синюю кнопку Сохранить, чтобы сохранить изменения.

![becca_turn_on](./Assets/HowTo/becca_turn_on.png)
  1. Перейдите на вкладку AdminPanel и запустить автоматическую установку, нажав на зеленую кнопку Play.

Как настроить интеграцию с ALDPro

  1. Перейдите в административную панель по адресу biz.<mail_domain>.

  2. Перейдите в раздел КонфигурацияНастройкиActiveDirectory.

  3. Заполните все необходимые поля для интеграции с AD:

    freeipa_2

  4. Перейдите по адресу biz.<mail_domain>/admin/misc/configurations/adloaderclient/.

  5. Кликните по домену, для которого необходимо настроить интеграцию.

  6. Внести изменения в конфигурацию в поле options:

    • В модели объекта attr_map в поле unique_name указать значение entryDN.
    • В модели объекта users в поле filter прописать значение rbtadp. rbtadp — это аналог организационных единиц (OU). Если организационных единиц много, то нужно перечислить их с помощью логического «или».

      "filter":"(&(mail=*@%p[1]s)(rbtadp=ou=vk2.ou=aldpro.company.ru,cn=orgunits,cn=account,dc=aldpro,dc=company,dc=ru))"
      
    • В модели объекта mailing в поле name_is_email указать значение true, если именем группы рассылки является email. По умолчанию принимает значение false.

    freeipa_1

Пример конфигурации:

{
    "syncer": {
        "id": 1,
        "sync_interval": "5m",
        "users": {
            "enable": true,
            "remove": false,
            "filter":"(&(mail=*@%p[1]s)(rbtadp=ou=vk2.ou=aldpro.company.ru,cn=orgunits,cn=account,dc=aldpro,dc=company,dc=ru))",
            "attr_map": {
                "unique_name": "entryDN",
                "department": "rbtadp"
            },
            "remove_blocked": false,
            "create_blocked": false,
            "time_type": "FreeIPA",
            "logout_users": false,
            "pool_size": 50
        },
        "mailing": {
            "enable": true,
            "remove": false,
            "name_is_email": true
        }
    },
    "ad_client": {
        "username": "uid=vkldap,cn=users,cn=accounts,dc=aldpro,dc=company,dc=ru",
        "password": "",
        "base_dn": [
            "dc=aldpro,dc=company,dc=ru"
        ],
        "address": "10.1.100.100:389",
        "page_size": 100,
        "use_tls": false,
        "tls_cert": "",
        "skip_insecure": false
    }
} 

Как выполнить полный перезапуск почты

systemctl stop onpremise-container-\* 
docker stop $(docker ps -q)
systemctl stop docker
systemctl start docker
systemctl start onpremise-mail.target #(на каждой ВМ)

Как настроить отправку журналов системы во внешний агрегатор

Для этого необходимо настроить rsyslog.

  1. В файле /etc/systemd/journald.conf установите параметр:

    ForwardToSyslog=yes
    
  2. Перезапусите journald:

    systemctl restart systemd-journald
    
  3. Проверьте наличие logrotate и установите при отсутствии:

    rpm -qa |grep logr
    logrotate-3.8.6-19.el7.x86_64
    
  4. Настройте ротацию системных журналов в файле /etc/logrotate.d/syslog.

  5. Проверьте содержимое:

    /var/log/cron
    /var/log/maillog
    /var/log/messages
    /var/log/secure
    /var/log/spooler
    {
        missingok
        compress
        daily
        sharedscripts
        postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
    }
    
  6. Добавьте в crontab строки:

    crontab -e
    
    15 0 * * * logrotate /etc/logrotate.conf 2>&1 > /dev/null
    
  7. В файл /etc/rsyslog.conf добавьте строку:

    *.* @@(o)<server>:<port>;RSYSLOG_SyslogProtocol23Format
    

    где

    • server — имя или адрес сервера агрегации журналов
    • port — порт сбора журналов
  8. Перезапустите сервис rsyslog:

    systemctl restart rsyslog
    

Как удалить данные из Clickhouse

Бывает, что в контейнере graphite* (БД для метрик мониторинга) утекает память. В таком случае нужно перезапустить контейнер с помощью команды:

systemctl restart onpremise-container-graphite1

Также graphite* может занять всё свободное пространство диска. Чтобы освободить место на диске следует удалить соответствующие таблицы в контейнере ClickHouse. Дисковое пространство, используемое контейнером, проверяется командами du, или ncdu:

root@server:~# ncdu /opt/mailOnPremise/dockerVolumes/
root@server:~# docker exec -it graphite1 clickhouse-client --query "TRUNCATE TABLE graphite.graphite"

Если по каким-то причинам невозможно выполнить TRUNCATE, тогда удаляем сами контейнеры:

root@server:~# rm /etc/systemd/system/onpremise-container-zookeeper1.service
root@server:~# rm /etc/systemd/system/onpremise-container-graphite1.service
root@server:~# systemctl stop onpremise-container-zookeeper1
root@server:~# systemctl stop onpremise-container-graphite1
root@server:~# rm -rf /opt/mailOnPremise/dockerVolumes/zookeeper1
root@server:~# rm -rf /opt/mailOnPremise/dockerVolumes/graphite1
root@server:~# systemctl restart deployer

Или одной строкой:

systemctl stop onpremise-container-zookeeper1 && systemctl stop onpremise-container-graphite1 && 
rm -rf /opt/mailOnPremise/dockerVolumes/zookeeper1 /opt/mailOnPremise/dockerVolumes/graphite1 &&
systemctl restart deployer && journalctl -fu onpremise-container-graphite1 -fu onpremise-container-zookeeper1

up_container:

  • zookeeper1
  • graphite1

Удалить данные из ClickHouse до определенной даты

Выполните команду:

alter table graphite.graphite delete where dateDiff('day', Date, toDate('2023-06-13')) > 0;

где внутри функции toDate укажите дату.

Как задать retention policy для victoria-metrics

  1. В файле /opt/mailOnPremise/dockerVolumes/victoria-metrics1/custom.env добавьте опцию:

    export RETENTIONPERIOD=1d
    
  2. Перезапустите сервис:

    systemctl restart onpremise-container-victoria-metrics1
    

В результате будет установлен интервал мерджа метрик в один день. Подробнее про retention policy: https://github.com/VictoriaMetrics/VictoriaMetrics?tab=readme-ov-file#retention.

Как посмотреть состояние нод в etcd кластере

Нужно выполнить следующие команды внутри контейнера etcd:

etcdctl --write-out=table --endpoints="http://172.20.2.215:2379,http://172.20.12.215:2379,http://172.20.1.216:2379" endpoint health

etcdctl --write-out=table --endpoints="http://172.20.2.215:2379,http://172.20.12.215:2379,http://172.20.1.216:2379" endpoint status

Примечание

IP-адреса, перечисленные в команде, являются стандартными, и их можно найти в веб-интерфейсе установщика.

Как установить права SuperUser для пользователя

  1. Перейти в файл:

    /opt/mailOnPremise/dockerVolumes/bizf1/app.env
    
  2. Изменить строчку SUPERUSERS=admin@admin.qdit, где указать пользователей с правами SuperUser:

    SUPERUSERS=admin@admin.qdit,admin2@admin.qdit
    
  3. Перезапустить контейнер bizf1:

    systemctl restart onpremise-container-bizf1
    
  4. Повторить операцию для всех контейнеров вида bizf*.

Как очистить гипервизор для переустановки системы (без удаления дистрибутива)

Примечание

В командах ниже используется директория /home/deployer/. Но если при установке Почты вы распаковали архив с дистрибутивом в другую директорию, корректно укажите ее в командах.

  1. Остановите систему и удалите юнит-файлы:

    systemctl stop onpremise-*
    systemctl stop deployer
    find /etc/systemd/system/onpremise-* -type f | xargs rm
    rm -rf /etc/systemd/system/onpremise-mail.target.wants
    systemctl daemon-reload
    
  2. Остановите и удалите контейнеры (и их образы):

    docker stop $(docker ps -q)
    docker rm -f $(docker ps -aq)
    for i in $(docker images -a |awk '{ print($3) }' |grep -v IMAGE); do docker rmi -f $i; done
    
  3. Удалите логи:

    find /var/log/ -maxdepth 1  | egrep "(.*1$|calico)" | xargs rm -rf
    > /var/log/daemon.log
    > /var/log/syslog
    sudo journalctl --rotate
    sudo journalctl --vacuum-time=1s
    
  4. Очистите установщик:

    rm -rf /home/deployer/logs/
    rm -rf /home/deployer/yamlBak/
    rm -rf /home/deployer/bizOwner.pass
    rm -rf /home/deployer/computes*
    rm -rf /home/deployer/*.yaml
    
  5. Очистите папку opt:

    rm -rf /opt/*
    
  6. Очистите iptables:

    iptables -P INPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    
    iptables -F
    iptables -X
    iptables -Z
    
    iptables -t nat -F
    iptables -t nat -X
    iptables -t mangle -F
    iptables -t mangle -X
    iptables -t raw -F
    iptables -t raw -X
    
  7. Очистите конфигурации calico:

    rm -rf /etc/calico
    rm -f /usr/bin/calicoctl
    
  8. Запустите повторную установку:

    systemctl restart deployer  
    

Как полностью очистить гипервизор для переустановки системы

Примечание

В командах ниже используется директория /home/deployer/. Но если при установке Почты вы распаковали архив с дистрибутивом в другую директорию, корректно укажите ее в командах.

  1. Остановите систему и удалите юнит-файлы:

    systemctl stop onpremise-*
    systemctl stop deployer
    find /etc/systemd/system/onpremise-* -type f | xargs rm
    rm -rf /etc/systemd/system/onpremise-mail.target.wants
    systemctl daemon-reload
    
  2. Остановите и удалите контейнеры (и их образы):

    docker stop $(docker ps -q)
    docker rm -f $(docker ps -aq)
    for i in $(docker images -a |awk '{ print($3) }' |grep -v IMAGE); do docker rmi -f $i; done
    
  3. Удалите логи:

    find /var/log/ -maxdepth 1  | egrep "(.*1$|calico)" | xargs rm -rf
    > /var/log/daemon.log
    > /var/log/syslog
    sudo journalctl --rotate
    sudo journalctl --vacuum-time=1s
    
  4. Очистите установщик:

    rm -rf /home/deployer/configs/
    rm -rf /home/deployer/static/
    rm -rf /home/deployer/logs/
    rm -rf /home/deployer/yamlBak/
    rm -rf /home/deployer/onpremise-deployer_linux
    rm -rf /home/deployer/bizOwner.pass
    rm -rf /home/deployer/computes*
    rm -rf /home/deployer/deployerParams.yaml
    rm -rf /home/deployer/main.yaml
    rm -rf /home/deployer/source/dockerRepo.tar
    rm -rf /home/deployer/source/repo.tar
    rm -rf /home/deployer/source/tarballs.tar
    
  5. Очистите папку opt:

    rm -rf /opt/*
    
  6. Очистите iptables:

    iptables -P INPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    
    iptables -F
    iptables -X
    iptables -Z
    
    iptables -t nat -F
    iptables -t nat -X
    iptables -t mangle -F
    iptables -t mangle -X
    iptables -t raw -F
    iptables -t raw -X
    
  7. Очистите конфигурации calico:

    rm -rf /etc/calico
    rm -f /usr/bin/calicoctl
    
  8. Запустите повторную установку:

    systemctl restart deployer