[ English | English (United Kingdom) | Deutsch | русский ]

Пример Telemetry с Gnocchi, Ceph и Redis

Установка OpenStack-Ansible по умолчанию настраивает gnocchi на использование файла в качестве бекэнда хранилища. Если у вас уже есть предустановленный ceph, вы можете использовать его в качестве бекэнда для gnocchi. Эта документация поможет вам настроить gnocchi для использования ceph в качестве бекэнда хранилища.

Ceph, как хранилище метрик

gnocchi_storage_driver: ceph

Вам необходимо добавить несколько pip пакетов к вашей установке gnocchi:

gnocchi_pip_packages:
- cryptography
- gnocchiclient
# this is what we want:
#  - "gnocchi[mysql,ceph,ceph_alternative_lib,redis,keystone]"
# but as there is no librados >=12.2 pip package we have to first install ceph without alternative support
# after adding the ceph repo to gnocchi container, python-rados>=12.2.0 is installed and linked automatically
# and gnocchi will automatically take up the features present in the used rados lib.
- "gnocchi[mysql,ceph,redis,keystone]"
- keystonemiddleware
- python-memcached

Но когда ваша установка вырастет, gnocchi может замедлять или блокировать ваш ceph. Вы можете столкнуться с медленными запросами или заблокированными PG в ceph. Так как это может иметь несколько причин, взгляните на прикрепленные презентации в секции Тесты производительности для Gnocchi . Они также содержат различные параметры, которые вы можете захотеть оптимизировать.

Redis как хранилище метрик

Одно из решений возможных проблем с производительностью это использовать хранилище для входящих метрик для gnocchi. Поддерживаемые системы хранилищ :

  • Файл (по умолчанию)

  • Ceph (рекомендован)

  • OpenStack Swift

  • Amazon S3

  • Redis

Если эндпойнт Swift API использует Ceph в качестве бекэнда, для этой настройки остается только Redis.

Сначала произведите установку сервера/кластера redis, например при помощи данной ansible роли. Далее вам необходимо настроить Gnocchi с openStack-Ansible на использования кластера Redis в качестве хранилища для входящих метрик:

gnocchi_conf_overrides:
  incoming:
    driver: redis
    redis_url: redis://{{ hostvars[groups['redis-master'][0]]['ansible_default_ipv4']['address'] }}:{{ hostvars[groups['redis-master'][0]]['redis_sentinel_port'] }}?sentinel=master01{% for host in groups['redis-slave'] %}&sentinel_fallback={{ hostvars[host]['ansible_default_ipv4']['address'] }}:{{ hostvars[host]['redis_sentinel_port'] }}{% endfor %}&db=0

Вам также потребуется установить дополнительные pip/системные пакеты для использования redis кластера:

gnocchi_distro_packages:
- apache2
- apache2-utils
- libapache2-mod-wsgi
- git
- build-essential
- python3-dev
- librados-dev
- libpq-dev
- python3-rados
# additional package for python redis client
- python3-redis
- libsystemd-dev
gnocchi_pip_packages:
- cryptography
- gnocchiclient
# this is what we want:
#  - "gnocchi[mysql,ceph,ceph_alternative_lib,redis,keystone]"
# but as there is no librados >=12.2 pip package we have to first install ceph without alternative support
# after adding the ceph repo to gnocchi container, python-rados>=12.2.0 is installed and linked automatically
# and gnocchi will automatically take up the features present in the used rados lib.
- "gnocchi[mysql,ceph,redis,keystone]"
- keystonemiddleware
- python-memcached
- redis
- systemd-python

Примечание

Небольшое предупреждение: имя альтернативной библиотеки Ceph (ceph_alternative_lib) отличается для различных версий Gnocchi.

Zookeeper для координации

Когда вы установили Gnocchi на нескольких серверах для распределения работы, добавьте Zookeper для координации. Для установки Zookeeper, вы можете использовать эту ansible роль.

Создайте контейнеры для Zookeeper:

## conf.d
zookeeper_hosts:
{% for server in groups['control_nodes'] %}
{{ server }}:
  ip: {{ hostvars[server]['ansible_facts']['default_ipv4']['address'] }}
{% endfor%}
## env.d
component_skel:
  zookeeper_server:
    belongs_to:
      - zookeeper_all

container_skel:
  zookeeper_container:
    belongs_to:
      - infra_containers
      - shared-infra_containers
    contains:
      - zookeeper_server
    properties:
      service_name: zookeeper

Теперь вы можете установить Zookeeper как координирующий сервис для Gnocchi:

gnocchi_coordination_url: "zookeeper://{% for host in groups['zookeeper_all'] %}{{ hostvars[host]['management_address'] }}:2181{% if not loop.last %},{% endif %}{% endfor %}"

Вам также может потребоваться установить дополнительные пакеты:

gnocchi_pip_packages:
- cryptography
- gnocchiclient
# this is what we want:
#  - "gnocchi[mysql,ceph,ceph_alternative_lib,redis,keystone]"
# but as there is no librados >=12.2 pip package we have to first install ceph without alternative support
# after adding the ceph repo to gnocchi container, python-rados>=12.2.0 is installed and linked automatically
# and gnocchi will automatically take up the features present in the used rados lib.
- "gnocchi[mysql,ceph,redis,keystone]"
- keystonemiddleware
- python-memcached
- redis
- systemd-python
# addiitional pip packages needed for zookeeper coordination backend
- tooz
- lz4
- kazoo

Тесты производительности для Gnocchi

Для лучшего понимания тонкой настройки стека Gnocchi, просмотрите данные презентации: