【发布时间】: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