#terraform #stackdriver #google-cloud-stackdriver
#terraform #stackdriver #google-облако-stackdriver
Вопрос:
Я создаю для экспорта журналов для журналов, сгенерированных в Google Stackdriver Logging для всех виртуальных машин Compute Engine и кластеров, присутствующих в проекте.
Как мы знаем, местом назначения экспорта может быть только облачное хранилище, облачный паблик / Sub, BigQuery. Следовательно, я не могу различать журналы, сгенерированные несколькими виртуальными машинами.
Например: присутствует несколько виртуальных машин, и все они генерируют syslog
и имеют одну облачную корзину в качестве места назначения, приемники для всех виртуальных машин будут экспортировать журналы в каталог с именем syslog
в той же облачной корзине.
Чтобы преодолеть вышеупомянутую проблему, я следовал способу, которым мы настраиваем агент ведения журнала StackDriver и изменяем тег logName. Смотрите Это для получения более подробной информации.
Используя описанный выше подход, я могу изменить тег logName с syslog
на [instance-name]-syslog
и, следовательно, приемники экспортируют системный журнал из этого экземпляра GCE в одну папку и так далее.
На данный момент я меняю тег в /etc/google-fluentd/config.d/[APPLICATIOON-NAME].conf
файлах вручную. Например, вот /etc/google-fluentd/config.d/syslog.conf
файл:
<source>
@type tail
# Parse the timestamp, but still collect the entire line as 'message'
format syslog
path /var/log/syslog
pos_file /var/lib/google-fluentd/pos/syslog.pos
read_from_head true
tag syslog
</source>
Теперь я заменяю приведенный выше системный журнал на [instance-name]-syslog вручную, выполнив ssh на всех виртуальных машинах. Я ищу способ автоматизировать вышеупомянутую вещь. Какой был бы наиболее подходящий способ сделать это?
(P.S. Все виртуальные машины разворачиваются с использованием Terraform)
Комментарии:
1. Запись, записанная в журнал, не содержит экземпляр CE, который сгенерировал журнал? Нельзя ли записать все записи в один объект GCS, а затем отфильтровать этот объект по желаемому экземпляру CE? Как насчет вывода всех данных экспорта журнала в Pub / Sub и использования облачной функции для записи записей в разные сегменты GCS? Как насчет отправки данных в BigQuery и размещения их там в качестве хранилища и простого выполнения SQL-запроса для получения данных, когда / при необходимости?
2. Мы бы не предпочли, чтобы Pub / Sub или Bigquery отображались на картинке. И да, журналы содержат идентификатор и имя экземпляра, и фильтрация журналов и размещение их в разных папках — это последнее решение, которое мы бы рассматривали для реализации, потому что для этого потребовался бы дополнительный сервер / экземпляр / кластер для периодического запуска скрипта. Есть ли другой способ настроить имена журналов и выполнить работу?
3. Можно определить произвольный сценарий запуска, который выполняется при запуске каждого Compute Engine. Смотрите cloud.google.com/compute/docs/startupscript … если вы можете прописать желаемый эффект в вашей среде Linux, то вы могли бы определить, что это произойдет при загрузке компьютера.
Ответ №1:
Прежде всего, мы загрузили наши журналы в StackDriver, чтобы я не сталкивался с такой же проблемой, как вы.
Возвращаясь к вашему вопросу, я думаю, что это не относится к Terraform, поскольку он только создает сервер. Я бы предложил 2 варианта:
- Используйте некоторые инструменты CM, такие как Ansible, для ввода имени файла на основе созданного нового сервера
- Если у вас нет CM на месте, вы можете создать настроенный образ с помощью сценария запуска, скрипт проверит, существует ли conf, если нет, создайте conf на основе имени хоста в path /etc /google-fluentd /config.d/
По-видимому, два подхода нацелены на одно и то же, и # 1 является долгосрочным