Google Stackdriver теряет связь с Dataproc

Всякий раз, когда я настраивал кластер Google Dataproc с мониторингом Stackdriver и агентом мониторинга, я замечал, что Stackdriver просто теряет соединение всякий раз, когда Dataproc получает работу. В интерфейсе стекового драйвера он имеет значение задержки, которое, по их словам, не должно превышать 2 минуты в большинстве случаев. Это значение для меня - просто время, прошедшее с момента отправки задания (часто часов), и нет доступных метрик, которые нельзя увидеть на веб-странице Compute Engine.

Есть ли способ заставить мониторинг стековых драйверов работать с dataproc? Я хотел бы иметь возможность контролировать использование оперативной памяти моей работы, если это возможно.

Мониторинг Stackdriver запускается и настраивается моей организацией, но, похоже, у них есть доступ ко всем функциям. Мы не используем HTTP прокси. Агент мониторинга настраивается с помощью команд , описанных в документации Google. У меня есть скрипт запуска (флаг --initialization-actions), который работает как для мастера, так и для рабочих, который выглядит следующим образом:

#!/bin/bash
cd /tmp
curl -O "https://repo.stackdriver.com/stack-install.sh"
bash stack-install.sh --write-gcm
# ... other initialization stuffs

РЕДАКТИРОВАТЬ: "другие вещи инициализации" - это всего лишь пара команд gsutil copy, чтобы получить файлы ресурсов на локальные машины, если это имеет значение.

Я попытался перенести установку агента после других команд, и я использую только / tmp, потому что Google рекомендует использовать абсолютные пути при копировании файлов (забыл, где документация для этого, но это помогло мне раньше).

Вот снимок экрана с запросом о том, что я вижу в stackdriver. Обратите внимание, что все показатели, кроме использования ЦП, останавливаются на вертикальной линии. Вот когда работа была представлена ​​на искру сегодня:

Скриншот Stackdriver

Результаты grep stackdriver-agent /var/logs/syslog:

Sep  2 13:31:53 <cluster-name>-m stackdriver-agent[3609]: Starting Stackdriver metrics collection agent: stackdriver-agentoption = Hostname; value = 3431688934917455875;
Sep  2 13:31:53 <cluster-name>-m stackdriver-agent[3609]: option = Interval; value = 60.000000;
Sep  2 13:31:53 <cluster-name>-m stackdriver-agent[3609]: Created new plugin context.
Sep  2 13:31:53 <cluster-name>-m stackdriver-agent[3609]: option = PIDFile; value = /var/run/stackdriver-agent.pid;
Sep  2 13:31:53 <cluster-name>-m stackdriver-agent[3609]: option = Hostname; value = 3431688934917455875;
Sep  2 13:31:53 <cluster-name>-m stackdriver-agent[3609]: option = Interval; value = 60.000000;
Sep  2 13:31:53 <cluster-name>-m stackdriver-agent[3609]: Created new plugin context.
Sep  2 13:31:53 <cluster-name>-m stackdriver-agent[3609]: .
Sep  2 13:31:56 <cluster-name>-m stackdriver-agent[3823]: Stopping Stackdriver metrics collection agent: stackdriver-agent.
Sep  2 13:31:56 <cluster-name>-m stackdriver-agent[3842]: Starting Stackdriver metrics collection agent: stackdriver-agentoption = Interval; value = 60.000000;
Sep  2 13:31:56 <cluster-name>-m stackdriver-agent[3842]: Created new plugin context.
Sep  2 13:31:56 <cluster-name>-m stackdriver-agent[3842]: option = PIDFile; value = /var/run/stackdriver-agent.pid;
Sep  2 13:31:56 <cluster-name>-m stackdriver-agent[3842]: option = Interval; value = 60.000000;
Sep  2 13:31:56 <cluster-name>-m stackdriver-agent[3842]: Created new plugin context.
Sep  2 13:31:56 <cluster-name>-m stackdriver-agent[3842]: .

РЕДАКТИРОВАТЬ: Полная команда создания кластера:

gcloud dataproc clusters create <cluster-name> --master-machine-type n1-highmem-2 --worker-machine-type n1-highmem-2 --initialization-actions <path-to-script> --master-boot-disk-size 50GB --worker-boot-disk-size 50GB --num-workers 16 --network internal --zone us-east1-c --scopes https://www.googleapis.com/auth/cloud-platform --project <project-name> --tags dataproc

dataproc тег открывает брандмауэр на всех портах в моей организации. internal Сеть была найдена работать лучше, чем default

Результаты sudo systemctl | grep stackdriver-agent:

stackdriver-agent.service      active running   
LSB: start and stop Stackdriver Agent

Результаты sudo ps wwaux | grep stackdriver-agent:

root      3851  0.0  0.0 1004704 9096 ?        Ssl  12:50   0:00 /opt/stackdriver/collectd/sbin/stackdriver-collectd -C 
/opt/stackdriver/collectd/etc/collectd.conf -P /var/run/stackdriver-agent.pid
7053  0.0  0.0  12732  2068 pts/0    S+   13:14   0:00 grep stackdriver-agent

1 ответ

Я повторил некоторые ваши шаги, и хотя я не могу сказать, почему может показаться, что мониторинг "работает", пока вы не отправите задание, поскольку это было первое, с чем я столкнулся, когда пытался просто применить инструкции без отладки. внутренности Dataproc, вы должны убедиться, что вы предоставляете правильные области действия вашему кластеру Dataproc, чтобы агент стека-драйвера мог записать свои метрики в API. А именно, мне показалось, что сработало следующее, оставив действие init таким же:

gcloud dataproc clusters create dhuo-stackdriver \
    --initialization-actions gs://<my-bucket>/install_stackdriver.sh \
    --scopes https://www.googleapis.com/auth/monitoring.write

Кроме того, вы можете использовать другие области, перечисленные в документации по Stackdriver, такие как более широкие. cloud-platform объем. Обратите внимание, что это может переопределить некоторые другие миксины области действия по умолчанию, которые обычно добавляются, если не используются определенные пользователем области:

https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/bigtable.admin.table
https://www.googleapis.com/auth/bigtable.data
https://www.googleapis.com/auth/devstorage.full_control

Мой локальный тест с вашим фрагментом в качестве действия инициализации:

#!/bin/bash
cd /tmp
curl -O "https://repo.stackdriver.com/stack-install.sh"
bash stack-install.sh --write-gcm

плюс https://www.googleapis.com/auth/monitoring.write работал в моем тестовом проекте, в том числе путем подачи работы:

Страница Stackdriver для кластера Dataproc

Другие вопросы по тегам