Получение данных о кластере¶
В данном разделе приведена информация о средствах диагностики запущенного кластера Picodata.
Сбор служебных данных о состоянии кластера возможен после подключения к кластеру в консоли. После этого доступны команды, показывающие состояние raft-группы, отдельных инстансов, собранных из них репликасетов и т.д.
См. также:
Получение лидера raft-группы¶
Узнать лидера raft-группы, а также ID и статус текущего инстанса:
pico.raft_status();
Пример вывода:
---
- term: 2
leader_id: 1
raft_state: Leader
id: 1
...
Получение состава raft-группы¶
Просмотр состава raft-группы и данных инстансов:
box.space._pico_instance:fselect();
Пример вывода:
---
- - +-------------+--------------------------------------+-------+---------------+--------------------------------------+-------------+------------+--------------+
- |instance_name| instance_uuid |raft_id|replicaset_name| replicaset_uuid |current_state|target_state|failure_domain|
- +-------------+--------------------------------------+-------+---------------+--------------------------------------+-------------+--------------+--------------+
- | "i1" |"68d4a766-4144-3248-aeb4-e212356716e4"| 1 | "r1" |"e0df68c5-e7f9-395f-86b3-30ad9e1b7b07"|["Online",1] |["Online",1]| {} |
- | "i2" |"24c4ac5f-4981-3441-879c-aee1edb608a6"| 2 | "r1" |"e0df68c5-e7f9-395f-86b3-30ad9e1b7b07"|["Online",1] |["Online",1]| {} |
- | "i3" |"5d7a7353-3e82-30fd-af0d-261436544389"| 3 | "r2" |"eff4449e-feb2-3d73-87bc-75807cb23191"|["Online",1] |["Online",1]| {} |
- | "i4" |"826cbe5e-6979-3191-9e22-e39deef142f0"| 4 | "r2" |"eff4449e-feb2-3d73-87bc-75807cb23191"|["Online",1] |["Online",1]| {} |
- +-------------+--------------------------------------+-------+---------------+--------------------------------------+-------------+------------+--------------+
...
Можно отдельно посмотреть список репликасетов, их UUID и вес:
box.space._pico_replicaset:fselect();
Пример вывода:
---
- — +---------------+--------------------------------------+-----------+------+
- |replicaset_name| replicaset_uuid |master_name|weight|
- +---------------+--------------------------------------+-----------+------+
- | "r1" |"e0df68c5-e7f9-395f-86b3-30ad9e1b7b07"| "i1" | 1 |
- | "r2" |"eff4449e-feb2-3d73-87bc-75807cb23191"| "i3" | 1 |
- +---------------+--------------------------------------+-----------+------+
...
Таблицы выше позволяют узнать текущий и целевой уровень (state)
каждого инстанса, а также вес (weight) репликасета. Уровни отражают
конфигурацию остальных инстансов относительно текущего, а вес
репликасета — его наполненность инстансами согласно фактору репликации
(см. подробнее). Вес
репликасета определяет его
приоритет при распределении бакетов с данными.
Получение версии схемы данных¶
Узнать текущую версию схему данных можно с помощью команды:
box.space._pico_property:get("current_schema_version");
---
- ['current_schema_version', 1]
...
Каждое изменение схемы данных в кластере приводит к увеличению этого номера.
Просмотр отладочного журнала¶
Способ просмотра отладочного журнала инстансов зависит от того, как был запущен кластер Picodata.
Если при запуске инстанса командой picodata run в консоли не был явно
указан способ вывода отладочного журнала, то он выводится в ту же
консоль.
Если кластер развернут при помощи файла конфигурации, то в нем вывод
отладочного журнала может быть настроен в файл или в службу syslog.
Этим поведением управляет параметр конфигурации
instance.log.destination.
При развёртывании кластера через Ansible отладочный журнал по умолчанию
выводится в службу syslog.
Для доступа к отладочному журналу:
- при выводе в файл используйте команду
tail -fили любой другой инструмент просмотра файлов - при выводе журнала в
syslogиспользуйте командуjournalctl
При использовании службы syslog для просмотра журнала конкретного
инстанса вам понадобится знать имя его сервиса. При развёртывании через
Ansible оно по умолчанию формируется как
<cluster_name>@<instance_name>.service. Например, для кластера с именем
test и инстанса default-1000 команда для просмотра отладочного
журнала будет такой:
journalctl -u test@default-1000.service
Пример вывода:
systemd[1]: Starting Picodata cluster test@default-1000...
systemd[1]: Started Picodata cluster test@default-1000.
picodata[4731]: 'cluster.name': "test"
picodata[4731]: 'cluster.tier': {"default": {"replication_factor": 3, "bucket_count": 3000, "can_vote": true}}
picodata[4731]: 'cluster.default_replication_factor': 1
picodata[4731]: 'instance.instance_dir': "/var/lib/picodata/test/default-1000"
picodata[4731]: 'instance.name': "default-1000"
picodata[4731]: 'instance.iproto_listen': "0.0.0.0:13301"
picodata[4731]: 'instance.http_listen': "0.0.0.0:18001"
picodata[4731]: 'instance.admin_socket': "/var/run/picodata/test/default-1000.sock"
picodata[4731]: [supervisor:4731] running StartDiscover
picodata[4733]: entering discovery phase
...
Журнал raft-лидера¶
Отладочный журнал raft-лидера представляет особый интерес при диагностике неполадок в кластере т.к. содержит важную информацию об изменениях, происходящих с конфигурацией и топологией. Raft-лидером в каждый момент времени является только один инстанс в кластере и именно он управляет остальными. Для доступа к отладочному журналу raft-лидера выполните следующие шаги.
Вычислите raft-лидера в кластере. Для этого подключитесь к административной консоли любого инстанса:
picodata admin ./admin.sock
Переключите язык ввода на Lua и узнайте идентификатор текущего raft-лидера:
\lua;
pico.raft_status();
Пример вывода:
---
- main_loop_status: idle
leader_id: 2
id: 1
term: 30
raft_state: Follower
...
C помощью полученного leader_id выясните адрес сервера, на котором
запущен этот инстанс:
\sql;
SELECT "name", "_pico_instance"."raft_id", "_pico_peer_address"."address"
FROM "_pico_instance" JOIN "_pico_peer_address"
ON "_pico_peer_address"."raft_id"="_pico_instance"."raft_id"
WHERE "_pico_instance"."raft_id" = 2;
Пример вывода:
+-------------------------+---------+--------------------+
| name | raft_id | address |
+========================================================+
| "default-2000" | 2 | "192.168.0.2:3301" |
+-------------------------+---------+--------------------+
(1 rows)
Дальнейшие шаги зависят от варианта запуска. При развёртывании кластера
через Ansible потребуется подключиться к серверу по SSH и открыть
диагностический журнал через journalctl, см. Просмотр отладочного
журнала.
Проверка состояния инстанса по HTTP API¶
Инстанс Picodata отдаёт сведения о своём состоянии и работоспособности
по HTTP API на эндпоинт /api/v1/health/status. HTTP-код 200 означает
положительный результат, 503 — ошибку.
Для формирования корректного URL используйте адрес, указанный для параметра HTTP_LISTEN, например:
http://127.0.0.1:8081/api/v1/health/status
Эндпоинт /api/v1/health/status требует авторизации на инстансе
Picodata. Для получения данных авторизации отправьте в терминале запрос
следующего вида, указав данные ранее созданного пользователя:
curl -X POST http://127.0.0.1:8081/api/v1/session -H "Content-Type: application/json" -d '{
"username": "alice",
"password": "T0psecret"
}' | jq
Примечание
В этом и последующих примерах используется форматирование JSON-вывода
при помощи консольной утилиты jq.
В ответ Picodata пришлёт два токена (auth и refresh). Пример:
{
"auth": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZSIsImV4cCI6MTc3MzQ5NzQwNSwidHlwIjoiYXV0aCIsInJvbGVzIjpbImV4ZWN1dGUiLCJjcmVhdGUiLCJyZWFkIiwid3JpdGUiLCJsb2dpbiIsImFsdGVyIl19.-NXOef7e9ckRwGlJBuzOdXtRhI2nBhEZj5P1Wip7w30",
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZSIsImV4cCI6MTgwNDk0NzAwNSwidHlwIjoicmVmcmVzaCJ9.gEP-qlJjhlIhzg_05-8ntAaf9MeH4qiFw0ib_DiRM7U"
}
Токен auth действует в течение 24 часов. Теперь вы можете получить
данные о состоянии инстанса, указав токен в заголовке Authorization:
Bearer <token>:
curl -s "http://127.0.0.1:8081/api/v1/health/status" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZSIsImV4cCI6MTc3MzQ5NzQwNSwidHlwIjoiYXV0aCIsInJvbGVzIjpbImV4ZWN1dGUiLCJjcmVhdGUiLCJyZWFkIiwid3JpdGUiLCJsb2dpbiIsImFsdGVyIl19.-NXOef7e9ckRwGlJBuzOdXtRhI2nBhEZj5P1Wip7w30" | jq
Пример вывода
{
"status": "healthy",
"timestamp": 1773411090,
"uptimeSeconds": 14573,
"name": "i1",
"uuid": "2c4a425b-49c7-4e0f-86bd-1a479cd6ce4a",
"version": "25.5.0-1848-g41efc83dc",
"raftId": 1,
"tier": "default",
"replicaset": "default_1",
"currentState": "Online",
"targetState": "Online",
"targetStateReason": "wakeup",
"targetStateChangeTime": "2026-03-12 14:45:55.637123218 +00:00:00",
"limboOwner": 0,
"raft": {
"state": "Follower",
"term": 9,
"leaderId": 3,
"leaderName": "i3",
"appliedIndex": 162,
"commitedIndex": 162,
"compactedIndex": 0,
"persistedIndex": 162
},
"buckets": {
"active": 8192,
"pinned": 0,
"sending": 0,
"receiving": 0,
"garbage": 0,
"total": 16384
},
"cluster": {
"uuid": "24502c90-de10-4172-9a4c-82b8856caaf1",
"version": "25.5.0-1609-g92f7550fa"
}
}
Токен refresh действует в течение 1 года. Он предназначен для того,
чтобы обновить auth-токен без предоставления данных авторизации. Пример
запроса на выдачу новых токенов с помощью refresh-токена:
curl -s "http://127.0.0.1:8081/api/v1/session" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZSIsImV4cCI6MTgwNDk0NzAwNSwidHlwIjoicmVmcmVzaCJ9.gEP-qlJjhlIhzg_05-8ntAaf9MeH4qiFw0ib_DiRM7U" | jq
Метрики инстанса¶
Функциональность сбора метрик позволяет получать параметры работы СУБД из инстанса Picodata и предоставлять доступ к ним для внешних систем в формате Prometheus.
Включение сбора метрик¶
Модуль сбора метрик автоматически включается при использовании
встроенного HTTP-сервера в Picodata. Для этого нужно при запуске
инстанса использовать параметр --http-listen и задать адрес
веб-сервера. Например:
picodata run --http-listen '127.0.0.1:8081'
См. также:
- Параметр конфигурации instance.http.listen
Метрики в консоли¶
Метрики инстанса Picodata можно получить в консоли, используя curl:
curl --location 'http://127.0.0.1:8081/metrics'
См. также: