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. Обратите внимание, что все показатели, кроме использования ЦП, останавливаются на вертикальной линии. Вот когда работа была представлена на искру сегодня:
Результаты 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
работал в моем тестовом проекте, в том числе путем подачи работы: