Глава 13. Ведение журналов и мониторинг

Поскольку OpenStack состоит из очень большого количества служб, существует много файлов журналов. Цель данного раздела заключается в том, чтобы помочь вам в поиске журналов и работе с ними, а также описывает другие способы отслеживания состояния вашего проекта.

 Чтение журналов

Службы OpenStack используют стандартные уровни ведения журналов по мере повышения степени важности: DEBUG, INFO, AUDIT, WARNING, ERROR, CRITICAL и TRACE. Таким образом, сообщения появляются в журналах только если они более "серьезные", чем определенный уровень журнала, причем DEBUG позволяет протоколировать все возникающие сообщения. Например, TRACE регистрируется только если программное обеспечение имеет стек трассировки, в то время как INFO регистрируется для каждого сообщения, включая те, которые предназначены только для информирования.

Чтобы запретить DEBUG-level ведения журналов, отредактируйте /etc/nova/nova.conf следующим образом:

debug=false

Keystone обрабатывается немного по-другому. Чтобы изменить уровень ведения журнала, отредактируйте файл /etc/keystone/logging.conf и найдите разделы logger_root и handler_file.

Регистрация для horizon настроена в /etc/openstack_dashboard/local_settings.py. Поскольку horizon является веб-приложением Django, он следует рамочным соглашениям Django Logging.

Первый шаг при поиске источника ошибки обычно начинается с просмотра сообщений в журналах CRITICAL, TRACE или ERROR в конце файла журнала.

Пример сообщения журнала CRITICAL с непосредственно за ним следующими соответствующими TRACE (отслеживание Phyton):

2013-02-25 21:05:51 17409 CRITICAL cinder [-] Bad or unexpected response from the storage volume backend API: volume group
 cinder-volumes doesn't exist
2013-02-25 21:05:51 17409 TRACE cinder Traceback (most recent call last):
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/bin/cinder-volume", line 48, in <module>
2013-02-25 21:05:51 17409 TRACE cinder service.wait()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/cinder/service.py", line 422, in wait
2013-02-25 21:05:51 17409 TRACE cinder _launcher.wait()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/cinder/service.py", line 127, in wait
2013-02-25 21:05:51 17409 TRACE cinder service.wait()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/eventlet/greenthread.py", line 166, in wait
2013-02-25 21:05:51 17409 TRACE cinder return self._exit_event.wait()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/eventlet/event.py", line 116, in wait
2013-02-25 21:05:51 17409 TRACE cinder return hubs.get_hub().switch()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/eventlet/hubs/hub.py", line 177, in switch
2013-02-25 21:05:51 17409 TRACE cinder return self.greenlet.switch()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/eventlet/greenthread.py", line 192, in main
2013-02-25 21:05:51 17409 TRACE cinder result = function(*args, **kwargs)
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/cinder/service.py", line 88, in run_server
2013-02-25 21:05:51 17409 TRACE cinder server.start()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/cinder/service.py", line 159, in start
2013-02-25 21:05:51 17409 TRACE cinder self.manager.init_host()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/cinder/volume/manager.py", line 95,
 in init_host
2013-02-25 21:05:51 17409 TRACE cinder self.driver.check_for_setup_error()
2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/dist-packages/cinder/volume/driver.py", line 116,
 in check_for_setup_error
2013-02-25 21:05:51 17409 TRACE cinder raise exception.VolumeBackendAPIException(data=exception_message)
2013-02-25 21:05:51 17409 TRACE cinder VolumeBackendAPIException: Bad or unexpected response from the storage volume
 backend API: volume group cinder-volumes doesn't exist
2013-02-25 21:05:51 17409 TRACE cinder

В данном примере cinder-volumes не смогли стартовать и была проведена трассировка стека, так как их сервер томов не смог установить том системы хранения - вероятно потому, что том LVM, который предполагается в конфигурации не существует.

Вот пример журнала ошибок:

2013-02-25 20:26:33 6619 ERROR nova.openstack.common.rpc.common [-] AMQP server on localhost:5672 is unreachable:
 [Errno 111] ECONNREFUSED. Trying again in 23 seconds.

