Terraform 如何更改计算引擎VM中的StackDriver日志记录代理配置?

Terraform 如何更改计算引擎VM中的StackDriver日志记录代理配置?,terraform,stackdriver,google-cloud-stackdriver,Terraform,Stackdriver,Google Cloud Stackdriver,我正在为项目中存在的所有计算引擎VM和集群创建在中生成的日志。 正如我们所知,导出目的地只能是云存储、云发布/订阅、BigQuery。因此,我无法区分由多个VM生成的日志。 例如:存在多个虚拟机,所有虚拟机都生成syslog,并且有一个云存储桶作为其目标,所有虚拟机的接收器将在同一个云存储桶中的名为syslog的目录中导出日志。 为了克服上述问题,我采用了一种配置StackDriver日志代理并更改logName标记的方法。有关更多详细信息,请参阅。使用上述方法,我能够将logName的标记从s

我正在为项目中存在的所有计算引擎VM和集群创建在中生成的日志。 正如我们所知,导出目的地只能是云存储、云发布/订阅、BigQuery。因此,我无法区分由多个VM生成的日志。 例如:存在多个虚拟机,所有虚拟机都生成syslog,并且有一个云存储桶作为其目标,所有虚拟机的接收器将在同一个云存储桶中的名为syslog的目录中导出日志。 为了克服上述问题,我采用了一种配置StackDriver日志代理并更改logName标记的方法。有关更多详细信息,请参阅。使用上述方法,我能够将logName的标记从syslog更改为[instance name]-syslog,从而将syslog从该GCE实例导出到一个文件夹,依此类推。 我现在正在手动更改/etc/google fluentd/config.d/[applicationon-NAME].conf文件中的标记。例如,下面是/etc/google fluentd/config.d/syslog.conf文件:

现在,通过在所有虚拟机中执行ssh,我手动将上面的syslog替换为[instance name]-syslog。我正在寻找一种方法来自动化上述事情。最合适的方法是什么?
另外,所有的虚拟机都在使用Terraform进行加速。首先,我们将日志上传到StackDriver,这样我就不会面临与您相同的问题

回到你们的问题上来,我认为这超出了Terraform,因为它只是在创建服务器。我建议两种选择:

使用一些CM工具(如Ansible)根据创建的新服务器注入文件名 如果没有配置CM,可以使用启动脚本创建自定义映像,脚本将检查conf是否存在,如果不存在,则根据路径/etc/google fluentd/config.d中的主机名创建conf/
显然,这两种方法的目标是相同的,其中一种是长期的

写入日志的记录是否不包含生成日志的CE实例?不能将所有记录写入一个GCS对象,然后按所需的CE实例过滤该对象吗?如何将所有日志导出数据输出到Pub/Sub,并使用云函数将记录写入不同的GCS存储桶?将数据发送到BigQuery并将其作为仓库托管在那里,然后在需要时执行SQL查询以获取数据怎么样?我们不希望Pub/Sub或BigQuery出现在图片中。是的,日志包含实例的ID和名称,并且过滤日志并将它们放到不同文件夹中是我们考虑实现的最后一个解决方案,因为这样做,将需要额外的服务器/实例/集群来周期性地运行脚本。是否有其他方法来配置日志名并完成工作?可以定义任意启动脚本,在每个计算引擎启动时执行该脚本。看见如果可以为Linux环境编写所需效果的脚本,那么可以定义在机器启动时发生的效果。
<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>