По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Docker — популярная платформа виртуализации на уровне ОС. Она поставляет приложения в пакетах (контейнерах), которые, представляют собой изолированные среды с собственным программным обеспечением, библиотеками и конфигурационными файлами.
Как и в любом другом современном программном обеспечении, протоколирование событий и сообщений, таких как предупреждения и ошибки, является неотъемлемой частью платформы Docker, что позволяет вам отлаживать приложения и решать производственные проблемы.
Мы рассмотрим несколько простых способов, с помощью которых вы можете управлять и отслеживать логи для своих контейнеров. Итак, давайте начнем.
Команда Docker Logs
Основной синтаксис для получения журналов контейнера следующий:
$ docker logs [OPTIONS]
или
$ docker container logs [OPTIONS]
Оба синтаксиса по сути одинаковы, поэтому в остальных командах в этой статье мы будем использовать именно docker logs.
Хотя следует отметить, что приведенная выше команда работает только для контейнеров, запущенных с драйвером журналирования json-file или journald.
Здесь OPTIONS относится к доступным поддерживаемым флагам команды docker logs, которые перечислены ниже:
Название, сокращение
Описание
--details
Показать дополнительные подробности.
--follow, -f
Проследить вывод
--since
Показывать журналы с временной меткой (например, 2021-08-28T15:23:37Z) или относительно (например, 56m для 56 минут)
--tail , -n
Количество строк, которые нужно показать с конца журнала
--timestamps, -t
Показать временные метки
--until
Показывать журналы до временной метки (например, 2021-08-28T15:23:37Z)
Пример:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28913415ed22 nginx "/docker-entrypoint.…" 2 seconds ago Up 1 second 80/tcp gifted_edison
$ docker logs 28913415ed22
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/08/28 09:02:59 [notice] 1#1: using the "epoll" event method
2021/08/28 09:02:59 [notice] 1#1: nginx/1.21.1
2021/08/28 09:02:59 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 09:02:59 [notice] 1#1: OS: Linux 5.8.0-1039-azure
2021/08/28 09:02:59 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 09:02:59 [notice] 1#1: start worker processes
2021/08/28 09:02:59 [notice] 1#1: start worker process 31
2021/08/28 09:02:59 [notice] 1#1: start worker process 32
$
Расположение журналов Docker
Docker по умолчанию собирает стандартный вывод (и стандартную ошибку) всех ваших контейнеров и записывает их в файлы, используя формат JSON. Для этого используется драйвер логирования JSON File или json-file. По умолчанию эти журналы хранятся в специфических для каждого контейнера местах в файловой системе /var/lib/docker.
/var/lib/docker/containers//-json.log
В качестве примера, для контейнера redis, указанного ниже, можно проверить файлы json, как показано во фрагменте ниже:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
551c9273bbea redis "docker-entrypoint.s…" 19 minutes ago Up 19 minutes 6379/tcp redis
6cc871763df1 nginx "/docker-entrypoint.…" 7 hours ago Up 7 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp nostalgic_wescoff
$ sudo ls -l /var/lib/docker/containers/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
-rw-r----- 1 root root 1437 Aug 28 16:53 /var/lib/docker/containers/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
$ sudo tail -10 /var/lib/docker/containers/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
{"log":"1:C 28 Aug 2021 16:53:42.160 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo\n","stream":"stdout","time":"2021-08-28T16:53:42.16031257Z"}
{"log":"1:C 28 Aug 2021 16:53:42.160 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=1, just started\n","stream":"stdout","time":"2021-08-28T16:53:42.160337871Z"}
{"log":"1:C 28 Aug 2021 16:53:42.160 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf\n","stream":"stdout","time":"2021-08-28T16:53:42.160342171Z"}
{"log":"1:M 28 Aug 2021 16:53:42.160 * monotonic clock: POSIX clock_gettime\n","stream":"stdout","time":"2021-08-28T16:53:42.160792578Z"}
{"log":"1:M 28 Aug 2021 16:53:42.161 * Running mode=standalone, port=6379.\n","stream":"stdout","time":"2021-08-28T16:53:42.161148683Z"}
{"log":"1:M 28 Aug 2021 16:53:42.161 # Server initialized\n","stream":"stdout","time":"2021-08-28T16:53:42.161170984Z"}
{"log":"1:M 28 Aug 2021 16:53:42.161 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.\n","stream":"stdout","time":"2021-08-28T16:53:42.161186984Z"}
{"log":"1:M 28 Aug 2021 16:53:42.161 * Ready to accept connections\n","stream":"stdout","time":"2021-08-28T16:53:42.161484389Z"}
$
Показать дополнительные подробности
Чтобы показать дополнительные подробности, предоставляемые в журналах, используйте флаг --details.
Пример:
$ docker logs 6cc871763df1 --details
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/08/28 10:29:05 [notice] 1#1: using the "epoll" event method
2021/08/28 10:29:05 [notice] 1#1: nginx/1.21.1
2021/08/28 10:29:05 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 [notice] 1#1: OS: Linux 5.8.0-1039-azure
2021/08/28 10:29:05 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 10:29:05 [notice] 1#1: start worker processes
2021/08/28 10:29:05 [notice] 1#1: start worker process 33
2021/08/28 10:29:05 [notice] 1#1: start worker process 34
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$
Просмотр вывода журнала
Вы можете использовать флаг --follow или -f для отслеживания вывода журнала. Это позволит вам следить за новыми обновлениями в потоке журналов из постоянных STDOUT и STDERR.
Пример:
$ docker logs 6cc871763df1 -f
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/08/28 10:29:05 [notice] 1#1: using the "epoll" event method
2021/08/28 10:29:05 [notice] 1#1: nginx/1.21.1
2021/08/28 10:29:05 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 [notice] 1#1: OS: Linux 5.8.0-1039-azure
2021/08/28 10:29:05 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 10:29:05 [notice] 1#1: start worker processes
2021/08/28 10:29:05 [notice] 1#1: start worker process 33
2021/08/28 10:29:05 [notice] 1#1: start worker process 34
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
Хвостовые журналы
С помощью флага --tail или -n журналы контейнера можно свести в хвост, чтобы ограничить количество выводимых на экран данных. По умолчанию этот флаг принимает в качестве аргумента all, который показывает весь поток журналов. Чтобы показать фиксированное количество строк от конца журнала, укажите целое положительное число после флага --tail или -n.
Пример:
$ docker logs 6cc871763df1 -n 10
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/08/28 10:29:05 [notice] 1#1: using the "epoll" event method
2021/08/28 10:29:05 [notice] 1#1: nginx/1.21.1
2021/08/28 10:29:05 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 [notice] 1#1: OS: Linux 5.8.0-1039-azure
2021/08/28 10:29:05 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 10:29:05 [notice] 1#1: start worker processes
2021/08/28 10:29:05 [notice] 1#1: start worker process 33
2021/08/28 10:29:05 [notice] 1#1: start worker process 34
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$
Показать журналы с момента появления
Мы можем ограничить вывод журналов, используя флаг --since и указывая временную метку, например абсолютное значение с синтаксисом 2021-08-28T15:23:37Z или относительное, например 56m для 56 минут.
Параметр --since показывает только журналы контейнеров, созданные после заданной даты. Вы можете указать дату как дату RFC 3339, временную метку UNIX или строку длительности Go (например, 1m30s, 3h). Если в конце временной метки не указано Z или смещение +-00:00, будет использоваться локальный часовой пояс клиента. Параметр --since можно комбинировать с одним или обоими параметрами --follow или --tail.
Пример:
$ docker logs --since=1m nostalgic_wescoff
172.17.0.1 - - [28/Aug/2021:15:19:24 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$
В приведенном выше примере показаны журналы только за 2 минуты, где nostalgic_wescoff - это автоматически сгенерированное имя, присвоенное контейнеру nginx.
Показать журналы до
Как и флаг --since, журналы docker также поддерживают флаг --until, который показывает журналы до заданной временной метки. Аналогично предыдущему флагу, временная метка может быть указана как абсолютное значение с синтаксисом 2021-08-28T15:23:37Z или относительное, например 56m для 56 минут.
Пример:
$ docker logs --until=1h30m nostalgic_wescoff
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/08/28 10:29:05 [notice] 1#1: using the "epoll" event method
2021/08/28 10:29:05 [notice] 1#1: nginx/1.21.1
2021/08/28 10:29:05 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 [notice] 1#1: OS: Linux 5.8.0-1039-azure
2021/08/28 10:29:05 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 10:29:05 [notice] 1#1: start worker processes
2021/08/28 10:29:05 [notice] 1#1: start worker process 33
2021/08/28 10:29:05 [notice] 1#1: start worker process 34
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$
В приведенном выше примере будут показаны все журналы до 1 часа 30 минут.
Показать временные метки
Многие контейнерные приложения предлагают временные метки, встроенные в вывод логов, поэтому Docker также показывает их с помощью команды docker logs. Если вам нужно, чтобы Docker явно префиксировал свои временные метки в выводе, используйте флаг --timestamps или -t.
Пример:
$ docker logs -t redis
2021-08-28T16:53:42.160312570Z 1:C 28 Aug 2021 16:53:42.160 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2021-08-28T16:53:42.160337871Z 1:C 28 Aug 2021 16:53:42.160 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=1, just started
2021-08-28T16:53:42.160342171Z 1:C 28 Aug 2021 16:53:42.160 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
2021-08-28T16:53:42.160792578Z 1:M 28 Aug 2021 16:53:42.160 * monotonic clock: POSIX clock_gettime
2021-08-28T16:53:42.161148683Z 1:M 28 Aug 2021 16:53:42.161 * Running mode=standalone, port=6379.
2021-08-28T16:53:42.161170984Z 1:M 28 Aug 2021 16:53:42.161 # Server initialized
2021-08-28T16:53:42.161186984Z 1:M 28 Aug 2021 16:53:42.161 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
2021-08-28T16:53:42.161484389Z 1:M 28 Aug 2021 16:53:42.161 * Ready to accept connections
$
Объединение флагов
Docker предлагает объединить некоторые флаги, чтобы получить более отфильтрованный вывод, а не печатать все содержимое журнала на экране. В качестве простого примера мы можем объединить флаг --tail с --since, чтобы получить более ограниченный вывод.
Пример:
$ docker logs --since=2h -f nostalgic_wescoff
172.17.0.1 - - [28/Aug/2021:15:19:24 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
Это может работать и с другими флагами.
Фильтр с помощью утилит оболочки
Утилиты оболочки Linux также могут быть использованы для более гибкого вывода журнала. Такие утилиты, как grep, head, tail и т. д., могут быть направлены на вывод логов docker для более сложных операций.
Пример:
$ docker logs --since=7h nostalgic_wescoff 2>&1 | grep GET
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:24 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$
Обратите внимание, что нам нужно перенаправить потоки журналов, чтобы обеспечить единый конвейерный вход для grep с помощью 2>&1.
Резюме
Docker — это универсальная платформа, которая предлагает множество функций для администрирования среды. Управление логами системы - один из важнейших навыков, который должен знать каждый системный администратор. Управлять журналами в Docker очень просто, если знать доступные команды и возможные флаги в соответствии с вашими требованиями.
Для получения дополнительной информации о Docker и его функциональных возможностях обратитесь к документации Docker.
В этой статье поговорим о локализации проблем функционирования ESXi/ESX.
Неисправности. Что может быть не так?
ПО, работающее в гостевой виртуальной машине - медленно реагирует на команды управления;
ПО, работающее в гостевой виртуальной машине, периодически прерывают работу;
Гостевая виртуальная машина работает медленно или не отвечает на запросы.
Проблемы с производительностью могут случаться из-за ограничений центрального процессора (CPU), переполнения памяти или, например, задержкой сети. Если виртуалки работают плохо, скорее всего имеют место траблы с памятью. Устраним?
Решение (воркэраунд)
Ограничения центрального процессора (проблемы CPU)
Чтобы определить, связана ли низкая производительность виртуалки с ограничением центрального процессора, надо:
Используйте команду esxtop для того, чтобы определить основные параметры производительности аппаратного сервера виртуалки
Проверьте командой load average загрузку. Если среднее значение нагрузки равно 1.00 , то физические ЦП (центральные процессоры) гипервизора ESXi/ESX полностью используются, а среднее значение нагрузки, равное 0.5, значит, что используются наполовину. Логика, думаю, вам понятна. Значение нагрузки, равное 2.00, означает, что система в целом переполнена (бегите в серверную с огнетушителем 👀)
Проверьте поле %READY на процент времени на момент, когда виртуальная машина была готова, но не смогла запуститься на физическом ЦП. При нормальных условиях эксплуатации это значение должно находиться в пределах 5%. Если это значение высокое, и виртуальная машина имеет плохую производительность, тогда проверьте ограничение центрального процессора:
Убедитесь, что на виртуальной машине не установлен предел ЦП.
Убедитесь, что на виртуальной машине не установлен пул ресурсов (Resource Pool).
Если среднее значение нагрузки слишком высокое и время ожидания не вызвано ограничением центрального процессора, тогда отрегулируйте нагрузку ЦП на хост. Чтобы настроить нагрузку на хост, выполните следующие шаги:
Увеличьте значение физического ограничения ЦП на хост
Или уменьшите виртуальное ограничение ЦП, выделенное хосту. Чтобы уменьшить это ограничение, сделайте:
Уменьшите общее количество ЦП, выделенных всем виртуальным машинам, работающих на узле ESX
Или уменьшите количество виртуальных машин, работающих на хосте (но это весьма грубый способ, как мы считаем)
Если Вы используете ESX 3.5, проверьте доступ к IRQ.
Переполнение памяти
Чтобы определить, связана ли низкая производительность с избыточностью памяти:
Используйте команду esxtop для того, чтобы определить основные параметры производительности аппаратного сервера виртуалки.
Проверьте параметр MEM в первой строке вывода. Это значение отражает отношение запрошенной памяти к доступной, минус 1. Например:
Если виртуальным машинам требуется 4 ГБ ОЗУ, а хост имеет 4 ГБ ОЗУ, то справедливо соотношение 1:1. После вычитания 1 (из 1/1) поле MEM overcommit avg считывает 0. Вывод - избытка нет и не требуется дополнительной оперативной памяти.
Если виртуальным машинам требуется 6 ГБ ОЗУ, а хост имеет 4 ГБ ОЗУ, то есть соотношение 1,5:1. После вычитания 1 (из 1,5/1), поле overcommit avg МЭМ считывает 0,5. Объем оперативной памяти превышен на 50%, что означает, что требуется на 50% больше доступной оперативной памяти.
Если память перегружается, отрегулируйте нагрузку на хост. Чтобы настроить нагрузку на память, выполните следующие действия:
Увеличьте количество физической оперативной памяти на хосте
Или уменьшите объем оперативной памяти, выделенной виртуальным машинам. Для уменьшения объема выделенной оперативной памяти:
Уменьшите общий объем оперативной памяти, выделяемой всем виртуальным машинам на узле
Или уменьшите общее число виртуальных машин на узле.
Определите, являются ли виртуальные машины "раздувающимися" или/и заменяемыми. Для обнаружения раздувания или замены:
Запустите esxtop
Введите m для просмотра памяти
Введите f для управления колонками вывода (полями)
Выберите букву J в поле Memory Swap Statistics "Статистика раздувания памяти" (MCTL)
Посмотрите на значение MCTLSZ. MCTLSZ (MB)отображает объем физической памяти гостя, возвращаемой драйвером баллона (Memory Ballooning).
Введите f для управления колонками вывода (полями)
Выберите букву для статистики свопов памяти (SWAP STATS)
Посмотрите на значение SWCUR. SWCUR (MB) отображает текущее использование обмена.
Чтобы устранить эту проблему, убедитесь, что раздувание и/или замена не вызваны неправильно установленным пределом памяти
Период ожидания запоминающего устройства
Чтобы определить, связана ли низкая производительность с задержкой хранения данных:
Определите, связана ли проблема с локальным хранилищем. Если связана, то перенесите виртуальные машины в другое место хранения.
Уменьшите количество виртуальных машин на одно логическое устройство.
Найдите записи журнала в Windows guests, которые выглядят следующим образом: The device, DeviceScsiPort0, did not respond within the timeout period.
Используя esxtop, найдите высокое время задержки DAVG.
Определите максимальную пропускную способность ввода-вывода, которую можно получить с помощью команды iometer.
Сравните результаты iometer для виртуальной машины с результатами для физической машины, подключенной к тому же хранилищу.
Проверьте наличие конфликтного обращения к ресурсу SCSI.
Если вы используете ресурсы хранения iSCSI и группу данных jumbo, убедитесь, что все настроено правильно.
Если вы используете ресурсы хранения iSCSI и передачу по нескольким трактам с использованием программного инициатора iSCSI, убедитесь, что все настроено правильно.
При выявлении проблемы, связанной с хранением:
Убедитесь, что аппаратный массив устройства и платы HBA сертифицированы для ESX/ESXi.
Убедитесь, что BIOS физического сервера обновлена.
Убедитесь, что встроенное ПО вашего HBA-адаптера обновлено.
Убедитесь, что ESX может распознать правильный режим и политику пути для типа массива хранения SATP и выбора пути PSP.
Задержка сети
На производительность сети может сильно влиять производительность ЦП. Исключите проблему производительности ЦП перед исследованием сетевой задержки.
Чтобы определить, вызвана ли низкая производительность задержкой сети, выполните следующие действия:
Проверьте максимальную пропускную способность виртуальной машины с помощью инструмента Iperf.
При использовании Iperf измените размер окон TCP на 64 K. Производительность также зависит от этого значения. Чтобы изменить размер окон TCP:
На стороне сервера введите следующую команду: iperf –s
На стороне клиента введите следующую команду: iperf.exe -c sqlsed -P 1 -i 1 -p 5001 -w 64K -f m -t 10 900M
Запустите Iperf с компьютера вне хоста ESXi/ESX. Сравните результаты с ожидаемыми, в зависимости от физической среды.
Выполните команду Iperf с другого компьютера вне хоста ESXi/ESX в той же VLAN на том же физическом коммутаторе. Если производительность хорошая, и проблему можно воспроизвести только на машине в другом географическом месте, то проблема связана с вашей сетевой средой.
Выполните команду Iperf между двумя виртуальными машинами на одном сервере ESX/portgroup/vswitch. Если результат хороший, можно исключить проблему с ЦП, памятью или хранилищем.
Если вы определяете параметры, которые ограничивают производительность системы в сети:
Если вы используете ресурсы хранения iSCSI и кадры jumbo, убедитесь, что все настроено правильно.
Если вы используете Network I/O Control,то убедитесь, что общие ресурсы и ограничения правильно настроены для вашего трафика.
Проверьте правильность настройки формирования траффика.
Со всеми может произойти ситуация, когда забытый или потерянный пароль не позволяет получить доступ к оборудованию. Сегодня в статье мы расскажем про то, как сбросить пароль на маршрутизаторах и коммутаторах Cisco.
Стоит уточнить, что описанные способы подразумевают подключение к оборудованию только напрямую через консольный кабель. Поэтому стоит уделить внимание безопасности и сделать так, чтобы в серверную или помещение, где находится оборудование доступ имел только авторизованный персонал.
Суть этих методов заключается в том, чтобы загрузиться без конфигурационного файла с забытым паролем, войти в привилегированный режим (Privileged EXEC), заменить новый конфигурационный файл на старый и поменять на нем все пароли.
Если вам нужно создать криптостойкий пароль, то можно воспользоваться нашим онлайн генератором устойчивых паролей
Сброс пароля на маршрутизаторах Cisco
Прежде всего, нам нужно подключиться к маршрутизатору при помощи консольного кабеля (он еще называется Rollover):
Подключившись к нему, отправляем его в перезагрузку. Во время загрузки IOS нам нужно отправить сигнал прерывания, нажав клавиши [Ctrl]+[Break]:
System Bootstrap, Version 12.1(3r)T2, RELEASE SOFTWARE (fc1)
Copyright (c) 2000 by cisco Systems, Inc.
Initializing memory for ECC
..
c2811 processor with 524288 Kbytes of main memory
Main memory is configured to 64 bit mode with ECC enabled
Readonly ROMMON initialized
Self decompressing the image :
##############
monitor: command "boot" aborted due to user interrupt
rommon 1 >
Таким образом, мы окажемся в режиме rommon (ROM monitor). Тут изменим конфигурацию регистра командной confreg 0x2142, в результате которой маршрутизатор при запуске не будет использовать конфигурационный файл, записанный во flash памяти. После этого перезапускаем маршрутизатор, введя команду reset.
rommon 1 > confreg 0x2142
rommon 2 > reset
Теперь мы загрузимся без конфига, и нам нужно загрузить старый конфигурационный файл. Делаем это командной copy startup-config running-config в привилегированном режиме.
Router>en
Router#copy startup-config running-config
Destination filename [running-config]?
700 bytes copied in 0.416 secs (1682 bytes/sec)
Router1#
%SYS-5-CONFIG_I: Configured from console by console
После этого применится старый конфиг, который был запаролен, но при этом мы уже находимся в привилегированном режиме, откуда можем выставить новые пароли для привилегированного режима, telnet и консоли.
Router1#conf t
Router1(config)#enable password NewPassword
Router1(config)#enable secret NewPassword
Router1(config)#line vty 0 4
Router1(config-line)#password NewPassword
Router1(config-line)#login
Router1(config-line)#exit
Router1(config)#line console 0
Router1(config-line)#password NewPassword
Router1(config-line)#login
Теперь, когда мы сменили все пароли нам нужно вернуть старое значение конфигурационного регистра, введя из режима конфигурации команду config-register 0x2102
Router1(config)# config-register 0x2102
После этого сохраняем наш новый конфиг и перезагружаемся
Router1#copy running-config startup-config
Router1#reload
Когда роутер загрузится, то он возьмет сохраненный конфигурационный файл, с новыми паролями.
Также, можно отключить возможность сброса пароля, используя команду no service password-recovery. Но как мы упомянули ранее, для этого метода восстановления требуется физический доступ к оборудованию.
Сброс пароля на коммутаторах Cisco Catalyst
Для того чтобы сбросить пароль на коммутаторе Cisco Catalyst нам также нужен физический доступ к оборудованию.
Подключаемся к свитчу консольным кабелем, выключаем его по питанию, а затем включаем, удерживая нажатой кнопку Mode на лицевой панели.
Таким образом мы прервем обычный процесс загрузки.
Loading "flash:/c2960-lanbase-mz.122-25.FX.bin"...
#############################
Boot process terminated.
switch:
После этого мы вводим команды flash_init и load_helper. И теперь мы можем посмотреть содержимое нашей flash памяти, используя команду dir flash: (внимание – в конце команды должно стоять двоеточие)
switch: flash_init
Initializing Flash...
flashfs[0]: 3 files, 0 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 64016384
flashfs[0]: Bytes used: 3059643
flashfs[0]: Bytes available: 60956741
flashfs[0]: flashfs fsck took 1 seconds.
...done Initializing Flash.
switch: load_helper
switch: dir flash:
Directory of flash:/
1 -rw- 3058048 c2950-i6q4l2-mz.121-22.EA4.bin
3 -rw- 979 config.text
2 -rw- 616 vlan.dat
60956741 bytes available (3059643 bytes used)
Мы видим содержимое нашей flash памяти и нам интересен файл config.text – файл конфигурации коммутатора. Сейчас нам нужно его переименовать, чтобы коммутатор загрузился без него. Делаем это командой rename flash:config.text flash:config.old и затем можно сделать проверку.
switch: rename flash:config.text flash:config.old
switch: dir.flash
Directory of flash:/
1 -rw- 3058048 c2950-i6q4l2-mz.121-22.EA4.bin
3 -rw- 979 config.old
2 -rw- 616 vlan.dat
60956741 bytes available (3059643 bytes used)
После этого возобновляем загрузку командой boot.
switch: boot
Коммутатор не найдет файл конфигурации и загрузится без него. Теперь входим в привилегированный режим, и переименовываем обратно наш конфиг, выполнив команду rename flash:config.old flash:config.text, а затем загружаем его командой copy flash:config.text system:running-config
Switch>en
Switch#rename flash:config.old flash:config.text
Switch#copy flash:config.text system:running-config
Теперь после того как конфиг загружен мы можем задать новый пароль
Switch1#conf t
Switch1(config)#enable secret NewPassword
Switch1(config)#enable password NewPassword
Switch1 (config)#line vty 0 4
Switch1 (config-line)#password NewPassword
Switch1 (config-line)#login
Switch1 (config-line)#exit
Switch1 (config)#line console 0
Switch1 (config-line)#password NewPassword
Switch1 (config-line)#login
И сохраняем новую конфигурацию.
Switch1#copy running-config startup-config
Готово! Теперь после перезагрузки роутер будет загружать конфигурационный файл с измененными паролями.
