【问题标题】:How to change the StackDriver logging agent configuration in Compute Engine VMs?如何更改 Compute Engine 虚拟机中的 StackDriver 日志记录代理配置?
【发布时间】:2019-03-29 04:03:22
【问题描述】:

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

为了克服上述问题,我采用了一种配置 StackDriver Logging 代理并更改 logName 标记的方法。有关详细信息,请参阅this
使用上述方法,我可以将 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>

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

【问题讨论】:

  • 写入日志的记录是否不包含生成日志的CE实例?不能将所有记录写入一个 GCS 对象,然后按所需的 CE 实例过滤该对象吗?将所有日志导出数据输出到 Pub/Sub 并让云功能将记录写入不同的 GCS 存储桶呢?将数据发送到 BigQuery 并将其作为仓库托管在那里,并在需要时/如果需要时简单地执行 SQL 查询来获取数据呢?
  • 我们不希望 Pub/Sub 或 Bigquery 参与进来。是的,日志包含实例的 ID 和名称,过滤日志并将它们放入不同的文件夹是我们考虑实施的最后一个解决方案,因为这样做需要额外的服务器/实例/集群定期运行脚本。还有其他方法可以配置日志名称并完成工作吗?
  • 可以定义一个在每个 Compute Engine 启动时执行的任意启动脚本。请参阅cloud.google.com/compute/docs/startupscript ... 如果您可以为您的 Linux 环境编写所需的效果,那么您可以将其定义为在机器启动时发生。

标签: terraform stackdriver google-cloud-stackdriver


【解决方案1】:

首先,我们将日志上传到 StackDriver,这样我就不会遇到和你一样的问题了。

回到你的问题,我认为这不属于 Terraform,因为它只是在创建服务器。我会建议 2 个选项:

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

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

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2021-04-05
    • 2018-12-27
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多