如何在Compute Engine VM中更改StackDriver日志记录代理配置?

时间:2019-03-29 04:03:23

标签: terraform stackdriver google-cloud-stackdriver

我正在为Log exports中的Google Stackdriver Logging中生成的日志创建项目中存在的所有Compute Engine VM和群集。
我们知道,导出目的地只能是云存储,云发布/订阅,BigQuery 。因此,我无法区分由多个VM生成的日志。
例如:存在许多虚拟机,它们全部生成syslog,并且有一个云存储桶作为目的地,所有虚拟机的接收器都将日志导出到目录中在同一云存储桶中名为syslog

为了克服上述问题,我遵循了一种配置StackDriver Logging代理并更改logName标记的方法。有关更多详细信息,请参见this
使用上述方法,我可以将logName的标签从syslog更改为[instance-name]-syslog,因此可以将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>

现在,我通过在所有VM中执行ssh手动将以上 syslog 替换为 [instance-name] -syslog 。我正在寻找一种自动化上述方法的方法。什么是最合适的方法? (P.S.所有虚拟机都正在使用Terraform旋转)

1 个答案:

答案 0 :(得分:1)

首先,我们将日志上传到StackDriver,所以我不会遇到与您相同的问题。

回到您的问题,我认为这不属于Terraform,因为它仅用于创建服务器。我建议2种选择:

  1. 使用Ansible之类的CM工具根据创建的新服务器注入文件名
  2. 如果没有CM,则可以使用启动脚本创建自定义映像,该脚本将检查conf是否存在,如果不存在,则根据路径/ etc / google-中的主机名创建conf。 fluentd / config.d /

显然,这两种方法都针对同一件事,而#1是长期的目标