Диагностика
Начинайте с записи, а не с внутренностей Temporal. Короткая последовательность:
$ graphenectl ctx show
$ graphenectl whoami
$ graphenectl get <kind>/<id> -o yaml
$ graphenectl events <kind>/<id>
$ graphenectl logs <kind>/<id> --tail 100
$ graphenectl tree <kind>/<id>
Не удаётся подключиться или войти
- Проверьте effective server, namespace и insecure mode через
ctx show. - Проверьте
/healthzна той же двери. - TLS handshake к plaintext dev-стеку требует явного
--insecure; не скрывайте этим флагом сломанный remote TLS. permission_deniedозначает успешную аутентификацию, но отсутствие роли дляverb × kind × namespace. Проверьтеwhoami, roles и bindings.unauthenticatedозначает отсутствующий, истёкший или невалидный token.
Не работает materialization
$ graphenectl get gitsource/main -o yaml
$ graphenectl events gitsource/main
$ graphenectl revision materialize <pipeline> --source gitsource/main
$ graphenectl events revision/<id>
$ graphenectl logs revision/<id>
Проверьте Git URL/ref/subdir, credentialRef, commit источника и runtime.
Runtime требует image, build и artifact; toolchain image должен скачиваться
Docker runtime сервера. Build output принадлежит revision record, даже если
наблюдающий client отключился.
Run завис или повторяется
$ graphenectl run status <run-id>
$ graphenectl run watch <run-id> --plain --logs all
status показывает pending activity, attempt, последний heartbeat и failure.
Затем проверяйте названный resource. Повторный Scheduled без start обычно
означает отсутствие worker на очереди; started activity со старым heartbeat —
потерянный или заблокированный executor.
Отменяйте через run cancel, а не hard workflow termination, чтобы сработал
cleanup. At-most-once работа может вернуть ErrUnknown: до ручного повтора
проверьте внешнюю систему.
Agent не становится ready
$ graphenectl get agent/edge-1 -o yaml
$ graphenectl events agent/edge-1
$ journalctl -u graphene-agent -n 200 --no-pager
Проверьте доступность GRAPHENE_AGENT_SERVER и с хоста, и из executor; scope
токена на тот же id/namespace; наличие runc; отсутствие прежней привязки
машины к другому id. 127.0.0.1 для удалённого агента указывает на него самого,
а не сервер.
Нет logs, metrics или traces
State и events могут работать, потому что приходят из Temporal. Для измерений
3–5 проверьте и ingest, и query URLs сервера. Пустой ingest принимает и теряет
сигнал. Запустите запрос записи с -f, затем посмотрите response codes бекенда
в логах сервера, time range и точную entity reference.
Не завершается deletion
Удаление финализирует детей первыми. Через tree найдите первого child в
deleting/failed. Resource на безвозвратно потерянном agent не может выполнить
finalize; автоматического burial пока нет. Сохраните свидетельства до ручной
правки внешнего объекта.
Development-стек
$ docker compose ps
$ docker compose logs --tail=200 graphene
$ docker compose logs --tail=200 temporal registry minio
$ docker compose config --quiet
Сохраняйте один GRAPHENE_SECRETS_KEY вместе с data volume. Несовпавший ключ
намеренно ломает startup. На SELinux hosts checked-in Compose использует
label:disable для Docker socket mount.