В данной ошибке служба nova не смогла подключиться к серверу RabbitMQ, поскольку получила сообщение об ошибке отказа в соединении.

 Трассировка запросов экземпляра

Когда экземпляр отказывает работать должным образом, вам обычно приходится отслеживать активность, связанную с этим экземпляром в лог-файлах различных служб nova-*, причем и в контроллере облака, и в вычислительных узлах.

Обычный способ заключается в отслеживании UUID, связанного с экземпляром в журналах служб.

Рассмотрим следующий пример:

$ nova list
+--------------------------------+--------+--------+--------------------------+
| ID                             | Name   | Status | Networks                 |
+--------------------------------+--------+--------+--------------------------+
| fafed8-4a46-413b-b113-f1959ffe | cirros | ACTIVE | novanetwork=192.168.100.3|
+--------------------------------+--------+--------+--------------------------+

Здесь faf7ded8-4a46-413b-b113-f19590746ffe - ID, связанный с экземпляром. Если вы выполните поиск этой строки в контроллере облака в файлах /var/log/nova-*.log, она обнаружится в nova-api.log и в nova-scheduler.log. Если вы выполните поиск этой строки в вычислительных узлах в /var/log/nova-*.log, она обнаружится в nova-network.log и в nova-compute.log. Если не возникло сообщений об ошибках ERROR или CRITICAL, самая последняя выведенная запись журнала может обеспечит подсказку о том, что пошло не так.

 Добавление настраиваемых пользователем операторов ведения журналов

Если в существующих журналах не достаточно информации, возможно вам потребуется добавить свои собственные операторы для служб nova-*.

Исходные файлы расположены в /usr/lib/python2.7/dist-packages/nova.

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

from nova.openstack.common import log as logging
LOG = logging.getLogger(__name__)

Чтобы добавить оператор ведения журналов DEBUG, вы должны выполнить:

LOG.debug("This is a custom debugging statement")

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

LOG.debug(_("Logging statement appears here"))

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

 Интерфейс веб- управления RabbitMQ или rabbitmqctl

За исключением отказов в соединениях, файлы журналов RabbitMQ, как правило, бесполезны для отладки проблем, связанных с OpenStack. Вместо этого, мы рекомендуем вам использовать интерфейс веб управления RabbitMQ. Aside from connection failures, RabbitMQ log files are generally not useful for debugging OpenStack related issues. Instead, we recommend you use the RabbitMQ web management interface. Включите его в контроллере облака:

# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
# service rabbitmq-server restart

Веб- управляемый интерфейс RabbitMQ доступен в вашем контроллере облака по ссылке http://localhost:55672.

[Замечание]Замечание

Ubuntu 12.04 устанавливает версию RabbitMQ 2.7.1, которая использует порт 55672. RabbitMQ версии 3.0 и выше использует порт 15672. Вы можете проверить, с какой версия RabbitMQ вы работаете на локальном компьютере Ubuntu, выполнив:

$ dpkg -s rabbitmq-server | grep "Version:"
Version: 2.7.1-0ubuntu4

Альтернативой разрешению интерфейса веб- управления RabbitMQ является использование команд rabbitmqctl. Например, rabbitmqctl list_queues| grep cinder отобразит все оставшиеся в очереди сообщения. Если они существуют, то это возможный признак того, что службы cinder не соединились должным образом с rabbitmq и, возможно, должны быть запущены повторно.

Элементы для наблюдения за RabbitMQ включают ряд элементов в каждой из очередей и статистики времени обработки для сервера.

 Централизованно управляемые журналы

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

Ubuntu использует в качестве службы ведения журналов по умолчанию rsyslog. Поскольку она сама по себе в состоянии отправлять записи на удаленно расположенные журналы, у вас не будет необходимости устанавливать никакие дополнительные службы для поддержки этой функции, просто измените файл конфигурации. При этом, рассмотрите возможность работы вашей системы ведения журналов в сети управления или с помощью защищенного VPN во избежание их перехвата.

 Настройка клиента rsyslog

Для начала настройте все компоненты OpenStack на ведение системных журналов дополнительно к их стандартному месторасположению файлов журналов. Также настройте каждый компонент для регистрации в различных системных журналах. Это сделает более простым разделение журналов по индивидуальным компонентам на центральном сервере:

nova.conf:

use_syslog=True
syslog_log_facility=LOG_LOCAL0

glance-api.conf и glance-registry.conf:

use_syslog=True
syslog_log_facility=LOG_LOCAL1

cinder.conf:

use_syslog=True
syslog_log_facility=LOG_LOCAL2

keystone.conf:

use_syslog=True
syslog_log_facility=LOG_LOCAL3

По умолчанию Swift делает записи в syslog.

Затем создайте /etc/rsyslog.d/client.conf с помощью следующей строки:

*.* @192.168.1.10

Это дает указание отсылать все записи в журналы на перечисленные IP. В данном примере IP указывает на контроллер облака.

 Настройка сервера rsyslog

Назначьте сервер для централизованного ведения журналов. Лучше всего выбрать сервер, который будет посвящен исключительно этой задаче. Создайте файл /etc/rsyslog.d/server.conf со следующим содержимым:

# Enable UDP
$ModLoad imudp
# Listen on 192.168.1.10 only
$UDPServerAddress 192.168.1.10
# Port 514
$UDPServerRun 514

# Create logging templates for nova
$template NovaFile,"/var/log/rsyslog/%HOSTNAME%/nova.log"
$template NovaAll,"/var/log/rsyslog/nova.log"

# Log everything else to syslog.log
$template DynFile,"/var/log/rsyslog/%HOSTNAME%/syslog.log"
*.* ?DynFile

# Log various openstack components to their own individual file
local0.* ?NovaFile
local0.* ?NovaAll
& ~

Приведенный выше пример конфигурации обрабатывает только службу nova. Первоначально он настраивает rsyslog на работу в качестве сервера, который обслуживает порт 514. Далее, он создает ряд шаблонов для записи в журнал. Шаблоны записей в журнал управляют местоположением, в котором хранятся получаемые журналы. При использовании приведенного выше примера, журнал nova из c01.example.com размещается в следующих местах:

  • /var/log/rsyslog/c01.example.com/nova.log

  • /var/log/rsyslog/nova.log

Также полезно журналы из c02.example.com разместить по адресам:

  • /var/log/rsyslog/c02.example.com/nova.log

  • /var/log/rsyslog/nova.log

Таким образом вы имеете индивидуальный файл журнала для каждого вычислительного узла и агрегированный журнал, который содержит записи журналов для всех узлов.

 StackTach

StackTach является инструментом, созданным Rackspace для сбора и представления уведомлений, отправляемых nova. Уведомления, по существу, те же записи в журнал, однако могут быть гораздо более детальными. Хороший обзор уведомлений можно найти в System Usage Data.

Чтобы разрешить nova отправлять уведомления, добавьте следующие строки в nova.conf:

notification_topics=monitor
notification_driver=nova.openstack.common.notifier.rpc_notifier

Раз уж nova отправляет уведомления, установите и настройте StackTach. Поскольку StackTach является относительно новым продуктом и постоянно меняется, инструкции по установке будут быстро устаревать. Пожалуйста, обращайтесь к ресурсу StackTach GitHub repo для получения инструкций и демонстрационных видео.

 Мониторинг

Существует два типа мониторинга: наблюдение за проблемами и отслеживание тенденций использования. Первый гарантирует, что все службы запущены и работают, создавая функциональное облако. Последний содержит мониторинг использования ресурсов в течение продолжительного времени для того, чтобы принимать обоснованные решения о потенциально узких местах и обновлениях.

 Мониторинг процессов

Основной вид оповещающего мониторинга является простой проверкой и удостоверения в том, что требуемый процесс запущен. A basic type of alert monitoring is to simply check and see whether a required process is running. Например, убедитесь, что в контроллере облака запущена служба nova-api:

# ps aux | grep nova-api
nova 12786 0.0 0.0 37952 1312 ? Ss Feb11 0:00 su -s /bin/sh -c exec nova-api
--config-file=/etc/nova/nova.conf nova
nova 12787 0.0 0.1 135764 57400 ? S Feb11 0:01 /usr/bin/python
 /usr/bin/nova-api --config-file=/etc/nova/nova.conf
nova 12792 0.0 0.0 96052 22856 ? S Feb11 0:01 /usr/bin/python
/usr/bin/nova-api --config-file=/etc/nova/nova.conf
nova 12793 0.0 0.3 290688 115516 ? S Feb11 1:23 /usr/bin/python
/usr/bin/nova-api --config-file=/etc/nova/nova.conf
nova 12794 0.0 0.2 248636 77068 ? S Feb11 0:04 /usr/bin/python
/usr/bin/nova-api --config-file=/etc/nova/nova.conf
root 24121 0.0 0.0 11688 912 pts/5 S+ 13:07 0:00 grep nova-api

Вы можете создавать автоматизированные предупреждения о критических процессах с помощью Nagios и NRPE. Например, для того, чтобы убедиться, что процесс nova-compute запущен на вычислительных узлах, создайте на вашем сервере Nagios оповещение, которое выглядит примерно таким образом:

define service {
    host_name c01.example.com
    check_command check_nrpe_1arg!check_nova-compute
    use generic-service
    notification_period 24x7
    contact_groups sysadmins
    service_description nova-compute
}

Затем на фактическом вычислительном узле создайте следующую конфигурацию NRPE:

\command[check_nova-compute]=/usr/lib/nagios/plugins/check_procs -c 1: \
-a nova-compute

Nagios проверяет, что по крайней мере одна служба nova-compute работает в настоящее время.

 Оповещение о ресурсах

Оповещения о ресурсах предоставляют уведомления когда один или несколько ресурсов достигают критически низкого уровня. Хотя пороги мониторинга должны быть настроены для вашей конкретной среды OpenStack, мониторинг использования ресурсов вообще не является особенным для OpenStack - любой обобщенный тип оповещения будет прекрасно работать.

Некоторые из ресурсов, которые вы захотите контролировать:

  • Использование дисков

  • Загруженность серверов

  • Использование памяти

  • Сетевой ввод/ вывод

  • Доступные виртуальные ЦПУ (vCPU)

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

define service {
    host_name c01.example.com
    check_command check_nrpe!check_all_disks!20% 10%
    use generic-service
    contact_groups sysadmins
    service_description Disk
}

На вычислительноНа вычислительном узле добавьте следующие строки в вашу конфигурацию NRPE:

command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c \
$ARG2$ -e

Nagios выдает уведомление предостережения (WARNING) когда любой диск в вычислительном узле заполняется на 80 процентов и критично (CRITICAL) при заполнении на 90 процентов.

 Измерения и телеметрия с применением Ceilometer

Встроенный в OpenStack проект (с кодовым названием ceilometer) собирает данные измерений и выдает предупреждения для Compute, Storage и Networking. Данные, собираемые при измерении системы могут использоваться для тарификации. В зависимости от развертываемой настройки, данные измерений могут быть доступны пользователям на основе реализуемых настроек. Служба Telemetry предоставляет REST API, описанный в http://developer.openstack.org/api-ref-telemetry-v2.html. Вы можете узнать больше о проекте на странице http://docs.openstack.org/developer/ceilometer.

 Особенные для OpenStack ресурсы

Такие ресурсы как память, диск и процессор являются общими для всех серверов (даже для не OpenStack серверов) и имеют важное значение для общего состояния работоспособности сервера. Когда имеешь дело конкретно с OpenStack, эти ресурсы важны по другой причине: уверенности, что доступно достаточно для запуска экземпляров. Существует несколько способов, которыми вы можете увидеть использование ресурсов OpenStack. Первый обеспечивается командой nova:

# nova usage-list

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

Далее, база данных nova содержит три таблицы, которые хранят информацию об использовании.

Таблицы nova.quotas и nova.quota_usages хранят информацию о квотах. Если квоты владельца (tenant) отличаются от значений, установленных для квот по умолчанию, тогда их квоты сохраняются в таблице nova.quotas. Например:

mysql> select project_id, resource, hard_limit from quotas;
+----------------------------------+-----------------------------+------------+
| project_id                       | resource                    | hard_limit |
+----------------------------------+-----------------------------+------------+
| 628df59f091142399e0689a2696f5baa | metadata_items              | 128        |
| 628df59f091142399e0689a2696f5baa | injected_file_content_bytes | 10240      |
| 628df59f091142399e0689a2696f5baa | injected_files              | 5          |
| 628df59f091142399e0689a2696f5baa | gigabytes                   | 1000       |
| 628df59f091142399e0689a2696f5baa | ram                         | 51200      |
| 628df59f091142399e0689a2696f5baa | floating_ips                | 10         |
| 628df59f091142399e0689a2696f5baa | instances                   | 10         |
| 628df59f091142399e0689a2696f5baa | volumes                     | 10         |
| 628df59f091142399e0689a2696f5baa | cores                       | 20         |
+----------------------------------+-----------------------------+------------+

Таблица nova.quota_usages хранит данные отслеживания того, как много ресурсов использует владелец в настоящее время:

mysql> select project_id, resource, in_use from quota_usages where project_id like '628%';
+----------------------------------+--------------+--------+
| project_id                       | resource     | in_use |
+----------------------------------+--------------+--------+
| 628df59f091142399e0689a2696f5baa | instances    | 1      |
| 628df59f091142399e0689a2696f5baa | ram          | 512    |
| 628df59f091142399e0689a2696f5baa | cores        | 1      |
| 628df59f091142399e0689a2696f5baa | floating_ips | 1      |
| 628df59f091142399e0689a2696f5baa | volumes      | 2      |
| 628df59f091142399e0689a2696f5baa | gigabytes    | 12     |
| 628df59f091142399e0689a2696f5baa | images       | 1      |
+----------------------------------+--------------+--------+

Сравнив жесткие пределы владельца с его текущим использованием ресурсов, вы можете выяснить процент использования. Например, если этот владелец использует 1 плавающий IP из 10, то он использует 10% от своих квот плавающих IP. Вмето выполнения расчетов вручную вы можете воспользоваться SQL или языком сценариев по своему выбору и создать форматированный отчет:

+----------------------------------+------------+-------------+---------------+
| some_tenant                                                                 |
+-----------------------------------+------------+------------+---------------+
| Resource                          | Used       | Limit      |               |
+-----------------------------------+------------+------------+---------------+
| cores                             | 1          | 20         |           5 % |
| floating_ips                      | 1          | 10         |          10 % |
| gigabytes                         | 12         | 1000       |           1 % |
| images                            | 1          | 4          |          25 % |
| injected_file_content_bytes       | 0          | 10240      |           0 % |
| injected_file_path_bytes          | 0          | 255        |           0 % |
| injected_files                    | 0          | 5          |           0 % |
| instances                         | 1          | 10         |          10 % |
| key_pairs                         | 0          | 100        |           0 % |
| metadata_items                    | 0          | 128        |           0 % |
| ram                               | 512        | 51200      |           1 % |
| reservation_expire                | 0          | 86400      |           0 % |
| security_group_rules              | 0          | 20         |           0 % |
| security_groups                   | 0          | 10         |           0 % |
| volumes                           | 2          | 10         |          20 % |
+-----------------------------------+------------+------------+---------------+

Приведенный выше отчет был сформирован с использованием пользовательского сценария, который может быть найден на странице GitHub.

[Замечание]Замечание

Этот сценарий является специфичным для конкретной установки OpenStack и должен быть изменен, чтобы соответствовать вашей среде. Тем не менее, логика должна быть легко понятна.

 Интеллектуальное оповещение

Интеллектуальные оповещения можно рассматривать как одну из форм непрерывной интеграции для эксплуатации. Например, вы можете легко проверить что служба образов запущена и работает, удостоверившись, что процессы glance-api и glance-registry запущены, или убедившись, что glace-api отвечает по порту 9292.

Но как вы можете определить, что образы были успешно загружены службой образов? Может оказаться, что диск, на который служба образов сохраняет образы заполнен или сервер S3 выключен. Естественно, вы можете проверить это, выполнив быструю загрузку образа: But how can you tell whether images are being successfully uploaded to the Image Service? Maybe the disk that Image Service is storing the images on is full or the S3 backend is down. You could naturally check this by doing a quick image upload:

#!/bin/bash
#
# assumes that reasonable credentials have been stored at
# /root/auth


. /root/openrc
wget https://launchpad.net/cirros/trunk/0.3.0/+download/ \
     cirros-0.3.0-x86_64-disk.img
glance image-create --name='cirros image' --is-public=true
--container-format=bare --disk-format=qcow2 < cirros-0.3.0-x8
6_64-disk.img

Выполняя этот сценарий и прокручивая его в оповещениях для вашей системы мониторинга (например, в Nagios), вы теперь получаете автоматизированный способ проверки работоспособности загрузки образов в каталог образов. By taking this script and rolling it into an alert for your monitoring system (such as Nagios), you now have an automated way of ensuring that image uploads to the Image Catalog are working.

[Замечание]Замечание

Вы должны удалять образ после каждой проверки. Еще лучше, проверять: можно ли успешно удалить изображение из службы образов.

Интеллектуальные оповещения отнимают значительно больше времени для планирования и реализации по сравнению с другими описанными в этой главе предупреждениями. Хорошей структурой реализации интеллектуального оповещения является:

  • Анализ общих действий в вашем облаке.

  • Создание способов автоматической проверки этих действий.

  • Свертывание этих тестов в систему предупреждений.

Некоторые другие примеры интеллектуального оповещения включают в себя:

  • Могут ли экземпляры быть запущены и уничтожены?

  • Можно ли создавать пользователей?

  • Могут ли сохраняться и удаляться объекты?

  • Можно ли создавать и уничтожать тома?

 Анализ тенденций

Анализ тенденций может вам дать большее представление о том, как ваш облако работает каждый день. Например того, что напряженный день был просто редким явлением, или того, что вы должны начать добавление новых вычислительных узлов.

Анализ тенденций имеет несколько иной подход, чем оповещения. В то время, как оповещения интересуются двузначным результатом (удастся ли проверка или нет), анализ тенденций записывает текущее состояние в определенный момент времени. Как только необходимое количество временных отметок было записано, вы можете увидеть, как значение изменяется с течением времени.

Все упоминавшиеся ранее типы оповещения также могут быть использованы для представления анализа тенденций. Некоторые другие примеры анализа тенденций включают:

  • Число экземпляров в каждом вычислительном узле

  • Типы используемых предпочтений (шаблонов виртуальных ресурсов)

  • Количество используемых томов

  • Почасовое количество запросов к хранилищам объектов

  • Почасовое количество запросов nova-api

  • Статистика ввода/ вывода из ваших служб хранения

В качестве примера: запись использования nova-api может позволить вам отслеживать необходимость расширения контроллера облака. Оставляя под наблюдением запросы nova-api, вы можете определить, требуется ли вам порождать больше процессов nova-api или же зайти дальше и запустить совершенно новый сервер nova-api. Чтобы получить приблизительное число запросов, просмотрите стандартные сообщения INFO в /var/log/nova/nova-api.log:

# grep INFO /var/log/nova/nova-api.log | wc

Вы можете получить дополнительную статистику, просмотрев количество успешных запросов:

# grep " 200 " /var/log/nova/nova-api.log | wc

Периодически выполняя эту команду и регистрируя результат, вы можете создать отчет анализа тенденции во времени, который показывает: растет ли, уменьшатся ли или поддерживается в устойчивом состоянии использование вашего nova-api.

Такой инструмент, как collectd, может быть использован для хранения подобной информации. Поскольку collectd выходит за рамки данной книги, хорошей отправной точкой будет использование collectd для хранения результатов в виде типа данных счетчика (COUNTER). Более подробную информацию можно найти в документации collectd.

 Резюме

Для стабильной эксплуатации вы хотите быстро замечать отказы и эффективно определять причины. Для распределенной системы еще более важно отслеживать правильные элементы чтобы отвечать целям уровня сервиса. Знание того, где находятся эти журналы в файловой системе или API предоставляет вам преимущество. Данная глава также показала как читать, интерпретировать и обрабатывать информацию от служб OpenStack таким образом, чтобы вы могли осуществлять наблюдение эффективно.